Docker-Compose Yaml编写以及基础命令

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,降低了运维成本,但是在使用过程中也会发现一些弊端,如 Docker 命令参数太多太复杂、多容器管理繁琐等。Docker-compose 便是在这场景下诞生的一个用于定义和运行多容器 Docker 的应用程序工具,它可以轻松、高效的管理容器,本文将描述 Docker-compose 2.2.2Yaml 配置和基础命令。

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 指定项目名称,默认使用当前所在目录为项目名
  1. 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 打印卷名,每行一个。