这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天
本篇笔记主要记录一下Docker-Compose的学习知识
1.Docker-compose是什么?
docker-compose项目是docker官方的开源项目,负责实现对docker容器集群的快速编排
docker-compose将所管理的容器分为三层, 分别是工程(project) ,服务(service) 以及容器(containner)
docker-compose的工程配置文件默认为docker-compose.yml
使用Docker-compose的理由:
使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独应用容器,但是在实际需求中,我们除了需要启动项目容器,也需要启动相关的环境容器,例如Redis、MySQL等等其他需要的容器,此时如果用Dockerfile模板文件我们需要执行多次 docker build指令,相对繁琐。而使用docker-compose我们可以按照指定顺序依次构建容器,更加的方便快捷
2.Docker-compose常用配置字段
build:指定Dockerfile文件名
dockerfile:构建镜像上下文路径
images:指定镜像
command:执行命令,会覆盖容器启动后默认执行的命令-CMD命令
container_name:指定容器名字
environment:添加环境变量
networks:加入网络
ports:暴露容器端口
volumes:挂载一个宿主机目录或者命令卷到容器
links:连接另一个容器
privileged:给容器root权限
depends_on:解决容器依赖,决定启动先后
restart:重启策略,定义是否重启容器
3.demo
version: '3'
# 编写相关服务容器指令
services:
# mysql容器
mysql:
image: 'mysql:latest' # 最好指定版本,避免兼容问题
container_name: tiktok-mysql
ports:
- 3306:3306
volumes:
- $PWD/docker-compose/data/mysql/data:/var/lib/mysql # 挂载
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes # 允许mysql密码为空
networks:
- center_net # 指定网络,方便通信
# etcd容器
etcd-server:
image: 'bitnami/etcd:latest' # 最好指定版本,避免兼容问题
environment:
- ALLOW_NONE_AUTHENTICATION=yes
ports:
- 2379:2379
networks:
- center_net # 指定网络,方便通信
# redis容器
redis:
image: 'bitnami/redis:latest' # 最好指定版本,避免兼容问题
container_name: tiktok-redis
command: ["redis-server","/etc/redis/redis.conf"] # 根据配置文件启动redis
ports:
- "6379:6379"
volumes:
- $PWD/docker-compose/data/redis/data:/data # 挂载
- $PWD/redis.conf:/etc/redis/redis.conf # 挂载配置文件
restart: always
networks:
- center_net # 指定网络,方便通信
# DIY服务
demo:
build: ./
image: demo:1.0 # 自己的服务构建的镜像
container_name: demo
restart: always
ports:
- 8080:8080
# 将会先启动依赖容器之后再启动该容器
depends_on:
- mysql
- redis
- etcd-server
networks:
- conter_net # 指定网络,方便通信
# docker网络
networks:
center_net:
external: true
因为容器之间是进程隔离的,因此如果需要通信的话,最好配置一个网络组供它们使用,之前在使用的时候没有配置网络会出现有时候连通不了的情况
人生苦短,不如go浪一下。