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 打印卷名,每行一个。