Docker-Compose Yaml编写以及基础命令
Docker
是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,降低了运维成本,但是在使用过程中也会发现一些弊端,如 Docker
命令参数太多太复杂、多容器管理繁琐等。Docker-compose
便是在这场景下诞生的一个用于定义和运行多容器 Docker 的应用程序工具,它可以轻松、高效的管理容器,本文将描述 Docker-compose 2.2.2
的 Yaml
配置和基础命令。
Docker-compose
运行原理:
通过解析解析 yaml
配置文件,解析容器信息,根据这些信息创建容器,并将 Docker-compose
的相关信息写入容器的 Labels
,通过 docker inspect
命令可以查看到 Labels
信息。
Docker-compose 是对 Docker 容器操作过程的封装,本身并不提供容器相关的功能
......
"Labels": {
"com.docker.compose.config-hash": "f95c990d0b17132fa84be888db2bd894d03fc0b0faccc2cd17cc2737af777f24",
"com.docker.compose.container-number": "1",
"com.docker.compose.depends_on": "",
"com.docker.compose.image": "sha256:dcf1bc695eac7bf2e9792bd3a06e2041a36aabbbe7b5314eb60f13e9a09afafa",
"com.docker.compose.oneoff": "False",
"com.docker.compose.project": "app",
"com.docker.compose.project.config_files": "/root/app/docker-compose.yml",
"com.docker.compose.project.working_dir": "/root/app",
"com.docker.compose.service": "sdk",
"com.docker.compose.version": "2.2.2"
}
......
一、docker-compose.yaml
配置内容示例:
version: '3'
services:
# 服务名称,可以任意取值
rkproblem:
image: rkproblem:1.0.0
container_name: rkproblem
restart: always
network_mode: host
volumes:
- ./config/:/home/config/
- ./log/:/home/log/
ports:
- "8080:8080"
二、service 配置
image
指定服务的镜像名称或镜像ID,如果镜像不存在将尝试远程拉取。
image: rkproblem:1.0.0
build
指定 Dockerfile
所在文件夹的路径,可以是相对路径或者绝对路径,基于 Dockerfile
在使用 up 启动时执行构建任务。
container_name
容器名称。
commond
覆盖容器启动后默认执行的命令。
command: ./startup.sh
ports
映射端口列表,可以添加多个端口的映射关系。
ports:
- "3000:3000"
- "8000:8000"
extra_hosts
主机名映射列表,会在 /etc/hosts
文件中添加一些记录。
extra_hosts:
- "rkproblem:127.0.0.1"
- "oauth:172.16.32.12"
volumes
挂载一个目录或者一个已存在的数据卷容器,可以使用 [HOST:CONTAINER]
或者[HOST:CONTAINER:ro]
格式,后者对于容器来说数据卷是只读的,可以有效保护宿主机的文件系统。
volumes:
- ./config/:/home/config/
- ./certs/:/home/certs/:ro
network_mode
网络模式
network_mode: "bridge"
network_mode: "none"
network_mode: "host"
dns
定义 DNS 服务器,可以是一个值也可以是一个列表。
dns:8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
三、常用命令
Docker-compose
命令格式如下:
docker-compose [OPTIONS] [COMMAND] [ARGS...]
OPTIONS
参数如下:
-f --file FILE指定Compose模板文件,默认为docker-compose.yml
-p --project-name NAME 指定项目名称,默认使用当前所在目录为项目名
-
docker-compose up
为服务创建容器并启动,命令格式如下:
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...] 示例: docker-compose up -d
参数选项:
-d 在后台运行服务容器 --no-color 不用颜色来区分不同服务的控制输出 --force-recreate 强制重新创建容器,不能与--no-recreate同时使用 –-no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用 –-no-build 不自动构建缺失的服务镜像 -–build 在启动容器前构建服务镜像 -t, –-timeout TIMEOUT 停止容器时候的超时(默认为10秒)
-
docker-compose create
为服务创建容器,但是不启动。
docker-compose up [options] [SERVICE...] 示例: docker-compose create
参数选项:
--force-recreate 强制重新创建容器,不能与--no-recreate同时使用 –-no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用 –-no-build 不自动构建缺失的服务镜像 -–build 在启动容器前构建服务镜像
-
docker-compose ps
查询服务的信息,命令格式如下
docker-compose ps [options] [SERVICE...] 示例: # 查询sdk服务 docker-compose ps sdk
-
docker-compose stop
停止正在运行的容器,可以通过
docker-compose start
再次启动。docker-compose stop [options] [SERVICE...] 示例: # 停止sdk服务 docker-compose stop sdk
参数选项:
-t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
-
docker-compose start
启动服务。
docker-compose start [SERVICE...] 示例: # 启动sdk服务 docker-compose restart sdk
-
docker-compose restart
重启服务。
docker-compose restart [options] [SERVICE...] 示例: # 重启sdk服务 docker-compose restart sdk
参数选项:
-t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
-
docker-compose rm
删除服务的容器。
docker-compose rm [options] [SERVICE...] 示例: # 删除sdk服务的容器 docker-compose rm sdk
参数选项:
-f, --force 删除容器不进行提示 -s, --stop 先执行停止容器操作,再进行删除 -v, --volumes 删除与容器关联的卷
-
docker-compose logs
查看服务容器的信息输出。
docker-compose logs [options] [SERVICE...] 示例: # 打印sdk服务输出 docker-compose logs -f --tail 20 sdk
参数选项:
-f, --follow 跟踪服务输出 --no-color 不使用颜色区分不同服务的信息输出 --no-log-prefix 不显示服务名称的前缀 --since string 显示指定时间之后的日志(如 2013-01-02T13:23:37Z) 或者相对时间之后的日志(如 42m 表示42分钟之内) -t, --timestamps 显示输出的时间戳 -until string 显示指定时间之前的日志(如 2013-01-02T13:23:37Z) 或者相对时间之前的日志(如 42m 表示42分钟之前)
-
docker-compose kill
发送
SIGKILL
信号强制停止服务容器。docker-compose kill [options] [SERVICE...] 示例: # 停止sdk服务 docker-compose kill sdk
参数选项:
-s, --signal string 指定发送的信号,如SIGNAL
-
docker-compose config
解析和验证
docker-compose
配置。docker-compose config [options] [SERVICE...] 示例: docker-compose config
参数选项:
--format string 以指定格式输出配置信息 [yaml | json] 默认 yaml --hash string 打印指定服务的hash --images 打印镜像名称,每行一个。 -q, --quiet 只验证配置,不打印输出 --services 打印服务名称,每行一个。 --volumes 打印卷名,每行一个。