Docker-Compose
在线浏览思维导图
-
是什么?
可以管理多个Docker容器,组成一个应用。需要定义配置一个YAML格式的配置文件
docker-compose.yml
-
概念
- 服务
service
一个容器对应提供对应的服务 - 项目
project
若干个对应的容器组成的一个完整的业务,在docker-compose.yml
文件中定义
- 服务
-
安装流程
-
以下安装流程已经过时
最新安装流程参考官方Docker Compose Install -
curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
-
放开读写权限
chmod +x /usr/local/bin/docker-compose
-
检查安装状态
docker-compose --version
-
卸载命令
rm /usr/local/bin/docker-compose
-
-
docker compose使用步骤
- 使用Dockerfile配置容器环境
- 编辑dokcer-compose.yml配置服务
- 运行
docker compose up
启动程序
-
模板文件(部分)
每一个服务都必须通过
image
指令或者build
指令来自动构建生成镜像-
version
版本信息
-
build
指定
Dockerfile
所在的文件夹路径version: '3' services: webapp: build: ./dir
同时
build
可以详细配置version: '3' service: webapp: build: context: ./dir #指定Dockerfile所在文件夹 dockerfile: Dockerfile-alternate #指定Dockerfile文件 args: buildno: 1 #构建镜像时的变量 cache_from: #指定镜像缓存 - alpine:latest
-
container_name
指定容器名称
默认的是
项目名称_服务名称_序号
container_name: docker-web-container
定容器名称后,该服务将无法进行扩展(scale),因为 Docker 不允许多个容器具有相同的名称。
-
devices
指定设备映射关系
devices: - "/dev/ttyUSB1:/dev/ttyUSB0"
-
depends_on
解决容器的依赖、启动先后的问题
version: '3' services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgres
-
env_file
从文件中获取环境变量,可以是单独的文件路径或者列表
当与
environment
指令发生冲突,则以environment
为准env_file: .env env_file: - ./commin.env - ./apps/web.env - /opt/secrets.env
#这是注释 PROG_ENV=development
-
environment
设置环境变量。可以使用字典或者数组两种格式
environment: USERNAME: xxcheng PASSWORD: 12345678 environment: - USERNAME: xxcheng - PASSWORD: 12345678
-
exposr
暴露端口,但是不映射到宿主机。
expose: - "3000" - "8080"
-
image
指定使用的镜像名称或者镜像ID
image: ubuntu image: a4bc65fd
-
labels
为容器添加元数据信息。
labels: com.startupteam.description: "webapp for a startup team" com.startupteam.department: "devops department" com.startupteam.release: "rc3 for v1.0"
-
logging
配置日志选项
logging: driver: syslog options: syslog-address: "tcp://192.168.0.1:123"
可选的日志驱动类型
-
driver: "json-file"
-
deiver: "syslog"
-
driver: "none"
-
-
network_mode
设置网络模式,与
docker run
中--network
的值一样network_mode: bridge network_mode: host network_mode: none
-
networks
配置容器连接的网络
version: "3" services: some-service: networks: - some-network - other-network networks: some-network: other-network:
-
ports
设置暴露端口信息
ports: - "3000" - "8080:8080" - "2222:22" - "127.0.0.1:80:80"
-
secrets
存储敏感数据
version: "3.1" services: mysql: image: mysql environment: MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password secrets: - db_root_password - my_other_secret secrets: my_secret: file: ./my_secret.txt my_other_secret: external: true
-
volumes
设置容器卷
volumes: - /var/lib/mysql - cache/:/tmp/cache - /root/abc:/abc:ro
-
-
命令
-
-f
--fiel FIELPATH
指定使用的Compose模板文件 -
-p
--project-name NAME
指定项目名称,默认为所在目录为项目名 -
config
验证compose文件格式是否正确
-
up
启动 -
down
停止 -
pause
暂停
-
-
实战
搭建CIG监控平台
CAdvisor监控收集+InfluxDB存储数据+Granfana展示图表
version: '3.1' volumes: grafana_data: {} services: influxdb: image: tutum/influxdb:0.9 restart: always environment: - PRE_CREATE_DB=cadvisor ports: - "8083:8083" - "8086:8086" volumes: - ./data/influxdb:/data cadvisor: image: google/cadvisor links: - influxdb:influxsrv command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086 restart: always ports: - "8080:8080" volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro grafana: user: "104" image: grafana/grafana user: "104" restart: always links: - influxdb:influxsrv ports: - "3000:3000" volumes: - grafana_data:/var/lib/grafana environment: - HTTP_USER=admin - HTTP_PASS=admin - INFLUXDB_HOST=influxsrv - INFLUXDB_PORT=8086 - INFLUXDB_NAME=cadvisor - INFLUXDB_USER=root - INFLUXDB_PASS=root
-
参考
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。