1. Docker Compose
1.1 介绍
Docker Compose 是 Docker 容器进行编排的工具,用于定义和运行多容器Docker应用程序的工具,使用Compose,可以通过使用YAML模板文件来配置应用程序的服务。然后,使用一条命令,可以依据YMAL模板文件启动所有服务。
1.2 使用方法
使用Compose 基本上分为三步:
- Dockerfile 定义应用的运行环境
- docker-compose.yml 定义组成应用的各服务
- docker-compose up 启动整个应用
1.3 compose
模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。这里面大部分指令跟 docker run 相关参数的含义都是类似的。
默认的模板文件名称为 docker-compose.yml ,格式为 YAML 格式。
1.4 常用的命令
docker-compose -v 查看docker-compose版本信息
docker-compose up //创建,启动容器
down //停止并删除所有的容器的和网络、数据卷等
ps //查看所有容器
start/stop/restart //启动/停止/重启 容器
rm //移除停止的容器
create //创建容器
pause
unpause
top
logs //查看服务的日志
kill //杀死容器
images //显示模板文件所有服务使用的镜像
exec //在一个运行的容器中执行一条命令
1.5 模板文件常用的标签:
version: "3" //版本
services: //服务
db: //其中一个服务的名字,服务其实既是容器
image: //基础镜像
build: //读取一个Dockerfile文件,构建镜像,并使用该镜像作为基础镜像,它不能和image同时存在在一个服务中
container_name: web1 //给容器定义一个名字
ports: //端口映射
- "80:80"
volumes: //功能类似于docker run时的-v选项,挂载卷到容器中
- "/opt/html:/usr/local/nginx/html"
- "/usr/local/nginx/conf"
- "logs:/usr/local/nginx/logs"
command: //容器运行的执行的命令,可以覆盖容器默认的命令
entrypoint: //入口点,和Dockerfile中的entrypoint功能相似,这里写的话,会直接覆盖原来的entrypoint
depends_on: //解决容器的依赖、启动先后的顺序
environment: //可用数组或者字典设置环境变量
1.6 实战1
1.6.1 编写启动nginx 容器的compose文件
[root@localhost ~]# vim docker-compose.yml
[root@localhost ~]# cat docker-compose.yml
version: "3"
services:
web1:
image: nginx
ports:
- "81:80"
web2:
image: nginx
ports:
- "82:80"
1.6.2 基于compose文件后台运行容器
[root@localhost ~]# docker-compose up -d
Creating root_web1_1 ... done
Creating root_web2_1 ... done
1.6.3 查看正在运行的容器
[root@localhost ~]# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------
root_web1_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:81->80/tcp
root_web2_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:82->80/tcp
1.6.4 重启所有容器
[root@localhost ~]# docker-compose restart
Restarting root_web1_1 ... done
Restarting root_web2_1 ... done
1.6.5 重启指定的容器
[root@localhost ~]# docker-compose restart web1
Restarting root_web1_1 ... done
1.6.7 -f 参数的使用
Options:
-f, --file FILE Specify an alternate compose file
(default: docker-compose.yml)
将默认的compose文件改名,使用 -f 参数指定compose文件
[root@localhost ~]# mv docker-compose.yml nginx.yml
[root@localhost ~]# docker-compose -f nginx.yml restart
Restarting root_web1_1 ... done
Restarting root_web2_1 ... done
1.7 实战2
编写启动nextcloud 容器和mysql容器的compose文件
1.7.1 创建工作目录
[root@localhost ~]# mkdir nextcloud
[root@localhost ~]# cd nextcloud/
1.7.2 编写compose文件
[root@localhost nextcloud]# vim docker-compose.yml
[root@localhost nextcloud]# cat docker-compose.yml //查看文件内容
version: "3"
services:
nextcloud:
image: nextcloud
ports: //端口映射
- "80:80"
depends_on: //依赖mysql服务
- "mysql"
mysql:
image: mysql:5.7
ports: //端口映射
- "3306:3306"
environment: //设置环境变量
MYSQL_ROOT_PASSWORD: 123 // 设置root用户密码
MYSQL_USER: nextcloud //创建用户nextcloud
MYSQL_PASSWORD: 123 //设置nextcloud用户密码为123
MYSQL_DATABASE: nextcloud //创建数据库nextcloud
[root@localhost nextcloud]#
1.7.3 基于compose文件后台运行容器
[root@localhost nextcloud]# docker-compose up -d
Creating network “nextcloud_default” with the default driver
Creating nextcloud_mysql_1 … done
Creating nextcloud_nextcloud_1 … done
1.7.4 查看所有容器状态
[root@localhost nextcloud]# docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------
nextcloud_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
nextcloud_nextcloud_1 /entrypoint.sh apache2-for ... Up 0.0.0.0:80->80/tcp
1.7.5 打开浏览器验证配置(初始化时间较长,请耐心等待)
1.7.6 成功访问nextcloud
1.8 实战3
编写compose文件,实现mysql结合wordpress的效果
1.8.1 创建工作目录
[root@localhost ~]# mkdir wordpress
[root@localhost ~]# cd wordpress/
1.8.2 编写compose文件
[root@localhost wordpress]# vim docker-compose.yml
[root@localhost wordpress]# cat docker-compose.yml
version: "3"
services:
wordpress:
image: wordpress
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: tom
WORDPRESS_DB_PASSWORD: 123
depends_on:
- "mysql"
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 123
MYSQL_DATABASE: wordpress
MYSQL_USER: tom
MYSQL_PASSWORD: 123
[root@localhost wordpress]#
1.8.3 基于compose文件运行容器
[root@localhost wordpress]# docker-compose up -d
Creating network "wordpress_default" with the default driver
Creating wordpress_mysql_1 ... done
Creating wordpress_wordpress_1 ... done
1.8.4 查看所有容器状态
[root@localhost wordpress]# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------
wordpress_mysql_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
wordpress_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:80->80/tcp