假设我们有一百个容器,不可能一个一个去操作吧,docker-compose 是一个命令工具,可以用来批量操作容器
1. 安装 docker-compose 命令
[root@localhost ~]$ curl -L https://github.com/docker/compose/releases/download/1.17.0-rc1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose [root@localhost ~]$ chmod 755 /usr/local/bin/docker-compose # 添加可执行权限 [root@localhost ~]$ docker-compose version # 查看docker-compose命令的版本 docker-compose version 1.17.0-rc1, build a0f95af # docker-compose命令区分 version 1 和 version 2 版本 docker-py version: 2.5.1 # version 2 版本支持更多的指令,version 1 将来会被弃用 CPython version: 2.7.13
2. 编辑 yaml 文件,该文件用于定义要被 docker-compose 操作的容器
[root@localhost ~]$ vim docker-compose.yml # 文件名是固定的 version: "2" # 指定使用docker-compose命令的version2版本,不指定默认使用version1 services: # 指定要操作的services(服务),所有要操作的容器都要写在services下 app1: # 指定容器名(这里我操作两个容器,app1和下面的app2) image: centos # 指定容器要使用的镜像,这个镜像必须是本地已经下载好了的 ports: # 指定宿主机与容器的端口映射 - "80:80" networks: # 指定容器要使用的网络,这里使用的net1要跟最下面的network相对应,最下面的network用来指定使用哪种网络模式 - "net1" volumes: # 指定宿主机的/data目录挂载到容器的/data目录 - /data:/data
entrypoint: tail -f /etc/passwd # 防止执行完docker-compose命令后容器就停止运行 app2: image: centos_with_nginx networks: - "net2" volumes: - /data:/data entrypoint: tail -f /etc/passwd networks: # 指定容器的网络模式 net1: # 指定app1容器的网络模式,要跟上面的networks对应 driver: bridge net2: # 指定app2容器的网络模式,要跟上面的networks对应 driver: bridge
3. 使用 docker-compose 批量操作容器
[root@localhost ~]$ docker-compose up -d # 批量生成容器,-d 表示在后台运行 [root@localhost ~]$ docker-compose ps # 批量查看容器运行状态 [root@localhost ~]$ docker-compose stop # 批量停止运行容器 [root@localhost ~]$ docker-compose rm -f # 批量删除已经停止运行的容器,-f 跳过确认 [root@localhost ~]$ docker-compose --help # 更多批量操作命令可以通过--help来查看