Docker Compose 和 Docker fille 实例
1、Docker Compose部署 WordPress 博客项目
用到文件 docker-compose
# curl命令从GitHub上的Docker Compose仓库下载二进制文件
# 语法:curl -L "<GitHub上的Docker Compose仓库网址>" -o /usr/local/bin/docker-compose
# 下载实例:
[root@wfy ~]# curl -L "https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
为该二进制文件添加可执行权限
[root@wfy ~]# chmod +x /usr/local/bin/docker-compose
[root@wfy ~]# ll /usr/local/bin/docker-compose
-rwxr-xr-x 1 root root 25968640 Jun 7 15:39 /usr/local/bin/docker-compose
进行命令测试
[root wfy ~]# docker-compose --version
Docker Compose version v2.6.0
定义项目,切换到该项目目录
[root@wfy ~]# mkdir my_wordpress && cd my_wordpress
[root@wfy my_wordpress]# vi docker-compose.yml
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
项目目录中构建项目
[root@wfy my_wordpress]# docker-compose up -d
#出现Network my_wordpress_default Error报错,重启docker服务即可
在浏览器访问Wordpress
IP:8000
2、Dockerfile构建http服务
构建上下文和所需的文件
[root@wfy ~]# mkdir dockerfile-test
[root@wfy~]# cd dockerfile-test/
[root@wfy dockerfile-test]# touch Dockerfile
[root@wfy dockerfile-test]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@wfy dockerfile-test]# cp /etc/yum.repos.d/CentOS-Base.repo .
编辑Dockerfile
[root@wfy dockerfile-test]# vi Dockerfile
FROM centos:7
RUN rm -rf /etc/yum.repos.d/*
COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
RUN yum repolist && yum install -y httpd
EXPOSE 80
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
报错就关闭 防火墙,selinux,开启IP转发
[root@wfy ~]# setenforce 0
[root@wfy ~]# vi /etc/selinux/config
SELINUX=disabled
[root@wfy ~]# systemctl stop firewalld
[root@wfy ~]# echo 'net.ipv4.ip_forward=1' >>/etc/sysctl.conf
[root@wfy ~]# sysctl -p
构建镜像
[root@wfy dockerfile-test]# docker build -t centos-httpd-wfy:1.0 .
[root@wfy dockerfile-test]# docker run --rm -d -p 8000:80 --name my-httpd centos-httpd-wfy:1.0
查看
[root@wfy dockerfile-test]# docker ps -a
[root@wfy dockerfile-test]# echo hello apache >> index.html
[root@wfy dockerfile-test]# docker cp index.html my-httpd:/var/www/html (正在运行的容器名是 my-httpd)
2.5更改dockfile
[root@docker centos7]# vi Dockerfile
FROM centos:7
RUN rm -rf /etc/yum.repos.d/*
COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
RUN yum repolist && yum install -y httpd
EXPOSE 80
COPY index.html /var/www/html
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
ENV HOSTNAME www.example.com
[root@docker centos7]# docker build -t http:v2.0 .
[root@docker centos7]# docker run -d -p 8080:80 http:v2.0
f06a389a52b682f7331bab418f1c21cc11c92dafa35237d291d5c2c4dd8a3a98
[root@docker centos7]# curl localhost:8080
hello apache
[root@docker centos7]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
http v2.0 c647b7cefc78 9 seconds ago 407MB
http v1.0 d521e0174cbb About an hour ago 407MB
3、registry的使用
上传 registry.tar文件
加载包
[root@docker /]# docker load -i registry_latest.tar
[root@docker /]# docker run -d --name registry -p 5000:5000 --restart=always registry:latest
设置此容器自启动
3572789db594a8a4fba383bf4b0c64919f6bdc92d47aa79784b1d3212e72b8b4
[root@docker /]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3572789db594 registry:latest "/entrypoint.sh /etc鈥 3 seconds ago Up 1 second 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp registry
[root@docker /]#
验证仓库
[root@docker /]# curl http://127.0.0.1:5000/v2/_catalog
{"repositories":[]}
打标签上传镜像到本地仓库
[root@docker ~]# docker tag centos:7 127.0.0.1:5000/centos
[root@docker ~]# docker push 127.0.0.1:5000/centos
Using default tag: latest
The push refers to repository [127.0.0.1:5000/centos]
174f56854903: Pushed
latest: digest: sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f size: 529
[root@docker ~]#
[root@docker /]# curl http://127.0.0.1:5000/v2/_catalog
{"repositories":["centos"]}
删除镜像
[root@docker /]# docker rmi 127.0.0.1:5000/centos
再拉取
[root@docker /]# docker pull 127.0.0.1:5000/centos
[root@docker /]# docker images
4、将仓库的镜像供其他人使用
使用远程私有镜像
客户端
cat /etc/docker/daemon.json
{ "insecure-registries":["192.168.5.128:5000"],"registry-mirrors":["https://lrppnyd2.mirror.aliyuncs.com"] }
systemctl daemon-reload
systemctl restart docker
客户端拉取服务端镜像时使用的是https,"insecure-registries":["192.168.5.128:5000"]加上这条使用http
运行镜像
docker run --name centos-7 -itd 192.168.5.128:5000/centos
进入镜像并安装net-tools
[root@docker ~]# docker exec -it c224eb01c3dd /bin/bash
[root@c224eb01c3dd /]# yum -y install net-tools
ctrl + q + p 退出
将容器封装成镜像
[root@docker ~]# docker commit c224eb01c3dd centos:net
sha256:189d33053d5f60df37af4be7863dac11d0467023d04438af8cca19447c9d0114
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos net 189d33053d5f 6 seconds ago 375MB
打标签推送
[root@docker ~]# docker tag centos:net 192.168.5.128:5000/centos2:net
[root@docker ~]# docker push 192.168.5.128:5000/centos2:net
查看
[root@docker ~]# curl http://192.168.5.128:5000/v2/_catalog
{"repositories":["centos","centos2"]}
服务端
将客户端上传的镜像打成tar包
拉取客户端上传的镜像
[root@docker ~]# docker pull 127.0.0.1:5000/centos2:net
将文件打成tag
[root@docker ~]# docker save 127.0.0.1:5000/centos2:net > /opt/centos2_net.tar
[root@docker ~]# cd /opt/
[root@docker opt]# ls
centos2_net.tar containerd jdk1.8.0_271 tmp
修改镜像centos:net的/etc/hosts并打包成tag
跑容器
docker run -dit --name centos-net 127.0.0.1:5000/centos
docker exec -it 1b0f2d8f686 /bin/bash
修改配置文件
[root@1b0f2d8f686a /]# tail -n 1 /etc/hosts
172.17.0.3 centos-net
退出容器
[root@docker opt]# docker export 1b0f2d8f6 > /opt/finalcentos.tar
[root@docker opt]# ls
centos2_net.tar containerd finalcentos.tar jdk1.8.0_271 tmp
云计算是一种服务模型,通过网络的方式,获取资源(计算,存储,网络)

浙公网安备 33010602011771号