docker-compose基本使用
目录
一、docker-compose介绍
(一)、简述
Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
(二)、步骤
使用 Dockerfile 定义应用程序的环境。
使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
最后,执行 docker-compose up 命令来启动并运行整个应用程序。
(三)、文件组成
- version
# 文件版本号,指定文件写法格式如:
version: "3"
- services
# 项目,多个容器服务的集合
# 每个service定义了镜像、网络配置、文件挂载、参数等如:
image: mysql
- networks
# 用于指定自定义网络,如:
networks:
app:
external: true
- volumes
# 数据卷
volumes:
data-volume:
二、docker-compose环境安装
(一)、安装
curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
(二)、授权
chmod +x /usr/local/bin/docker-compose
三、docker-compose基本命令使用
(一)、基本命令
build Build or rebuild services
config Validate and view the Compose file
create Create services
down Stop and remove containers, networks, images, and volumes
exec Execute a command in a running container
images List images
kill Kill containers
logs View output from containers
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
start Start services
stop Stop services
top Display the running processes
up Create and start containers
(二)、常用命令使用
- 基本使用
# 显示实时容器日志
docker-compose logs -f --tail 20
# 进入容器
docker-compose exec 容器服务名 sh
# 重启容器
docker-compose restart
# v3版本中, non-Swarm模式启动容器(比如:容器资源限制)
docker-compose --compatibility up -d
# 构建并启动容器
docker-compose up -d
- 管理使用
# 验证docker-compose.yml文件
docker-compose config
# 构建镜像
docker-compose build
# 删除服务(containers, networks, images, and volumes)
docker-compose down --rmi all
# 显示所有容器
docker-compose ps
# 停止容器
docker-compose stop
# 启动容器
docker-compose start
# 拉取镜像
docker-compose pull
# 推送镜像
docker-compose push
四、docker-compose.yml文件管理
(一)、示例
version: "3"
services:
eureka:
image: 镜像名:tag
build: .
env_file:
- .env
deploy:
resources:
limits:
cpus: '1.50'
memory: 3072M
volumes:
- /data/Log:/data/log
- /etc/localtime:/etc/localtime
environment:
SKYWALKING_AGENT_SERVICE_NAME: eureka
network_mode: "host"
ports:
- 1111:1111
(二)、services的书写规则
- image
# 镜像
services:
eureka: # 自定义服务名
image: 镜像名:tag # 镜像
# 格式如下
image: redis
image: mysql:5.7.26
image: 192.168.168.22/base/eureka:v1
- build
# 基于Dockerfile,指定Dockerfile所在路径
# 绝对路径
build: /path/build
# 相对路径
build: .
# 设置上下文和目录
build:
context: ../
dockerfile: path/Dockerfile
# 指定环境变量
build:
context: .
args:
- key1=value1
- key2=value2
- env_file
# 指定配置文件
env_file: .env
# 注意: 若与environment指令冲突,以后者为准
# 设置多个
env_file:
- .env
- test.env
- volumes
# 挂载一个目录或者已经存在的数据卷容器
volumes:
- /data/Log:/data/log # 使用绝对路径挂载数据卷
- /var/lib/mysql # 只是指定一个路径,Docker 会自动在创建一个数据卷
- ./log:/data/log # 使用相对路径挂载数据卷
- datavolume:/var/lib/mysql #已经存在的命名的数据卷
- environment
# 设置镜像变量
environment:
key1: value1
key2: value2
或者
environment:
- key1=value1
- key2=value2
- network_mode
# 网络模式
network_mode: "host"
network_mode: "bridge"
- ports
# 映射端口
ports:
- 1111:1111
- 8889:8888
#映射端口:容器端口
- depends_on
# 容器依赖
depends_on:
- eureka
- db
- deploy
# 指定与部署和运行服务相关的配置
# 子项 resources
deploy:
resources:
limits: # 资源不能超过限制
cpus: '1.50'
memory: 3072M
reservations: # 保留资源
cpus: '0.25'
memory: 100M
- 其他
dns
tmpfs
container_name
(三)、网络networks
- 自定义网络
version: "3"
networks:
frontend:
# Use a custom driver
driver: custom-driver-1
backend:
# Use a custom driver which takes special options
driver: custom-driver-2
driver_opts:
foo: "1"
bar: "2"
- 配置默认网络
version: "3"
networks:
default:
# Use a custom driver
driver: custom-driver-1
- 使用现有网络
version: "3"
networks:
default:
external:
name: my-pre-existing-network
(四)、数据卷volumes
- 创建数据卷
docker volume create datavolume
- 使用已有数据卷
version: "3"
services:
web:
volumes:
- datavolume:/data/test
volumes:
datavolume:
(五)、环境变量文件
- 简述
Compose支持在名为执行命令 .env的文件夹(当前工作目录)中放置的名为环境文件中声明默认环境变量。
compose期望env文件中的每一行都采用VAR=VAL格式。
以开头#的行将作为注释处理并被忽略。
- 示例
$ cat .env
TAG=v1.5
$ cat docker-compose.yml
version: '3'
services:
web:
image: "webapp:${TAG}"
# 定义相同的变量是,compose文件优先
$ cat ./Docker/api/api.env
NODE_ENV=test
$ cat docker-compose.yml
version: '3'
services:
api:
image: 'node:6-alpine'
env_file:
- ./Docker/api/api.env
environment:
- NODE_ENV=production