0%

docker-compose的一次实践

0. 前言

Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用,它是由 python 编写。

Compose 定位是定义和运行多个 Docker 容器的应用。Compose 有两个重点

  • docker-compose.yml compose 配置文件
  • docker-compose 命令行工具

1. 安装

windows 和 mac 中 docker-compose 在安装 docker 的时候就已经捆绑安装了。linux 中需要自己安装

1
2
3
4
5
6
7
# 版本可以去 github 查看最新的版本
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-(uname -s)-(uname -m)" -o /usr/local/bin/docker-compose


sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version

2. 使用

1
2
docker-compose up # 启动
docker-compose down # 关闭

docker-compose.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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
version: '3' # 定义版本,不指定默认为版本 1,新版本功能更多


services:

mongo4:
image: mongo:4
privileged: true
restart: unless-stopped
volumes:
- $HOME/transcode/data/db/:/data/db/
- ./mongo/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
container_name: mongo4
environment:
MONGO_INITDB_ROOT_USERNAME: yx1
MONGO_INITDB_ROOT_PASSWORD: test
MONGO_INITDB_DATABASE: transcode_v1
network_mode: bridge # 加上不会创建默认的桥, 即有一个为空, 就会创建一个默认 network
ports: # 暴露端口信息
- "47047:27017"



transcode-service:
build: service # 指定 Dockerfile 所在文件夹的路径
privileged: true # 允许容器中运行一些特权命令
restart: unless-stopped
volumes:
- /var/lib/oceans/:/var/lib/oceans/
container_name: transcode-service
network_mode: host


transcode-webapi:
build: webapi
privileged: true
restart: unless-stopped
container_name: transcode-webapi
network_mode: host

然后在 webapi, service 文件夹内创建各自的 dockerfile 文件

./mongo/mongo-init.js

1
2
3
4
5
6
7
8
9
10
11
12
db.createUser(
{
user: "yx1",
pwd: "test",
roles:[
{
role: "readWrite",
db: "transcode_v1"
}
]
}
);
2.1 默认网桥问题

docker-compose 启动后会自动创建一个网桥, 如果不想创建, 即每个容器都写上值, 不能为空

1
network_mode: bridge

参考: https://stackoverflow.com/a/43755216

2.2 mongo 启动后自动创建用户

参考: https://stackoverflow.com/a/54064268

3. 参考资料

给作者打赏,鼓励TA抓紧创作!