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秒)
    
  2. docker-compose create

    为服务创建容器,但是不启动。

    docker-compose up [options] [SERVICE...]
    示例:
    docker-compose create
    

    参数选项:

    --force-recreate 强制重新创建容器,不能与--no-recreate同时使用
    –-no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用
    –-no-build 不自动构建缺失的服务镜像
    -–build 在启动容器前构建服务镜像
    
  3. docker-compose ps

    查询服务的信息,命令格式如下

    docker-compose ps [options] [SERVICE...]
    示例:
    # 查询sdk服务
    docker-compose ps sdk
    
  4. docker-compose stop

    停止正在运行的容器,可以通过 docker-compose start 再次启动。

    docker-compose stop [options] [SERVICE...]
    示例:
    # 停止sdk服务
    docker-compose stop sdk
    

    参数选项:

    -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
    
  5. docker-compose start

    启动服务。

    docker-compose start [SERVICE...]
    示例:
    # 启动sdk服务
    docker-compose restart sdk
    
  6. docker-compose restart

    重启服务。

    docker-compose restart [options] [SERVICE...]
    示例:
    # 重启sdk服务
    docker-compose restart sdk
    

    参数选项:

    -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
    
  7. docker-compose rm

    删除服务的容器。

    docker-compose rm [options] [SERVICE...]
    示例:
    # 删除sdk服务的容器
    docker-compose rm sdk
    

    参数选项:

    -f, --force 删除容器不进行提示
    -s, --stop 先执行停止容器操作,再进行删除
    -v, --volumes 删除与容器关联的卷
    
  8. 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分钟之前)
    
  9. docker-compose kill

    发送 SIGKILL 信号强制停止服务容器。

    docker-compose kill [options] [SERVICE...]
    示例:
    # 停止sdk服务
    docker-compose kill sdk
    

    参数选项:

    -s, --signal string 指定发送的信号,如SIGNAL
    
  10. 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 打印卷名,每行一个。