docker详解(三):Docker Compose
2024-04-14 17:59:17
浏览:72
评论:0
前言
在Docker详解(一)中,已经安装配置了docker-composer。
Docker Composer概述
Docker Compose 是 Docker 官方提供的一种工具,用于定义和运行多个 Docker 容器的应用程序。它基于 Docker 命令行工具,提供了一个简单的 YAML 文件格式,用于定义多个容器之间的关系和配置,然后可以使用单个命令来启动、停止和管理这些容器。
使用Docker详解(二)中的Dockerfile我们很容易定义一个单独的应用容器。但在实际的项目中,例如一个 Web 应用程序,其中包含多个容器,例如 Web 服务器、数据库和缓存等。我们可以使用 Docker Compose,通过定义一个 Compose 文件,可以指定每个容器的配置、服务之间的依赖关系以及它们应该运行在哪个网络中。然后使用 Docker Compose 命令来启动整个应用程序,并在需要时停止或重新构建容器。这样就可以轻松地管理和部署一个复杂的应用程序
Docker Compose、machine 和 swarm 是docker 原生提供的三大编排工具。简称docker三剑客。
Docker Compose YAML 文件配置
Docker Compose 的 YAML 文件是用于定义多个容器之间的关系和配置的文件,它使用键值对的方式来表示各种配置。以下是 Docker Compose YAML 文件的一些常见配置项
配置项 | 描述 |
---|---|
version | 指定 Docker Compose 的版本号,通常是设置版本为 3,这样可以使用更多高级的功能 |
services | 定义了运行服务的Docker容器配置,可以指定每个服务的镜像、容器名称、启动命令、端口映射、环境变量等。 |
networks | 定义各个网络的配置,常见的如 bridge、host、overlay 等 |
volumes | 如果服务中有数据卷名称,必须在文件中配置此数据卷 |
services下的常用配置项更多配置
配置项 | 描述 |
---|---|
image | 指定镜像的名称或者 ID,用于拉取或者使用一个已经存在的镜像 |
container_name | 容器名称,指定一个自定义容器名,而不是默认生成的名称 |
ports | 指定容器内部端口和主机端口之间的映射关系 |
volumes | 定义各个数据卷的配置,可以指定数据卷的类型、名称、挂载目录等 |
restart | always 表示如果服务启动不成功会一直尝试 |
depends_on | 可以配置依赖服务,表示需要先启动 depends_on 下面的服务后,再启动本服务 |
environment | 此节点下的信息会当作环境变量传入容器 |
command | 覆盖容器启动后默认执行的命令 |
Docker Compose 常用命令
命令 | 描述 |
---|---|
docker-compose down | 停止并删除容器、网络、数据卷等资源 |
docker-compose build | 构建 Docker 镜像 |
docker-compose start/stop/restart | 启动/停止/重启/已经存在的容器 |
docker-compose ps | 列出当前项目中所有的容器 |
docker-compose logs | 查看容器的日志输出 |
docker-compose exec | 进入正在运行的容器,并执行输入的命令 |
docker-compose top | 显示容器中运行的进程 |
docker-compose rm | 删除已经停止的容器、网络、数据卷等资源 |
docker-compose pull | 拉取指定的镜像 |
docker-compose push | 推送本地镜像到 Docker 镜像仓库 |
docker-compose config | 验证并查看 Docker Compose 文件的语法 |
docker-compose version | 显示 Docker Compose 的版本号 |
docker-compose up -d | 在后台启动容器 |
docker-compose up --build | 强制重新构建镜像并启动容器 |
Docker Composer 网络和安全问题
Docker Compose YAML配置实战
version: '3'
services:
mysql:
image: mysql:5.7.35 #镜像名称以及版本
restart: always #重启docker后该容器也重启
container_name: mysql #容器名称
environment:
MYSQL_ROOT_PASSWORD: 123456 #指定用户密码
TZ: Asia/Shanghai
ports:
- 3306:3306 #本地端口号与容器内部端口号
volumes: #指定挂载目录
- /usr/etc/mysql/datadir:/var/lib/mysql
- /usr/etc/mysql/config/my.cnf:/etc/mysql/my.cnf
command:
--max_connections=1000
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--default-authentication-plugin=mysql_native_password
redis:
image: redis:4.0.7 #镜像名称以及版本
restart: always #重启docker后该容器也重启
container_name: redis #容器名称
ports:
- 6379:6379 #本地端口号与容器内部端口号
volumes: #指定挂载目录
- /usr/etc/redis/redis.conf:/usr/local/etc/redis/redis.conf #redis.conf文件和data目录分别映射了主机的redis.conf文件和主机的data目录
- /usr/etc/redis/data:/data
command:
/bin/bash -c "redis-server /usr/local/etc/redis/redis.conf " #使用command可以覆盖容器启动后默认执行的命令。这里启动执行指定的redis.conf文件
nginx:
image: nginx:1.21.3 #镜像名称以及版本
restart: always #重启docker后该容器也重启
container_name: nginx #容器名称
ports:
- 80:80 #本地端口号与容器内部端口号
- 443:443 #本地端口号与容器内部端口号
volumes: #指定挂载目录
- ./usr/etc/nginx/html:/usr/share/nginx/html
- ./usr/etc/nginx/log:/var/log/nginx
- ./usr/etc/nginx/conf:/etc/nginx/