文章目录
- [Docker Compose](#Docker Compose)
-
- [Docker Compose 文件结构](#Docker Compose 文件结构)
- [Docker Compose的使用](#Docker Compose的使用)
- [Docker Compose部署安装指南](#Docker Compose部署安装指南)
Docker Compose
Docker Compose 是 Docker 官方提供的一个工具,旨在简化多容器 Docker 应用程序的创建、配置和运行过程。通过 YAML 格式的配置文件(默认为 docker-compose.yml
),用户可以轻松定义多个容器、它们之间的依赖关系、网络配置、环境变量等,并使用 docker-compose
命令来管理这些容器。
Docker Compose 文件结构
Docker Compose 文件通常包含以下关键部分:
-
version: 指定使用的 Compose 文件格式版本。
-
services: 定义一组服务,每个服务都对应一个或多个容器。
- 服务名称: 自定义的服务标识。
- image: 指定容器使用的镜像。
- container_name: 可选,为容器指定一个名称。
- environment: 定义环境变量。
- ports: 端口映射,将主机的端口映射到容器的端口。
- networks: 指定容器使用的网络。
- volumes: 定义卷,用于数据持久化或共享数据。
- depends_on: 定义服务之间的依赖关系。
- 其他配置: 如构建参数、日志配置等。
-
networks: 定义自定义网络,允许容器之间进行通信。
-
volumes: 定义数据卷,用于存储数据或共享数据。
Docker Compose的使用
- 安装 Docker Compose: 可以通过官方文档提供的步骤来安装 Docker Compose。
- 编写
docker-compose.yml
文件: 根据应用程序的需求,编写 YAML 格式的配置文件。 - 启动服务 : 使用
docker-compose up
命令启动所有服务。该命令会创建网络、卷、服务容器,并根据依赖关系按顺序启动它们。 - 停止服务 : 使用
docker-compose down
命令停止并移除所有容器、网络和卷(除非在配置文件中指定了volumes
的外部存储)。 - 其他常用命令 :
docker-compose start
: 启动已停止的服务。docker-compose stop
: 停止正在运行的服务。docker-compose restart
: 重启服务。docker-compose logs
: 查看服务日志。docker-compose ps
: 列出当前正在运行的服务容器。
Docker Compose 的优势
- 简化配置: 通过 YAML 文件集中管理所有容器的配置,减少了配置的复杂性。
- 依赖管理: 轻松定义服务之间的依赖关系,确保服务按顺序启动。
- 可移植性: Compose 文件可以在任何支持 Docker 的平台上使用,提高了应用程序的可移植性。
- 扩展性: 支持通过扩展配置来管理更多的服务或容器。
注意
- 版本兼容性: 确保 Docker 和 Docker Compose 的版本兼容。
- 配置安全性: 不要在 Compose 文件中存储敏感信息,如密码,可以使用环境变量或外部配置文件来管理这些信息。
- 资源限制: 根据实际需求为容器配置合理的资源限制,如 CPU、内存和磁盘空间。
Docker Compose部署安装指南
Docker Compose 环境安装
-
下载 Docker Compose :
从 GitHub Docker Compose Releases 页面下载对应版本的 Docker Compose 二进制文件。bashcurl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
安装 Docker Compose :
给予执行权限并查看版本。bashchmod +x /usr/local/bin/docker-compose docker-compose --version
YAML 文件格式及编写注意事项
-
YAML 基础:
- 大小写敏感。
- 使用空格缩进表示层级关系,不支持制表符(Tab)。
- 缩进空格数目相同层级对齐,通常开头缩进2个空格。
- 使用
#
号注释。 - 符号字符后缩进1个空格,如冒号
:
、逗号,
、横杠-
。 - 单引号
''
引起来作为普通字符串处理,双引号""
内的特殊字符作为本身含义。
-
数据结构:
-
对象映射(键值对):
animal: pets
-
序列数组(列表):
yamlpets: - Cat - Dog - Goldfish
或
yamlpets: ["Cat", "Dog", "Goldfish"]
-
布尔值:
debug: true
或debug: false
-
-
示例:
yamllanguages: - Java - Golang - Python websites: cpu: name: - inter - amd core: 2 memory: 1024M swap: 2048M disk: 60G
Docker Compose 配置常用字段
build
:指定 Dockerfile 路径或构建上下文。dockerfile
:在build
下指定 Dockerfile 名称。context
:构建镜像的上下文路径或 Git 仓库 URL。image
:指定镜像名称。command
:覆盖容器启动后的默认命令。container_name
:指定容器名称(唯一性限制)。environment
:添加环境变量。networks
:加入网络。network_mode
:设置容器的网络模式。ports
:暴露容器端口。volumes
:挂载宿主机目录或命名卷。volumes_from
:从另一个服务或容器挂载卷(版本 '2' 支持)。hostname
:容器主机名。sysctls
:在容器内设置内核参数。links
:连接到另一个容器(不推荐使用)。privileged
:给予容器 root 权限(不安全)。restart
:设置重启策略。depends_on
:解决服务依赖和启动顺序问题。
Docker Compose 常用命令
build
:重新构建服务。ps
:列出容器。up
:创建和启动容器。exec
:在容器内执行命令。scale
:指定服务容器启动数量。top
:显示容器进程。logs
:查看容器输出。down
:停止并删除容器、网络、数据卷。stop/start/restart
:停止/启动/重启服务。
Docker Compose 文件结构与实践
准备依赖文件
bash
mkdir -p /opt/compose_nginx/nginx /opt/compose_nginx/wwwroot
cd /opt/compose_nginx/nginx
cp nginx-1.12.0.tar.gz ./
编写脚本
-
run.sh
:启动 Nginx 服务。bash#!/bin/bash /usr/local/nginx/sbin/nginx
-
Dockerfile
:构建 Nginx 镜像。DockerfileFROM centos:7 MAINTAINER this is nginx image <wl> RUN yum -y update && yum -y install pcre-devel zlib-devel gcc gcc-c++ make && useradd -M -s /sbin/nologin nginx ADD nginx-1.12.0.tar.gz /usr/local/src/ WORKDIR /usr/local/src/nginx-1.12.0 RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install ENV PATH /usr/local/nginx/sbin:$PATH EXPOSE 80 443 RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf ADD run.sh /run.sh RUN chmod 755 /run.sh CMD ["/run.sh"]
准备站点网页
bash
echo "<h1>this is test web</h1>" > /opt/compose_nginx/wwwroot/index.html
编写 docker-compose.yml
yaml
version: '3'
services:
nginx:
container_name: web1
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- "1216:80"
- "1217:443"
networks:
lnmp:
ipv4_address: 172.18.0.10
volumes:
- ./wwwroot:/usr/local/nginx/html
networks:
lnmp:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16
部署与验证
bash
cd /opt/compose_nginx/
docker-compose -f docker-compose.yml up -d
-f, --file FILE :使用特定的 compose 模板文件,默认为 docker-compose.yml
-p, --project-name NAME :指定项目名称,默认使用目录名称
-d :在后台运行
docker ps -a
#输出示例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b48dceee248f compose_nginx_nginx "/run.sh" About a minute ago Up About a minute 0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp compose_nginx_nginx_1
cd /opt/compose_nginx/
docker-compose ps #必须在docker-compose.yml所在目录执行此命令
- 访问网站 :
在浏览器中访问http://192.168.80.15:1216