docker-compose应用
一、docker compose概述
Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景
二、安装docker-compose
如果能访问公网,可以直接通过官方下载:
curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
三、docker-compose.yaml文件
介绍工作中常用的几个参数:
version # 指定 compose 文件的版本,必写
services # 定义所有的 service 信息, 必写
image # 镜像名称或镜像ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
restart: always # 容器总是重新启动。
container_name # 容器名
volumes # 挂载,可用于挂载配置文件,data等
command # 容器内执行什么命令
ports # 对外暴露的端口
environment # 添加环境变量
network_mode # 设置网络连接模式
如:
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
四、部署示例
docker-compose.yml部署mysql
- 编写docker-compose.yml文件
version: '3.6'
services:
mysql:
image: mysql:5.7
container_name: 'mysql'
ports:
- "0.0.0.0:3306:3306"
restart: always
environment:
MYSQL_USER: root
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my_secret_pwd
(此处用密码文件存储密码,需要将密码文件挂载到容器中)
volumes:
- "./data/:/var/lib/mysql"
- "/run/secrets/my_secret_pwd:/run/secrets/my_secret_pwd"
- 在docker-compose.yml文件所在目录下执行:
docker-compose up -d
#启动运行,如果已有镜像会直接运行,如果不存在镜像,会先拉取镜像再启动
docker-compose常用命令
常用命令
| 介绍 |
---|---|
docker-compose config -q | 验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。 |
docker-compose ps | 显示所有容器 |
docker-compose up -d | 构建启动容器 |
docker-compose down | 删除当前容器(数据也会清除,慎用) |
docker-compose logs service_name | 查看指定service的日志 |
docker-compose logs -f service_name | 查看指定service的实时日志 |
docker-compose pause service_name | 暂停指定服务(停止提供服务,但是数据仍在) |
docker-compose unpause service_name | 恢复指定服务 |
docker-compose stop service_name | 停止指定服务的容器 |
docker-compose start service_name | 启动指定服务的容器 |
docker-compose restart service_name | 重启指定服务 |
docker-compose rm service_name | 删除指定服务的容器(删除前需关闭此容器) |
若用docker-compose部署服务,需要合理规避以下几点问题:
-
若services关联的有数据库,应将数据库单独分离出来(再写一个docker-compose.yaml文件部署数据库),避免和其他services写在同一个docker-compose.yaml文件中
-
多个services之间相互关联,有强依赖性时(缺少任何一个services,整个服务都无法正常运行),可共用一个docker-compose.yaml文件
-
若services之间仅是关联关系,没有强依赖性,可单独运行并提供服务时,建议也将各个服务分离出来,便于后期维护、拓展
-
docker-compose.yml文件中如果涉及到密码等敏感信息,都建议采用secrets字段,通过文件保存密码,再将密码文件权限设置为600