Docker Compose

一、Docker Compose

Compose项目时Docker官方为开源项目,负责实现对Docker容器集群的快速编排。

1、Compose两个概念

  • 服务(service),一个应用容器,实际上可以包括若干运行相同镜像容器示例。

  • 项目(project),由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml文件中定义。

2、Docker compose安装

下载地址:https://github.com/docker/compose/releases

下载到指定位置
[root@node3~]#curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-uname -s-uname -m-o /usr/local/bin/docker-compose

赋予执行权限
[root@node3~]#chmod +x /usr/local/bin/docker-compose

查看是否安装成功

[root@node3~]#docker-compose --version

docker-compose version 1.17.0, build ac53b73

3、docker-compose命令

使用格式

docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]

选项

选项 描述
-f,–file FILE 指定使用的Compose模板文件,默认为docker-compose.yml
-p,–project-name NAME 指定项目名称,默认将使用所在目录名作为项目名
-x-networking 使用Docker的可拔插网络后端特性
-x-network-driver DRIVER 指定网络后端驱动,默认为bridge
–verbose 输出更多调试信息
-v,–version 打印版本并退出

命令使用

build

构建项目中的服务容器

选项 描述
–force-rm 删除构建过程中的临时容器
–no-cache 构建镜像过程中不使用cache
–pull 始终尝试通过pull俩获取更新版本的镜像

config

验证Compose文件格式是否正确

down

停止UP命令所启动的容器,并移除网络

exec

进入指定容器

images

列出Compose文件中包含的镜像

kill

通过发送SIGKILL信号来强制停止服务容器

run

指定服务上执行一个命令

默认情况下,如果存在关联,则所有关联的服务将自动被启动,除非这些服务已经在运行中。

选项 描述
-d 后台运行
–name 容器指定一个名称
–entrypoint 覆盖默认的容器启动指令
-e 设置环境变量
-u,–user 指定运行容器的用户名或UID
–rm 运行命令后自动删除容器
-P,–pulish 映射容器端口到本地主机
–service-ports 配置服务器端口并映射到本地主机
-T 不分配伪终端

scale

设置指定服务运行的容器个数

二、Compose模板文件

1、build

指定Dockerfile所在文件的路径

content 上下文

Dockerfile的目录路径,或者git仓库的URL

dockerfile

备用的dockerfile

ARGS

添加构建参数,这些参数是仅在构建过程中可访问的环境变量。

使用语法

build: /path/to/build/dir

2、cap_add,cap_drop

指定容器的内核能力分配

3、command

覆盖容器启动后默认执行命令

4、configs

使用每个服务configs配置授予对每个服务的配置访问权限。

source:Docker中存在的配置名称
target:将被安装在服务的任何容器中的文件路径和名称。
uid和gid:指定uid和gid
mode:设置权限

5、cgroup_parent

指定父cgroup组,意味着继承该组的资源限制

6、container_name

指定容器名称。默认将会使用项目名称_服务名称_序号

指定名称后,该服务将无法进行扩展;因为Docker不允许多个容器具有相同的名称。

7、devices

指定设备映射关系

8、depends_on

解决容器的依赖、启动先后问题。

9、dns

自定义DNS服务器

配置DNS搜索域。

11、tmpfs

挂载一个tmpfs文件系统到容器

12、env_file

从文件中获取环境变量,可以为单独的文件路径或列表。

13、environment

设置环境变量

14、expose

暴露端口,但不映射到宿主机,只被连接的服务访问

15、image

指定为镜像名称或镜像ID

16、labels

为容器添加docker元数据信息。

17、network_mode

设置网络模式

18、networks

配置容器连接的网络

19、sysctls

配置容器的内核参数

20、volumes

数据卷所挂载路径位置

三、示例

version: '3'
services:
    nginx:
        image: "lnmp-nginx:latest"
        build:
            context: .
            dockerfile: Dockerfile.nginx
        ports:
            - "80:80"
        networks:
            - frontend
        depends_on:
            - php
    php:
        image: "lnmp-php:latest"
        build:
            context: .
            dockerfile: Dockerfile.php
        networks:
            - frontend
            - backend
        environment:
            MYSQL_PASSWORD: Passw0rd
        depends_on:
            - mysql
    mysql:
        image: mysql:latest
        volumes:
            - mysql-data:/var/lib/mysql
        environment:
            TZ: 'Asia/Shanghai'
            MYSQL_ROOT_PASSWORD: Passw0rd
        command: ['mysqld', '--character-set-server=utf8']
        networks:
            - backend
volumes:
    mysql-data:

networks:
    frontend:
    backend:

  转载请注明: Joah Docker Compose

 上一篇
Harbor Harbor
一、harborHarbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必须的功能性,扩展了开源Docker Distribution。Harbor支持安装在多个Registry节点的镜像资源复制,
2017-12-14
下一篇 
Dockerfile指令 Dockerfile指令
一、DockerfileDockerfile是一种被Docker程序解释的脚本,Dockerfile由一条条的指令组成,每条指令对应linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的linux命令。 1、FR
2017-12-13