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
posted @ 2022-06-08 16:22  陽YANG  阅读(123)  评论(0)    收藏  举报