简介

Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用, 通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

docker-compose 常用命令

1
2
3
4
5
6
7
8
9
10
11
12
#控制台实时打印查看容器日志
# docker-compose -f /path/docker-compose.yml logs -f
docker-compose -f /home/data/docker/services/aden-assistant/aden-assistant-endpoint/docker-compose.yml logs -f

# 只实时打印,只显示最后 200 行
# docker-compose -f /path/docker-compose.yml logs -f --tail=200
docker-compose -f /home/data/docker/services/aden-assistant/aden-assistant-endpoint/docker-compose.yml logs -f --tail=200


# 上面是通过 -f 参数指定了对应的 docker-compose.yml 文件,也可以直接进入到对应的 docker-compose.yml 路径后,再执行如下
cd /home/data/docker/services/aden-assistant/aden-assistant-endpoint
docker-compose logs -f 或 docker-compose logs -f --tail=200

docker 常用命令

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
# 查看容器当前的使用情况 中间的 2bb19976d87f 是容器 ID
# docker stats --no-stream <container_id> 一次性获取
docker stats --no-stream 2bb19976d87f
# 实时刷新,会一直更新刷新滚动屏幕
docker stats 2bb19976d87f
# 输出参数详解
# `CONTAINER ID`: 容器的唯一标识符。
# `NAME`: 容器的名称。
# `CPU %`: 容器使用的 CPU 百分比。
# `MEM USAGE / LIMIT`: 容器当前使用的内存量以及内存限制。
# `MEM %`: 容器使用的内存百分比。
# `NET I/O`: 容器的网络输入/输出量。
# `BLOCK I/O`: 容器的块输入/输出量。
# `PIDS`: 容器中运行的进程数量。

#查看容器的启动参数
# docker exec <container_name> ps -ef
docker exec 2bb19976d87f ps -ef
# 进入容器内部
docker exec -it <container_name_or_id> /bin/bash
# 通过 jps 查看 jar 对应的 PID
jps
# 查看某个 PID 的内存情况(据说要配置启动参数 -XX:NativeMemoryTracking=summary)
jcmd <pid> VM.native_memory summary
# 查看更加详细的信息(据说要配置启动参数 -XX:NativeMemoryTracking=summary)
jcmd <pid> VM.native_memory detail

常用docker -compose镜像

注意查看区分如果采用相对路径挂载的需要在同级创建对应服务的目录

Application

用于监控

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
#docker-compose版本
version: "3"
#服务
services:
#kuma 监控
uptime-kuma:
#镜像地址
image: louislam/uptime-kuma:latest
#容器名称
container_name: uptime-kuma
#自动重启
restart: always
#给容器开启 root 权限,不安全的
#privileged: true
#设置网络模式:host:容器环境不隔离,将使用主机的端口和ip,不能与ports 端口映射同时使用
network_mode: host
#ports:
# - 3001:3001
# 挂载两个 docker 文件可以用来在容器内执行 docker ps,如果报错的话 宿主机 chmod 777 docker.sock,本机目录:容器目录
volumes:
- ./uptime-kuma:/app/data
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- ./wx.sh:/tmp/cache/wx.sh
- ./curl:/usr/local/bin/curl
command: ls

容器管理

1
2
3
4
5
6
7
8
9
10
11
12
13
#docker-compose版本
version: "3"
#服务
services:
# 容器管理
portainer:
image: portainer/portainer-ce
container_name: portainer
restart: always
network_mode: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./portainer:/data

CI工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#docker-compose版本
version: "3"
#服务
services:
jenkins:
user: root # 为了避免一些权限问题 在这我使用了root
restart: always # 重启方式
image: jenkins/jenkins:lts # 指定服务所使用的镜像 在这里我选择了 LTS (长期支持)
container_name: jenkins # 容器名称
ports: # 对外暴露的端口定义
- 8082:8080 # 访问Jenkins服务端口
- 50000:50000
volumes: # 卷挂载路径
- /var/vol_dockers/jenkins_home/:/var/jenkins_home # 这是我们一开始创建的目录挂载到容器内的jenkins_home目录
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker # 这是为了我们可以在容器内使用docker命令
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose

代理转发流量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#docker-compose版本
version: "3"
#服务
services:
nginx:
image: nginx
container_name: nginx
network_mode: host
#ports:
# - 80:80
# - 443:443
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/logs:/var/log/nginx
- ./nginx/html:/usr/share/nginx/html
restart: always

DB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#docker-compose版本
version: "3"
#服务
services:
# PostgreSQL 数据库
postgresql:
image: postgres
container_name: postgresql
restart: always
environment:
POSTGRES_DB: automation
POSTGRES_USER: root
POSTGRES_PASSWORD: B2dwybj8a0
network_mode: host
volumes:
- ./postgres/data:/var/lib/postgresql/data
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#docker-compose版本
version: "3"
#服务
services:
# MySQL数据库
mysql:
image: mysql
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: B2dwybj8a0
TZ: Asia/Shanghai
network_mode: host
volumes:
- ./mysql/data:/var/lib/mysql
- ./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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#docker-compose版本
version: "3"
#服务
services:
# MongoDB 数据库
mongodb:
image: mongo
container_name: mongodb
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: HRdwXbj8V0
network_mode: host
volumes:
- ./mongodb/data:/data/db
command: mongod --auth