大致原理介绍

Docker Compose 的优点:

  1. 声明式 yaml 语法,更加可读和可维护.
  2. 快速启动和停止
  3. 容器间的依赖管理,Docker Compose 允许定义多个容器之间的依赖关系和顺序,简化了复杂应用的部署.

执行逻辑

  1. 定义应用配置: 首先需要创建一个 YAML 文件(通常命名为 docker-compose.yml), 用于定义应用的组件、服务、网络和卷等.
  2. 构建镜像: 默认会先读取本地镜像,没有则向云端拉取.
  3. 启动容器: 使用 docker-compose up -d 命令来启动应用的容器。这个命令会自动读取当前目录的 docker-compose.yml 文件。此时会按规则执行 yml 文件所定义的内容.
  4. 扩展和更新: 如果需要更新,可以编辑 docker-compose.yml 文件,然后并使用 docker-compose down 停止容器,然后再重新执行启动命令启动容器.

如何编写

首先给出一个简单的 nginx 的 docker-compose.yml 文件示例,其中的解释已在文件中

yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: '3'
services:
nginx:
image: nginx:latest # 镜像名字和版本
container_name: ${CONTAINER_NAME}
# $开头代表是环境变量, 会默认读取当前目录或者用户目录的.env文件.
# 当然, 也可以直接写 nginx名字
ports:
- 80:80 # 端口映射, 前面是主机端口, 后面是容器端口
- 443:443
volumes:
# 文件卷映射, 冒号前面为主机文件夹, 后面为容器文件夹
# 要先创建本地文件/目录, 不然会报错
- ./conf/conf.d:/etc/nginx/conf.d
- ./conf/nginx.conf:/etc/nginx/nginx.conf
- ./conf/ssl:/etc/nginx/ssl
- ./log:/var/log/nginx
- ./html:/usr/share/nginx/html
labels:
createdBy: "Apps" # 自定义标签
restart: always # 重启规则

networks:
diy-network: # 可以自定义docker网络, 也可以不写, 用默认的
external: true

常见项目的主要的解释如上,更多内容就自行探索咯

一些注意事项

1. 开放端口时,本地端口注意不要冲突

2. 关于网络组,同一个网络组里面的容器才可以直接互相通信,否则必须要走网桥

3. 挂载文件卷时,要记得先创建本地目录文件.
挂载的逻辑为:创建容器时,自动从主机复制文件 / 目录到容器里。在这之前容器目录的所有内容会被清空.
也就是说,容器目录里有而主机没有的内容会消失,容器和主机都有的内容,会被主机的内容覆盖.
之后容器运行的时候产生的修改会同步到主机里,实现持久化保存.


参考文章

https://segmentfault.com/q/1010000016515320