docker_docker-compose
docker-compose
介绍
之前已经介绍过如何使用docker命令部署一个博客系统,这个过程两次使用docker命令启动container并且启动过程中有各种参数;如果系统足够庞大的话这种方式对container管理起来会非常不方便,有没有更方便的方式对系统进行管理呢?
docker compose就是解决这个问题的一个批处理工具。
docker compose通过一个yml文件docker-compose.yml文件管理多个container。docker-compose.yml到目前有三个版本,下面学习使用版本3.
docker-compose三大核心:service network volume
- service中包含多个container
- networks中定义container的连接方式
- volumes中定义container数据持久化的地址信息
安装
官方安装文档: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定义文件
下面是将博客系统使用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操作
上面docker-compose.yml已经定义好博客系统相关信息,可以使用docker-compose相关命令启动系统。下面是启动docker-compose.yml文件中定义的资源
docker-compose启动资源
-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查询命令
查询宿主机上通过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
docker-compose停止服务
如果不指定-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 ~]#
docker-compose删除服务
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 ~]#