约 900 字 预计阅读 2 分钟
Docker-Compose
可以批量管理多个容器。
编写 docker-compose 文件
- 以Redis为例,执行 vi docker-compose-redis.yml。
1
2
3
4
5
6
7
8
9
10
|
version: '3'
services:
# redis
redis:
image: redis
volumes:
- /var/volumes/redis_data:/data
restart: always
ports:
- "6379:6379"
|
启动容器
1
2
|
docker-compose -f docker-compose-redis.yml up -d
docker-compose -f docker-compose-redis.yml up -d --build // 每次重新打包新的镜像
|
- -f 指定compose 文件,默认查找docker-compose.yml.
- -d 后台启动。
配置文件常用参数
- command 覆盖容器启动后默认执行的命令。
- links 连接其他容器
1
2
3
4
|
web:
links:
- db
- redis
|
1
2
3
|
ports:
- "8081"
- "8080:8080"
|
1
2
3
|
expose:
- "8000"
- "9000"
|
- volumes 卷挂在路径,格式:宿主主机路径:容器路径
1
2
|
volumes:
- /opt/data:/var/lib/mysql
|
1
2
3
|
environment:
RACK_ENV dev
SHOW: false
|
1
2
3
4
|
net: "bridge"
net: "host"
net: "none"
net: "container:[service name or container name/id]"
|
1
2
3
4
|
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
|
docker-compose 常用操作命令
1
|
docker-compose -f docker-compose.yml ps
|
1
|
docker-compose -f docker-compose.yml stop/start/restart <服务名称> // 不加服务名则会操作所有容器
|
1
2
3
|
docker-compose -f docker-compose.yml logs -f // 查看所有容器日志
docker-compose -f docker-compose.yml logs -f <服务名> // 查看指定容器日志
docker-compose -f docker-compose.yml logs -f >> app.log & // 把日志输出到文件
|
1
|
docker-compose -f docker-compose.yml up --build -d
|
- 重新构建 cokder-compose.yml 有变化的容器并启动
1
|
docker-compose -f docker-compose.yml up --fore-recreate -d
|
1
|
docker-compose -f docker-compose.yml down
|
prometheus + grafana 搭建监控
安装 redis-exporter
1
2
3
4
5
6
|
docker run -d \
--name redis_exporter \
-p 9121:9121 \
-v /etc/localtime:/etc/localtime:ro \
oliver006/redis_exporter \
--redis.addr redis://192.168.202.101:6379 \ # redis 地址
|
安装 prometheus
1
2
3
4
|
cd /opt
mkdir prometheus
cd /opt/prometheus
vi prometheus.yml
|
prometheus.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
global:
scrape_interval: 5s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- job_name: redis
static_configs:
- targets: ['192.168.202.101:9121'] # redis_exporter 地址
labels:
instance: redis
|
docker 启动 prometheus
1
2
3
4
5
6
|
docker run -d \
-p 9090:9090 \
--name=prometheus \
-v /etc/localtime:/etc/localtime:ro \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
|
安装grafana
1
2
3
|
cd /opt
mkdir grafana-storage
chmod 777 grafana-storage
|
1
2
3
4
5
6
7
|
# grafana
docker run -d \
-p 3000:3000 \
--name=grafana \
-v /opt/grafana-storage:/var/lib/grafana \
-v /etc/localtime:/etc/localtime:ro \
grafana/grafana
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
docker run -d --name node_exporter \
-p 9100:9100 \
--restart=always \
--net="host" \
--pid="host" \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
prom/node-exporter \
--path.procfs=/host/proc \
--path.rootfs=/rootfs \
--path.sysfs=/host/sys \
--collector.filesystem.ignored-mount-points='^/(sys|proc|dev|host|etc)($$|/)'
|