安装docker-compose
需要前置安装 docker
脚本安装
docker版本一般有推荐的最低建议docker-compose版本,自行搜索
下载地址: github.com/docker/comp...
以安装v2.40.3版本为例,如果想要安装其它版本,替换掉这个版本号就行
shell
sudo curl -L "https://github.com/docker/compose/releases/download/v2.40.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
下载安装
自己手动下载系统对应的版本,然后授予可执行权限
如果下载比较慢,可以搜下网上有很多提供的github release镜像加速网站
shell
# 在系统上执行如下命令,得到系统信息
echo $(uname -s) # Linux
echo $(uname -m) # x86_64
# 那么下载命令就行
curl -L "https://github.com/docker/compose/releases/download/v2.40.3/docker-compose-Linux-x86_64" -o ./docker-compose
# 然后授权可执行,并移动到对应目录
sudo chmod +x ./docker-compose
sudo mv ./docker-compose /usr/local/bin/
docker-compose常用命令
shell
# 启动所有服务(后台运行)
docker-compose up -d
# 停止并删除容器、网络
docker-compose down
# 停止但不删除容器
docker-compose stop
# 启动已停止的容器
docker-compose start
# 重启所有服务
docker-compose restart
docker-compose.yml
文件结构概览
yaml
version: '3.8' # Compose 文件版本
services: # 定义所有服务
service1: # 服务名称
image: ... # 指定镜像
container_name: ... # 容器名称
service2:
build: ... # 指定Dockerfile
networks: # 自定义网络
version
docker-compose v2.40.x 以上版本,已经不需要指定这个值了
指定本 yml 依从的 compose 哪个版本制定的
restart
重启策略
- no 不重启
- always 总是重启
- on-failure 非正常退出,重启
- unless-stopped
volumes
将主机的文件或目录挂载到容器里
yaml
service:
testapp:
volumes:
- ./mysql/data:/var/lib/mysql # [主机目录/文件]:[容器目录/文件]
- ./mysql/my.cnf:/etc/my.cnf
ports
主机端口映射到容器端口
yaml
service:
testapp:
ports:
- "9848:9848" # [主机目录/文件]:[容器目录/文件]
- "8848:8848"
build
- 作为Dockerfile路径信息配置
yaml
services:
testapp:
build: ./dir # 代表指定 ./dir/Dockerfile 文件
- 指定Dockerfile构建信息对象配置 指定构建镜像的Dockerfile信息
- context:上下文路径
- dockerfile:指定构建镜像的 Dockerfile 文件名。
- args:添加构建参数,这是只能在构建过程中访问的环境变量。
- labels:设置构建镜像的标签。
- target:多层构建,可以指定构建哪一层。
yaml
services:
testapp:
build:
context: ./dir # 指定上下文目录
dockerfile: Dockerfile_test # 指定具体Dockerfile文件
args:
buiildno: 1
labels:
- "mode1"
target: prod
command
覆盖容器默认命令
yaml
command: ["redis-server", "/usr/local/etc/redis.conf"]
depends_on
服务启动/停止依赖关系
yaml
services:
mysql:
image: mysql:5.7 # 从容器构建
redis:
image: redis:5.0
depends_on:
- mysql57
注意:redis 服务不会等待 mysql 完全启动 之后才启动,只是启动顺序是先启动redis,然后启动mysql
environment
添加环境变量
yaml
environment:
- MYSQL_ROOT_PASSWORD=mysql123
- TZ=Asia/Shanghai
env_file
从文件添加环境变量,可以是一个值,也可以是多个值
yaml
# 一个值
env_file: 1.env
# 多个值
env_file:
- 1.env
- 2.env
networks
配置容器连接的网络
yaml
services:
testapp:
images: nacos/nacos-server:v2.5.2
container_name: nacos
restart: always
networks:
dev_net: # 指定顶层的networks下的dev_net网络
aliases:
- testapp # 默认值container_name,同一网络上的其他容器可以使用服务名称或此别名来连接到对应容器的服务
networks: # 定义网络
dev_net: # 网络名称
# driver: bridge # 桥接模式,会创建一张桥接虚拟网卡,网卡名称会加上docker-compose的目录名作为前缀,防止冲突
external: true # 查找已经存在的网卡,而不是创建,不会用目录名作为前缀
- 示例
yaml
version: '3'
services:
mysql57:
image: mysql:5.7 # 从容器构建
container_name: mysql57
restart: always # no | always | on-failure | unless-stopped
environment: # 容器环境变量
- MYSQL_ROOT_PASSWORD=mysql123
- TZ=Asia/Shanghai
volumes: # 文件/文件夹映射 [主机文件/文件夹]:[容器文件/文件夹]
- ./mysql/data:/var/lib/mysql
- ./mysql/my.cnf:/etc/my.cnf
ports: # 端口映射 [主机端口]:[容器端口]
- 3306:3306
networks:
dev_net: # 关联到网络
aliases: # 网络别名,默认使用容器名,可以起一个别名,方便使用
- mysql57
redis:
image: redis:5.0
container_name: redis5
restart: always
volumes:
- ./redis/conf/redis.conf:/usr/local/etc/redis.conf
- ./redis/data:/data
ports:
- 6379:6379
# depends_on: # 依赖关系(控制启动顺序)
# - mysql57
networks:
dev_net:
aliases:
- redis
command: ["redis-server", "/usr/local/etc/redis.conf"] # 容器启动时执行的命令
networks: # 定义网络
dev_net: # 网络名称
driver: bridge # 桥接模式,会创建一张桥接虚拟网卡,网卡名称会加上docker-compose的目录名作为前缀,防止冲突
# external: true # 查找已经存在的网卡,而不是创建,不会用目录名作为前缀