之前已经介绍过如何使用docker命令部署一个博客系统,这个过程两次使用docker命令启动container并且启动过程中有各种参数;如果系统足够庞大的话这种方式对container管理起来会非常不方便,有没有更方便的方式对系统进行管理呢?
docker compose就是解决这个问题的一个批处理工具。
docker compose通过一个yml文件docker-compose.yml文件管理多个container。docker-compose.yml到目前有三个版本,下面学习使用版本3.
docker-compose三大核心:service network volume
官方安装文档:https://docs.docker.com/compose/install;官网有详细的安装命令
下面是我在本地的安装记录
1、下载文件:sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2、添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
3、docker-compose加入环境变量
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
4、检查是否安装成功
docker-compose --version
下面是将博客系统使用docker-compose文件的方式进行定义,文件内有详细的说明;这样一个文件就能定义多个container并且管理他们之间的关系
#docker compose 的版本
version: '3'
#定义一个container组
services:
#定义我们的workpress container
#docker run -d -e WORDPRESS_DB_HOST=mysql:3306
#--link mysql -p 8080:80 wordpress
wordpress:
#他对应的image 从docker hup中拉去
#image如果需要本地构建这里将image去掉
#换成如下:
#build:
#dockerfile所在目录
#context: .
#dockerfile的名字
#dockerfile: Dockerfile
image: wordpress
container_name: wordpress
#映射端口
ports:
- 8080:80
#连接mysql容器
links:
- mysql
#传入的参数
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_PASSWORD: root
#网络连接方式
networks:
#网络连接方式的名称 在下面的networks中具体定义
- my-bridge
#定义我们的mysql container
#docker run -d --name=mysql -v /home/zyz/mysqldata:/var/lib/mysql
#-e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql:5.7
mysql:
#镜像名称
image: mysql:5.7
container_name: mysql
#参数定义
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
#数据持久化映射
volumes:
#由下面的volumes中具体定义
#可以直接指定地址,本例中采用系统默认
#- 本地地址:/opt/src
- mysql-data:/var/lib/mysql
#网络连接方式
networks:
- my-bridge
volumes:
mysql-data:
networks:
#对应上面的 - my-bridge
my-bridge:
#连接方式为桥接
driver: bridge
上面docker-compose.yml已经定义好博客系统相关信息,可以使用docker-compose相关命令启动系统。下面是启动docker-compose.yml文件中定义的资源
-f参数指定docker-compose资源定义的文件名 -up参数表示启动docker-compose.yml定义的相关资源 -d参数表示后台启动
[root@k8s-01 ~]# docker-compose -f docker-compose.yml up -d
Creating mysql ... done
Creating wordpress ... done
注意:命令的顺序,up放在-f前会报错;-d参数必须在up的后面
查询宿主机上通过docker-compose启动的service
[root@k8s-01 ~]# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------
mysql docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
wordpress docker-entrypoint.sh apach ... Up 0.0.0.0:8080->80/tcp
如果不指定-f参数stop会停止宿主机上所有docker-compose启动的服务
[root@k8s-01 ~]# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------
mysql docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
wordpress docker-entrypoint.sh apach ... Up 0.0.0.0:8080->80/tcp
[root@k8s-01 ~]# docker ps|egrep "mysql|wordpress"
06785de77d64 wordpress "docker-entrypoint.s…" 12 minutes ago Up 12 minutes 0.0.0.0:8080->80/tcp wordpress
176a1af6e67e mysql:5.7 "docker-entrypoint.s…" 12 minutes ago Up 12 minutes 3306/tcp, 33060/tcp mysql
[root@k8s-01 ~]# docker-compose -f docker-compose.yml stop
Stopping wordpress ... done
Stopping mysql ... done
[root@k8s-01 ~]# docker-compose ps
Name Command State Ports
-----------------------------------------------------------
mysql docker-entrypoint.sh mysqld Exit 0
wordpress docker-entrypoint.sh apach ... Exit 0
[root@k8s-01 ~]# docker ps|egrep "mysql|wordpress"
[root@k8s-01 ~]# docker ps -a|egrep "mysql|wordpress"
06785de77d64 wordpress "docker-entrypoint.s…" 12 minutes ago Exited (0) 25 seconds ago wordpress
176a1af6e67e mysql:5.7 "docker-entrypoint.s…" 12 minutes ago Exited (0) 23 seconds ago mysql
[root@k8s-01 ~]#
down参数会将-f参数指定文件下的所有资源删除,不指定-f参数会删除本机上所有docker-compose资源
[root@k8s-01 ~]# docker-compose -f docker-compose.yml down
Removing wordpress ... done
Removing mysql ... done
Removing network root_my-bridge
[root@k8s-01 ~]# docker-compose ps -a
Name Command State Ports
------------------------------
[root@k8s-01 ~]# docker ps -a|egrep "mysql|wordpress"
[root@k8s-01 ~]#
原文链接:https://www.cnblogs.com/flags-blog/p/15333086.html