精华内容
下载资源
问答
  • docker-compose教程(安装,使用, 快速入门)

    万次阅读 多人点赞 2017-12-03 22:31:45
    教程基于ubuntu下最新的...Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。 Compose 通过一个配...

    教程基于ubuntu下最新的compose版本3 
    参考: https://docs.docker.com/compose/overview/

    1.Compose介绍

    Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。 
    Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

    2.Compose和Docker兼容性

    compose文件格式版本docker版本
    3.417.09.0+
    3.317.06.0+
    3.217.04.0+
    3.11.13.1+
    3.01.13.0+
    2.317.06.0+
    2.21.13.0+
    2.11.12.0+
    2.01.10.0+
    1.01.9.1.+

    Docker版本变化说明

    Docker从1.13.x版本开始,版本分为企业版EE和社区版CE,版本号也改为按照时间线来发布,比如17.03就是2017年3月。

    Docker的linux发行版的软件仓库从以前的https://apt.dockerproject.org和https://yum.dockerproject.org变更为目前的https://download.docker.com, 软件包名字改为docker-ce和docker-ee。

    3.安装docker

    Docker的社区版(Docker Community Edition)叫做docker-ce。老版本的Docker包叫做docker或者docker-engine,如果安装了老版本的docker得先卸载然后再安装新版本的docker。docker的发展非常迅速,apt源的更新往往比较滞后。所以docker官网推荐的安装方式都是下载docker安装脚本安装。 
    卸载老旧的版本(若未安装过可省略此步):

    $ sudo apt-get remove docker docker-engine docker.io

    安装最新的docker:

    $ curl -fsSL get.docker.com -o get-docker.sh
    $ sudo sh get-docker.sh

    shell会提示你输入sudo的密码,然后开始执行最新的docker过程 
    或者

    $ curl -sSL https://get.docker.com/ | sh 

    确认Docker成功最新的docker:

    $ sudo docker run hello-world

    4.安装docker-compose

    两种最新的docker安装方式

    1.从github上下载docker-compose二进制文件安装

    • 下载最新版的docker-compose文件 
    sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

     若是github访问太慢,可以用daocloud下载

    sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    • 添加可执行权限
    sudo chmod +x /usr/local/bin/docker-compose
    • 测试安装结果

    $ docker-compose --version
    
    docker-compose version 1.16.1, build 1719ceb

    2.pip安装

    sudo pip install docker-compose

    5.docker-compose文件结构和示例

    docker-compose文件结构

    docker-compose.yml:

    version: "3"
    services:
    
      redis:
        image: redis:alpine
        ports:
          - "6379"
        networks:
          - frontend
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
    
      db:
        image: postgres:9.4
        volumes:
          - db-data:/var/lib/postgresql/data
        networks:
          - backend
        deploy:
          placement:
            constraints: [node.role == manager]
    
      vote:
        image: dockersamples/examplevotingapp_vote:before
        ports:
          - 5000:80
        networks:
          - frontend
        depends_on:
          - redis
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
          restart_policy:
            condition: on-failure
    
      result:
        image: dockersamples/examplevotingapp_result:before
        ports:
          - 5001:80
        networks:
          - backend
        depends_on:
          - db
        deploy:
          replicas: 1
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
    
      worker:
        image: dockersamples/examplevotingapp_worker
        networks:
          - frontend
          - backend
        deploy:
          mode: replicated
          replicas: 1
          labels: [APP=VOTING]
          restart_policy:
            condition: on-failure
            delay: 10s
            max_attempts: 3
            window: 120s
          placement:
            constraints: [node.role == manager]
    
      visualizer:
        image: dockersamples/visualizer:stable
        ports:
          - "8080:8080"
        stop_grace_period: 1m30s
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
        deploy:
          placement:
            constraints: [node.role == manager]
    
    networks:
      frontend:
      backend:
    
    volumes:
      db-data:

    docker-compose使用示例

    通过docker-compose构建一个在docker中运行的基于python flask框架的web应用。

    注意:确保你已经安装了Docker Engine和Docker Compose。 您不需要安装Python或Redis,因为这两个都是由Docker镜像提供的。

    Step 1: 定义python应用

    • 1 .创建工程目录
    $ mkdir compose_test
    $ cd compose_test
    $ mkdir src      # 源码文件夹
    $ mkdir docker  # docker配置文件夹

    目录结构如下: 

    └── compose_test
        ├── docker
        │   └── docker-compose.yml
        ├── Dockerfile
        └── src
            ├── app.py
            └── requirements.txt
    • 2 .在compose_test/src/目录下创建python flask应用 compose_test/src/app.py文件。
    from flask import Flask
    from redis import Redis
    
    app = Flask(__name__)
    redis = Redis(host='redis', port=6379)
    
    @app.route('/')
    def hello():
        count = redis.incr('hits')
        return 'Hello World! I have been seen {} times.\n'.format(count)
    
    if __name__ == "__main__":
        app.run(host="0.0.0.0", debug=True)
    • 3 .创建python 需求文件 compose_test/src/requirements.txt
    flask
    redis

    Step 2: 创建容器的Dockerfile文件

    一个容器一个Dockerfile文件,在compose_test/目录中创建Dockerfile文件:

    FROM python:3.7
    
    COPY src/ /opt/src
    WORKDIR /opt/src
    
    RUN pip install -r requirements.txt
    CMD ["python", "app.py"]

    Dockerfile文件告诉docker了如下信息:

    从Python 3.6镜像开始构建一个容器镜像。 

    复制src(即compose_test/src)目录到容器的/opt/src目录。 

    将容器的工作目录设置为/opt/src(通过docker exec -it your_docker_container_id_or_name bash 进入容器后的默认目录)。 
    安装Python依赖关系。
    将容器的默认命令设置为python app.py。

    Step 3: 定义docker-compose脚本

    在compose_test/docker/目录下创建docker-compose.yml文件,并在里面定义服务,内容如下:

    version: '3'
    services:
      web:
        build: ../
        ports:
         - "5000:5000"
      redis:
        image: "redis:3.0.7"

    这个compose文件定义了两个服务,即定义了web和redis两个容器。 
    web容器: 

    • 使用当前docker-compose.yml文件所在目录的上级目录(compose_test/Dockerfile)中的Dockerfile构建映像。 
    • 将容器上的暴露端口5000映射到主机上的端口5000。 我们使用Flask Web服务器的默认端口5000。 

    redis容器: 

    • redis服务使用从Docker Hub提取的官方redis镜像3.0.7版本。

    Step 4: 使用Compose构建并运行您的应用程序

    在compose_test/docker/目录下执行docker-compose.yml文件:

    $ docker-compose up
    # 若是要后台运行: $ docker-compose up -d
    # 若不使用默认的docker-compose.yml 文件名:
    $ docker-compose -f server.yml up -d 

    然后在浏览器中输入http://0.0.0.0:5000/查看运行的应用程序。

    Step 5: 编辑compose文件以添加文件绑定挂载

    上面的代码是在构建时静态复制到容器中的,即通过Dockerfile文件中的COPY src /opt/src命令实现物理主机中的源码复制到容器中,这样在后续物理主机src目录中代码的更改不会反应到容器中。 
    可以通过volumes 关键字实现物理主机目录挂载到容器中的功能(同时删除Dockerfile中的COPY指令,不需要创建镜像时将代码打包进镜像,而是通过volums动态挂载,容器和物理host共享数据卷):

    version: '3'
    services:
      web:
        build: ../
        ports:
         - "5000:5000"
        volumes:
         - ../src:/opt/src
      redis:
        image: "redis:3.0.7"

    通过volumes(卷)将主机上的项目目录(compose_test/src)挂载到容器中的/opt/src目录下,允许您即时修改代码,而无需重新构建镜像。

    Step 6: 重新构建和运行应用程序

    使用更新的compose文件构建应用程序,然后运行它。

    $ docker-compose up -d

    6.compose常用服务配置参考

    Compose文件是一个定义服务,网络和卷的YAML文件。 Compose文件的默认文件名为docker-compose.yml。

    提示:您可以对此文件使用.yml或.yaml扩展名。 他们都工作。

    与docker运行一样,默认情况下,Dockerfile中指定的选项(例如,CMD,EXPOSE,VOLUME,ENV)都被遵守,你不需要在docker-compose.yml中再次指定它们。

    同时你可以使用类似Bash的$ {VARIABLE} 语法在配置值中使用环境变量,有关详细信息,请参阅变量替换

    本节包含版本3中服务定义支持的所有配置选项。

    build

    build 可以指定包含构建上下文的路径:

    version: '2'
    services:
      webapp:
        build: ./dir

    或者,作为一个对象,该对象具有上下文路径和指定的Dockerfile文件以及args参数值:

    version: '2'
    services:
      webapp:
        build:
          context: ./dir
          dockerfile: Dockerfile-alternate
          args:
            buildno: 1

    webapp服务将会通过./dir目录下的Dockerfile-alternate文件构建容器镜像。 
    如果你同时指定image和build,则compose会通过build指定的目录构建容器镜像,而构建的镜像名为image中指定的镜像名和标签。

    build: ./dir
    image: webapp:tag

    这将由./dir构建的名为webapp和标记为tag的镜像。

    context

    包含Dockerfile文件的目录路径,或者是git仓库的URL。 
    当提供的值是相对路径时,它被解释为相对于当前compose文件的位置。 该目录也是发送到Docker守护程序构建镜像的上下文。

    dockerfile

    备用Docker文件。Compose将使用备用文件来构建。 还必须指定构建路径。

    args

    添加构建镜像的参数,环境变量只能在构建过程中访问。 
    首先,在Dockerfile中指定要使用的参数:

    ARG buildno
    ARG password
    
    RUN echo "Build number: $buildno"
    RUN script-requiring-password.sh "$password"

    然后在args键下指定参数。 你可以传递映射或列表:

    build:
      context: .
      args:
        buildno: 1
        password: secret
    
    build:
      context: .
      args:
        - buildno=1
        - password=secret

    ** 注意:YAML布尔值(true,false,yes,no,on,off)必须用引号括起来,以便解析器将它们解释为字符串。

    image

    指定启动容器的镜像,可以是镜像仓库/标签或者镜像id(或者id的前一部分)

    image: redis
    image: ubuntu:14.04
    image: tutum/influxdb
    image: example-registry.com:4000/postgresql
    image: a4bc65fd

    如果镜像不存在,Compose将尝试从官方镜像仓库将其pull下来,如果你还指定了build,在这种情况下,它将使用指定的build选项构建它,并使用image指定的名字和标记对其进行标记。

    container_name

    指定一个自定义容器名称,而不是生成的默认名称。

    container_name: my-web-container

    由于Docker容器名称必须是唯一的,因此如果指定了自定义名称,则无法将服务扩展到多个容器。

    volumes

    卷挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro),挂载数据卷的默认权限是读写(rw),可以通过ro指定为只读。 
    你可以在主机上挂载相对路径,该路径将相对于当前正在使用的Compose配置文件的目录进行扩展。 相对路径应始终以 . 或者 .. 开始。

    volumes:
      # 只需指定一个路径,让引擎创建一个卷
      - /var/lib/mysql
    
      # 指定绝对路径映射
      - /opt/data:/var/lib/mysql
    
      # 相对于当前compose文件的相对路径
      - ./cache:/tmp/cache
    
      # 用户家目录相对路径
      - ~/configs:/etc/configs/:ro
    
      # 命名卷
      - datavolume:/var/lib/mysql

    但是,如果要跨多个服务并重用挂载卷,请在顶级volumes关键字中命名挂在卷,但是并不强制,如下的示例亦有重用挂载卷的功能,但是不提倡。

    version: "3"
    
    services:
      web1:
        build: ./web/
        volumes:
          - ../code:/opt/web/code
      web2:
        build: ./web/
        volumes:
          - ../code:/opt/web/code
    

    ** 注意:通过顶级volumes定义一个挂载卷,并从每个服务的卷列表中引用它, 这会替换早期版本的Compose文件格式中volumes_from。

    version: "3"
    
    services:
      db:
        image: db
        volumes:
          - data-volume:/var/lib/db
      backup:
        image: backup-service
        volumes:
          - data-volume:/var/lib/backup/data
    
    volumes:
      data-volume:

    command

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

    command: bundle exec thin -p 3000
    

    该命令也可以是一个类似于dockerfile的列表:

    command: ["bundle", "exec", "thin", "-p", "3000"]
    

    links

    链接到另一个服务中的容器。 请指定服务名称和链接别名(SERVICE:ALIAS),或者仅指定服务名称。

    web:
      links:
       - db
       - db:database
       - redis

    在当前的web服务的容器中可以通过链接的db服务的别名database访问db容器中的数据库应用,如果没有指定别名,则可直接使用服务名访问。

    链接不需要启用服务进行通信 - 默认情况下,任何服务都可以以该服务的名称到达任何其他服务。 (实际是通过设置/etc/hosts的域名解析,从而实现容器间的通信。故可以像在应用中使用localhost一样使用服务的别名链接其他容器的服务,前提是多个服务容器在一个网络中可路由联通)

    links也可以起到和depends_on相似的功能,即定义服务之间的依赖关系,从而确定服务启动的顺序。

    external_links

    链接到docker-compose.yml 外部的容器,甚至并非 Compose 管理的容器。参数格式跟 links 类似。

    external_links:
     - redis_1
     - project_db_1:mysql
     - project_db_1:postgresql

    expose

    暴露端口,但不映射到宿主机,只被连接的服务访问。 
    仅可以指定内部端口为参数

    expose:
     - "3000"
     - "8000"

    ports

    暴露端口信息。 
    常用的简单格式:使用宿主:容器 (HOST:CONTAINER)格式或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。

    ** 注意:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 你可能会得到错误得结果,因为 YAML 将会解析 xx:yy 这种数字格式为 60 进制。所以建议采用字符串格式。

    简单的短格式:

    ports:
     - "3000"
     - "3000-3005"
     - "8000:8000"
     - "9090-9091:8080-8081"
     - "49100:22"
     - "127.0.0.1:8001:8001"
     - "127.0.0.1:5000-5010:5000-5010"
     - "6060:6060/udp"

    在v3.2中ports的长格式的语法允许配置不能用短格式表示的附加字段。 
    长格式:

    ports:
      - target: 80
        published: 8080
        protocol: tcp
        mode: host

    target:容器内的端口 
    published:物理主机的端口 
    protocol:端口协议(tcp或udp) 
    mode:host 和ingress 两总模式,host用于在每个节点上发布主机端口,ingress 用于被负载平衡的swarm模式端口。

    restart

    no是默认的重启策略,在任何情况下都不会重启容器。 指定为always时,容器总是重新启动。 如果退出代码指示出现故障错误,则on-failure将重新启动容器。

    restart: "no"
    restart: always
    restart: on-failure
    restart: unless-stopped

    environment

    添加环境变量。 你可以使用数组或字典两种形式。 任何布尔值; true,false,yes,no需要用引号括起来,以确保它们不被YML解析器转换为True或False。 
    只给定名称的变量会自动获取它在 Compose 主机上的值,可以用来防止泄露不必要的数据。

    environment:
      RACK_ENV: development
      SHOW: 'true'
      SESSION_SECRET:
    
    environment:
      - RACK_ENV=development
      - SHOW=true
      - SESSION_SECRET

    ** 注意:如果你的服务指定了build选项,那么在构建过程中通过environment定义的环境变量将不会起作用。 将使用build的args子选项来定义构建时的环境变量。

    pid

    将PID模式设置为主机PID模式。 这就打开了容器与主机操作系统之间的共享PID地址空间。 使用此标志启动的容器将能够访问和操作裸机的命名空间中的其他容器,反之亦然。即打开该选项的容器可以相互通过进程 ID 来访问和操作。

    pid: "host"

    dns

    配置 DNS 服务器。可以是一个值,也可以是一个列表。

    dns: 8.8.8.8
    dns:
      - 8.8.8.8
      - 9.9.9.9

     

     

    展开全文
  • docker-compose详解

    万次阅读 多人点赞 2019-02-18 11:06:19
    curl -L https://github.com/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose 或者使用包管理工具:...

    1 安装:

    官方:

    curl -L https://github.com/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose

    或者使用包管理工具:

    apt-get install docker-compose

    2 使用场景

    docker-compose用来单机上编排容器(定义和运行多个容器,使容器能互通)

    Eg:前端和后端部署在一台机器上,现在直接通过编写docker-compose文件对多个服务(可定义依赖,按顺序启动服务)同时进行启动/停止/更新

    注:

    docker-compose将所管理的容器分为3层结构:project  service  container

    docker-compose.yml组成一个project,project包括多个service,每个service定义了容器运行的镜像(或构建镜像),网络端口,文件挂载,参数,依赖等,每个service包括同一个镜像多个容器实例

    即 project 包含 service ,service 包含 container 

    3 编写docker-compose.yml

    官网地址:https://docs.docker.com/compose/compose-file/

    version: '3'
    services:
      back:
        image: backService:1.0
        container_name: back
        environment:
          - name=tom
          - DB_PATH=jdbc:sqlite:/data/ns.db
        restart: always
        privileged: true
        ports:
          - "9000:9000"
        networks:
          - "net"
        volumes:
          - "/root/k3s.kube.config:/k3s.kube.config"
          - "/root/data:/data"
          - "/etc/network/interfaces:/etc/network/interfaces"
      front:
        image: front:1.0
        container_name: front
        restart: always
        ports:
          - "10087:80"
        networks:
          - "net"
        volumes:
          - "/root/nginx.conf:/etc/nginx/nginx.conf"
    networks:
      net:
        driver: bridge

    version:指定 docker-compose.yml 文件的写法格式

    services:多个容器集合environment:环境变量配置,可以用数组或字典两种方式

    environment:
        RACK_ENV: "development"
        SHOW: "ture"
    -------------------------
    environment:
        - RACK_ENV="development"
        - SHOW="ture"

    image:指定服务所使用的镜像

    version: '2'
    services:
      redis:
        image: redis:alpine

    expose:定义容器用到的端口(一般用来标识镜像使用的端口,方便用ports映射

    expose:
        - "3000"
        - "8000"

    ports:定义宿主机端口和容器端口的映射,可使用宿主机IP+宿主机端口进行访问 宿主机端口:容器端口

    ports:   # 暴露端口信息  - "宿主机端口:容器暴露端口"
    - "5000"
    - "8081:8080"

    注:仅指定容器端口时,宿主机将会随机选择端口 

    volumes:卷挂载路径,定义宿主机的目录/文件和容器的目录/文件的映射  宿主机路径:容器路径

    volumes:
      - "/var/lib/mysql"
      - "hostPath:containerPath"
      - "root/configs:/etc/configs"
    

    depend_on: 规定service加载顺序,例如数据库服务需要在后台服务前运行

    extra_hosts:类似于docker里的--add-host参数 配置DNS域名解析(域名和IP的映射)

    extra_hosts:
     - "googledns:8.8.8.8"
     - "dockerhub:52.1.157.61"

    相当于在容器种的/etc/hosts文件里增加

    8.8.8.8 googledns
    52.1.157.61 dockerhub

    restart: always :配置重启,docker每次启动时会启动该服务

    restart: always

    privileged: true :开启特权模式

    privileged: true

    user: root :指定容器运行的用户名

    user: root

    links:将指定容器连接到当前连接,可以设置别名,已废弃,推荐使用networks

    networks

    可参考:https://www.cnblogs.com/jsonhc/p/7823286.html

    version: '3'
    services:
      front:
        image: front
        container_name: front
        depends_on:
          - php
        ports:
          - "80:80"
        networks:
          - "net1"

        volumes:
          - "/www:/usr/local/nginx/html"
      back:
        image: back
        container_name:back
        expose: 
          - "9000"
        networks:
          - "net1"

        volumes:
          - "/www:/usr/local/nginx/html"

    networks:
      net1:
        driver: bridge

    front里可以直接用back替换IP访问back

    logging:日志服务

    driver:默认json-file,可选syslog

    logging:
      driver: syslog
      options:
        syslog-address: "tcp://192.168.0.42:123"

    network_mode:设置网络模式

    network_mode: "bridge"
    network_mode: "host"
    network_mode: "none"
    network_mode: "service:[service name]"
    network_mode: "container:[container name/id]"

    bridge:默认,需要单独配置ports映射主机port和服务的port,并且开启了容器间通信

    host:和宿主机共享网络,比如service是8081端口,无需配置ports,直接可以用主机IP:8081访问

     

    cap_add cap_drop:赋予/删除 容器某些能力

    可运行 man 7 capabilities 查看所有能力

    build:配置构建时,Compose 会利用它自动构建镜像,该值可以是一个路径,也可以是一个对象,用于指定 Dockerfile 路径

    注:如果指定build同时也指定image,那么会从build里构建,镜像的名字和tag将取image指定的

    build: .
    image: webapp:tag

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

    command: bundle exec thin -p 3000
    ----------------------------------
    command: [bundle,exec,thin,-p,3000]

     

    4 docker-compose命令:

    官网地址:https://docs.docker.com/compose/reference/overview/

    注意:

    以下都需要在docker-compose.yml所在目录下执行,且名字就是默认的docker-compose.yml,否则需要加上 -f yml地址

    Eg:  docker-compose -f /usr/docker/docker-compose1.yml ps

    * 表示常用

    * docker-compose pull:拉取服务里定义的镜像

    * docker-compose ps :列出project所有运行容器(容器名 = 目录名_service_index  index表示容器序数,从1开始) 

    Eg:

    docker-compose build:构建/重新构建所有镜像

    当某个service的Dockerfile改变时,即镜像发生改变需要重新生成时,如果仅仅是docker-compose.yml改变,只需要up重新启动project即可

    docker-compose start [serviceName]:启动已存在但停止的所有service

    (可选)serviceName:表示启动某一个service

    * docker-compose up -d(相当于 build + start  构建(容器)并启动(容器)整个project的所有service

    -d:后台进程

    --scale:指定服务运行的容器个数(如果服务有对外的端口就不能指定多个容器,因为端口已经被占用)   Eg:docker-compose up -d --scale web=1 --scale redis=2

    docker-compose stop [serviceName]:停止运行的service

    (可选)serviceName:表示停止某一个service

    docker-compose rm -f [serviceName]:删除已停止的所有service

    (可选)serviceName:表示删除已停止某一个service(可以用docker-compose up重新构建service)

    -f :删除不在询问

    * docker-compose down -v(相当于 stop + rm:停止并移除整个project的所有services

    -v :删除挂载卷和volunme的链接

    * docker-compose logs [serviceName]:查看服务内所有容器日志输出,

    加上serviceName表示输出某一个service的日志

    -f:实时输出日志

    docker-compose run service command:在某个服务上运行命令

    Eg:docker-compose run web ping www.baidu.com

    * docker-compose exec [serviceName] sh:进入到某个容器

    --index:2  :当服务内有多个容器时,需要指定第几个,默认是第一个  Eg:docker-compose exec --index=2 web sh

    docker-compose restart [serviceName]: 重启服务

    docker-compose config验证和查看compose文件

    docker-compose images列出所用的镜像

    docker-cpmpose scale设置服务个数 Eg:docker-compose scale web=2 worker=3 

    docker-compose pause [serviceName]暂停服务

    docker-compose unpause [serviceName]恢复服务

    常见流程:

    启动:创建docker-compose.yaml  ->  docker-compose pull  -> docker-compose up -d

    更新:docker-compose down -v -> docker-compose pull -> docker-compose up -d 

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • docker-compose

    2020-10-23 10:29:36
    docker-compose安装步骤:把docker解压到 /home/docker/bin/ 目录下 1. 先安装docker 2. chmod +x /home/docker/bin/docker-compose 3. ln -s /home/docker/bin/docker-compose /usr/local/bin/docker-compose
  • 1. 运行docker-compose 命令报错: -bash: docker-compose: command not found 2.安装: 1)先安装 pip ,检查是否已有:pip -V 报错: -bash: pip: command not found 安装 pip : yum -y install epel-...

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

    1. 运行docker-compose 命令报错:

    -bash: docker-compose: command not found

    2.安装:

    1)先安装 pip ,检查是否已有: pip -V 

    报错:

    -bash: pip: command not found

    安装  pip :

    yum -y install epel-release
    
    yum -y install python-pip
    
    #升级
    pip install --upgrade pip

    2) 安装Docker-Compose:

    pip install docker-compose
    
    

    检查是是否成功:

    docker-compose -version

    OK 了。

     

    参考:https://www.cnblogs.com/YatHo/p/7815400.html

    展开全文
  • docker docker-compose

    2021-04-22 14:30:16
    docker docker-compose 安装包 密码123456
  • Docker-compose

    千次阅读 2019-08-20 22:47:15
    Docker-compose 简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。 其代码目前在 https://github.com/docker/compose 上开源。 ...

    一、compose 简介

    Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。

    其代码目前在:https://github.com/docker/compose 上开源。

    Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig。

    我们知道使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。

    例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

    Compose 恰好满足了这样的需求。
    它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

    Compose 中有两个重要的概念:

    - 服务 (service)
    一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
    - 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

    Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

    Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

    二、安装与卸载

    1、安装与卸载
    Compose 支持 Linux、macOS、Windows 10 三大平台。

    Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker 容器中运行。

    前两种方式是传统方式,适合本地环境下安装使用;最后一种方式则不破坏系统环境,更适合云计算场景。

    Docker for Mac 、Docker for Windows 自带 docker-compose 二进制文件,安装 Docker 之后可以直接使用。

    $ docker-compose --version 
    
    docker-compose version 1.17.1, build 6d101fb
    

    Linux 系统请使用以下介绍的方法安装。

    2、 二进制包安装

    在 Linux 上的也安装十分简单,从 官方 GitHub Release [https://github.com/docker/compose/releases] 处直接下载编译好的二进制文件即可。

    例如,在 Linux 64 位系统上直接下载对应的二进制包。

    $ sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    
    $ sudo chmod +x /usr/local/bin/docker-compose 
    

    国内源安装

    curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose 
    

    在这里插入图片描述
    3、PIP 安装

    注:
    x86_64 架构的 Linux 建议按照上边的方法下载二进制包进行安装,如果计算机的架构是 ARM (例如,树莓派),再使用 pip 安装。

    这种方式是将 Compose 当作一个 Python 应用来从 pip 源中安装。

    执行安装命令:

    $ sudo pip install -U docker-compose
    

    可以看到类似如下输出,说明安装成功。

    Collecting docker-compose  
     Downloading docker-compose-1.17.1.tar.gz (149kB): 149kB downloaded
     ...
    Successfully installed docker-compose cached-property requests texttable websocket-client docker-py dockerpty six enum34 backports.ssl-match-hostname ipaddress
    

    4、bash 补全命令

    $ curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
    

    5、容器中执行
    Compose 既然是一个 Python 应用,自然也可以直接用容器来执行它。

    $ curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /u sr/local/bin/docker-compose 
    $ chmod +x /usr/local/bin/docker-compose
    

    5、卸载

    如果是二进制包方式安装的,删除二进制文件即可。

    $ sudo rm /usr/local/bin/docker-compose
    

    如果是通过 pip 安装的,则执行如下命令即可删除。

    $ sudo pip uninstall docker-compose
    

    三、使用

    1、术语

    首先介绍几个术语。

    • 服务 (service)
      一个应用容器,实际上可以运行多个相同镜像的实例。
    • 项目 (project)
      由一组关联的应用容器组成的一个完整业务单元。
      可见,一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理

    2、场景
    最常见的项目是 web 网站,该项目应该包含 web 应用和缓存。
    下面用 Python 来建立一个能够记录页面访问次数的 web 网站。

    3、web 应用

    新建文件夹,在该目录中编写 app.py 文件(最好用PyCharm编写好,然后复制粘贴过来)
    在这里插入图片描述

    from flask import Flask
    from redis import Redis 
    
    app = Flask(__name__)
    redis = Redis(host='redis', port=6379) 
    
    @app.route('/')
    def hello():    
        count = redis.incr('hits')    
        return 'Hello World! 该页面已被访问 {} 次。\n'.format(count)
    
    if __name__ == "__main__":    
        app.run(host="0.0.0.0", debug=True)
    

    如下:
    指令:vim app.py
    在这里插入图片描述
    4、Dockerfile
    编写 Dockerfile 文件,内容为

    FROM python:3.6-alpine
    ADD . /code
    WORKDIR /code
    RUN pip install redis flask
    CMD ["python", "app.py"]
    

    指令:vim Dockerfile
    在这里插入图片描述

    5、docker-compose.yml
    编写 docker-compose.yml 文件,这个是 Compose 使用的主模板文件

    (最好用PyCharm编写好,然后复制粘贴过来,因为PyCharm自带首行缩进功能,防止空格问题出错)

    version: '3'
    services:      
      web:    
        build: .    
        ports:     
          - "5000:5000"   
      redis:    
        image: "redis:alpine" 
    

    指令:vim docker-compose.yml
    在这里插入图片描述
    6、运行 compose 项目
    在这里插入图片描述

    $ docker-compose up
    

    在这里插入图片描述
    此时访问本地 5000 端口,每次刷新页面,计数就会加 1。
    在这里插入图片描述

    四、Compose 命令说明

    1、命令对象与格式

    对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。

    执行

    docker-compose [COMMAND] --help 
    或者 
    docker-compose help [COMMAND] 
    

    可以查看具体某个命令的使用格式。

    docker-compose 命令的基本的使用格式是

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

    2、命令选项

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

    3、命令使用说明

    build
    

    格式为

    docker-compose build [options] [SERVICE...]
    

    构建(重新构建)项目中的服务容器。
    服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。

    可以随时在项目目录下运行 docker-compose build 来重新构建服务。
    选项包括:

    --force -rm   删除构建过程中的临时容器。
    --no -cache  构建镜像过程中不使用 cache(这将加长构建过程)。
    --pull   始终尝试通过 pull 来获取更新版本的镜像。
    

    config
    验证 Compose 文件格式是否正确,若正确则显示配置,若格式错误显示错误原因。

    down
    此命令将会停止 up 命令所启动的容器,并移除网络

    exec
    进入指定的容器。

    help
    获得一个命令的帮助。

    images
    列出 Compose 文件中包含的镜像。

    kill
    格式为

    docker-compose kill [options] [SERVICE...]。
    

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

    支持通过 -s 参数来指定发送的信号,例如通过如下指令发送 SIGINT 信号。

    $ docker-compose kill -s SIGINT
    

    logs
    格式为

    docker-compose logs [options] [SERVICE...]。
    

    查看服务容器的输出。
    默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。可以通过 –no-color 来关闭颜色。

    该命令在调试问题的时候十分有用。

    pause
    

    格式为

    docker-compose pause [SERVICE...]。
    

    暂停一个服务容器。

    port
    

    格式为

    docker-compose port [options] SERVICE PRIVATE_PORT。
    

    打印某个容器端口所映射的公共端口。

    选项:

    --protocol=proto 指定端口协议,tcp(默认值)或者 udp。
    
    --index=index 如果同一服务存在多个容器,指定命令对象容器的序号(默认为 1)。
    

    ps
    格式为

    docker-compose ps [options] [SERVICE...]
    

    列出项目中目前的所有容器。

    选项:

    -q 只打印容器的 ID 信息。
    

    pull
    格式为

    docker-compose pull [options] [SERVICE...]
    

    拉取服务依赖的镜像。

    选项:

    --ignore-pull-failures 忽略拉取镜像过程中的错误。
    

    push
    推送服务依赖的镜像到 Docker 镜像仓库。

    restart
    格式为

    docker-compose restart [options] [SERVICE...]
    

    重启项目中的服务。
    选项:

    -t, --timeout TIMEOUT 指定重启前停止容器的超时(默认为 10 秒)。
    

    rm
    格式为

    docker-compose rm [options] [SERVICE...]
    

    删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。

    选项:

    -f, --force 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。
    
    -v 删除容器所挂载的数据卷。
    

    run
    格式为

    docker-compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
    

    在指定服务上执行一个命令。

    例如:

    $ docker-compose run ubuntu ping docker.com
    

    将会启动一个 ubuntu 服务容器,并执行 ping docker.com 命令。

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

    该命令类似启动容器后运行指定的命令,相关卷、链接等等都将会按照配置自动创建。

    两个不同点:

    • 给定命令将会覆盖原有的自动运行命令;

    • 不会自动创建端口,以避免冲突。

    如果不希望自动启动关联的容器,可以使用 –no-deps 选项,例如

    $ docker-compose run --no-deps web python manage.py shell
    

    将不会启动 web 容器所关联的其它容器。

    选项:

    -d         后台运行容器。
    --name NAME       为容器指定一个名字。
    --entrypoint CMD    覆盖默认的容器启动指令。
    -e KEY=VAL          设置环境变量值,可多次使用选项来设置多个环境变量。
    -u, --user=" "      指定运行容器的用户名或者 uid。
    --no-deps          不自动启动关联的服务容器。
    --rm               运行命令后自动删除容器,d 模式下将忽略。
    -p, --publish=[]   映射容器端口到本地主机。
    --service-ports    配置服务端口并映射到本地主机。
    -T         不分配伪 tty,意味着依赖 tty 的指令将无法运行。
    

    scale
    格式为

    docker-compose scale [options] [SERVICE=NUM...]
    

    设置指定服务运行的容器个数。
    通过 service=num 的参数来设置数量。例如:

    $ docker-compose scale web=3 db=2
    

    将启动 3 个容器运行 web 服务,2 个容器运行 db 服务。

    一般的,当指定数目多于该服务当前实际运行容器,将新创建并启动容器;反之,将停止容器。
    选项:

    -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
    

    start
    格式为

    docker-compose start [SERVICE...]。
    

    启动已经存在的服务容器。

    stop
    格式为

    docker-compose stop [options] [SERVICE...]。
    

    停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。

    选项:

    -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
    

    top
    查看各个服务容器内运行的进程。

    unpause
    格式为

    docker-compose unpause [SERVICE...]
    

    恢复处于暂停状态中的服务。

    up
    格式为

    docker-compose up [options] [SERVICE...]
    

    该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。

    链接的服务都将会被自动启动,除非已经处于运行状态。

    可以说,大部分时候都可以直接通过该命令来启动一个项目。

    默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。

    当通过 Ctrl+C 停止命令时,所有容器将会停止。
    如果使用 docker-compose up -d,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。

    默认情况,如果服务容器已经存在,docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容。如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。如果用户只想重新部署某个服务,可以使用 docker-compose up --no-deps -d <SERVICE_NAME> 来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。

    选项:

    -d 在后台运行服务容器。
    --no-color 不使用颜色来区分不同的服务的控制台输出。
    --no-deps 不启动服务所链接的容器。
    --force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用。
    --no-recreate 如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用。
    --no-build 不自动构建缺失的服务镜像。
    -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
    

    version
    格式为

    docker-compose version。
    

    打印版本信息。

    五、Docker-compose模板文件

    模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。但不用担心,这里面大部分指令跟 docker run 相关参数的含义都是类似的。

    默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式

    version: "3" 
    
    services:  
      webapp:    
        image: examples/web            
        ports:      
          - "80:80"    
        volumes:      
          - "/data"
    

    注意每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动构建生成镜像。

    如果使用 build 指令,在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中再次设置。

    下面分别介绍各个指令的用法。

    build
    

    指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。

    version: '3'
    services:   
    
      webapp:    
        build: ./dir
    

    你也可以使用 context 指令指定 Dockerfile 所在文件夹的路径。

    使用 dockerfile 指令指定 Dockerfile 文件名。
    使用 arg 指令指定构建镜像时的变量。

    version: '3'
    services:   
    
      webapp:    
        build:      
          context: ./dir      
          dockerfile: Dockerfile-alternate      
          args:        
            buildno: 1
    

    使用 cache_from 指定构建镜像的缓存

    build:  
      context: .  
      cache_from:    
        - alpine:latest    
        - corp/web_app:3.14
    

    cap_add, cap_drop
    指定容器的内核能力(capacity)分配。

    例如,让容器拥有所有能力可以指定为:

    cap_add:  
      - ALL
    

    去掉 NET_ADMIN 能力可以指定为:

    cap_drop:  
      - NET_ADMIN
    

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

    command: echo "hello world"
    

    configs
    仅用于 Swarm mode

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

    例如,创建了一个 cgroup 组名称为 cgroups_1。

    cgroup_parent: cgroups_1
    

    container_name
    指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式。

    container_name: docker-web-container
    

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

    deploy
    仅用于 Swarm mode,详细内容请查看 Swarm mode 一节

    devices
    指定设备映射关系。

    devices:     
      -"/dev/ttyUSB1:/dev/ttyUSB0"
    

    depends_on
    解决容器的依赖、启动先后的问题。以下例子中会先启动 redis db 再启动 web

    version: '3' 
    
    services:  
      web:   
        build: .    
        depends_on:      
          - db      
          - redis  
      redis:    
        image: redis   
    
      db:   
        image: postgres
    

    注意:
    web 服务不会等待 redis db 「完全启动」之后才启动。

    dns
    自定义 DNS 服务器。可以是一个值,也可以是一个列表。

    dns: 8.8.8.8 
    
    dns:  
      -8.8.8.8  
      -114.114.114.114
    

    dns_search
    配置 DNS 搜索域。可以是一个值,也可以是一个列表。

    dns_search: example.com 
    
    dns_search:  
      -domain1.example.com 
      -domain2.example.com
    

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

    tmpfs: /runt
    tmpfs:  
      - /run  
      - /tmp
    

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

    如果通过 docker-compose -f FILE 方式来指定 Compose 模板文件,则 env_file 中变量的路径会基于模板文件路径。

    如果有变量名称与 environment 指令冲突,则按照惯例,以后者为准。

    env_file: .env
    
    env_file:  
      -./common.env  
      -./apps/web.env  
      -/opt/secrets.env
    

    环境变量文件中每一行必须符合格式,支持 # 开头的注释行。

    #common.env: Set development environment
    PROG_ENV=development
    

    environment
    设置环境变量。你可以使用数组或字典两种格式。

    只给定名称的变量会自动获取运行 Compose 主机上对应变量的值,可以用来防止泄露不必要的数据。

    environment:  
      RACK_ENV: development  
      SESSION_SECRET: 
    
    environment:  
      - RACK_ENV=development  
      - SESSION_SECRET
    

    如果变量名称或者值中用到 true|false,yes|no 等表达 布尔 含义的词汇,最好放到引号里,避免 YAML 自动解析某些内容为对应的布尔语义。这些特定词汇,包括

    y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF
    

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

    仅可以指定内部端口为参数

    expose: 
     - "3000" 
     - "8000"
    

    external_links
    注意:不建议使用该指令。

    链接到 docker-compose.yml 外部的容器,甚至并非 Compose 管理的外部容器。

    external_links: 
     -redis_1 
     -project_db_1:mysql 
     -project_db_1:postgresql
    

    extra_hosts
    类似 Docker 中的 --add-host 参数,指定额外的 host 名称映射信息。

    extra_hosts: 
     -"googledns:8.8.8.8" 
     -"dockerhub:52.1.157.61"
    

    会在启动后的服务容器中 /etc/hosts 文件中添加如下两条条目。

    8.8.8.8 googledns
    52.1.157.61 dockerhub
    

    healthcheck
    通过命令检查容器是否健康运行。

    healthcheck: 
      test: ["CMD", "curl", "-f", "http://localhost"]  
      interval: 1m30s  
      timeout: 10s  
      retries: 3
    

    image
    指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。

    image: ubuntu
    image: orchardup/postgresql
    image: a4bc65fd
    

    labels
    为容器添加 Docker 元数据(metadata)信息。例如可以为容器添加辅助说明信息。

    labels: 
      com.startupteam.description: "webapp for a startup team" 
      com.startupteam.department: "devops department"
      com.startupteam.release: "rc3 for v1.0"
    

    links
    注意:不推荐使用该指令。

    logging
    配置日志选项。

    logging:  
      driver: syslog  
      options:    
        syslog-address: "tcp://192.168.0.42:123"
    

    目前支持三种日志驱动类型。

    driver: "json-file"
    driver: "syslog"
    driver: "none"
    

    options 配置日志驱动的相关参数。

    options:  
      max-size: "200k"  
      max-file: "10"
    

    network_mode
    设置网络模式。使用和 docker run 的 --network 参数一样的值。

    network_mode: "bridge"
    network_mode: "host"
    network_mode: "none"
    network_mode: "service:[service name]"
    network_mode: "container:[container name/id]"
    

    networks
    配置容器连接的网络。

    version: "3"
    services:   
     
      some-service:    
        networks:     
         -some-network     
         -other-network  
    
    networks:  
      some-network:  
      other-network:
    

    pid
    跟主机系统共享进程命名空间。打开该选项的容器之间,以及容器和宿主机系统之间可以通过进程 ID 来相互访问和操作。

    pid: "host"
    

    ports
    暴露端口信息。
    使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。

    ports:
     -"3000" 
     -"8000:8000" 
     -"49100:22" 
     -"127.0.0.1:8001:8001"
    

    注意:
    当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 并且没放到引号里,可能会得到错误结果,因为 YAML 会自动解析 xx:yy 这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。

    secrets
    存储敏感数据,例如 mysql 服务密码。

          version: "3.1"
          services: 
          
          mysql:  
             image: mysql  
             environment:    
               MYSQL_ROOT_PASSWORD_FILE:
                /run/secrets/db_root_password  
              secrets:
                -db_root_password    
                -my_other_secret 
        
          secrets:  
              my_secret:    
                 file: ./my_secret.txt  
              my_other_secret:    
                 external: true
    

    security_opt
    指定容器模板标签(label)机制的默认属性(用户、角色、类型、级别等)。例如配置标签的用户名和角色名。

        security_opt:    
             - label:user:USER    
             - label:role:ROLE
    

    stop_signal
    设置另一个信号来停止容器。在默认情况下使用的是 SIGTERM 停止容器。

       stop_signal: SIGUSR1
    

    sysctls
    配置容器内核参数。

    sysctls: 
      net.core.somaxconn: 1024
      net.ipv4.tcp_syncookies: 0 
    
    sysctls:  
      - net.core.somaxconn=1024  
      - net.ipv4.tcp_syncookies=0
    

    ulimits
    指定容器的 ulimits 限制值。
    例如,指定最大进程数为 65535,指定文件句柄数为 20000(软限制,应用可以随时修改,不能超过硬限制) 和 40000(系统硬限制,只能 root 用户提高)

    ulimits:    
      nproc: 65535    
      nofile:      
        soft: 20000      
        hard: 40000
    

    volumes
    数据卷所挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)。

    该指令中路径支持相对路径。

    volumes: 
     - /var/lib/mysql 
     - cache/:/tmp/cache 
     - ~/configs:/etc/configs/:ro
    

    其它指令
    此外,还有包括 domainname, entrypoint, hostname, ipc, mac_address, privileged, read_only, shm_size, restart, stdin_open, tty, user, working_dir 等指令,基本跟 docker run 中对应参数的功能一致。

    指定服务容器启动后执行的入口文件。

    entrypoint: /code/entrypoint.sh
    

    指定容器中运行应用的用户名。

    user: nginx
    

    指定容器中工作目录。

    working_dir: /code
    

    指定容器中搜索域名、主机名、mac 地址等。

    domainname: your_website.com
    hostname: test
    mac_address: 08-00-27-00-0C-0A
    

    允许容器中运行一些特权命令。

    privileged: true
    

    指定容器退出后的重启策略为始终重启。该命令对保持服务始终运行十分有效,在生产环境中推荐配置为 always 或者 unless-stopped。

    restart: always
    

    以只读模式挂载容器的 root 文件系统,意味着不能对容器内容进行修改。

    read_only: true
    

    打开标准输入,可以接受外部输入。

    stdin_open: true
    

    模拟一个伪终端。

    tty: true
    

    读取变量
    Compose 模板文件支持动态读取主机的系统环境变量和当前目录下的 .env 文件中的变量。

    例如,
    下面的 Compose 文件将从运行它的环境中读取变量 ${MONGO_VERSION} 的值,并写入执行的指令中。

    version: "3"
    services: 
    
    db:  
      image: "mongo:${MONGO_VERSION}"
    

    如果执行 MONGO_VERSION=3.2 docker-compose up 则会启动一个 mongo:3.2 镜像的容器;如果执行 MONGO_VERSION=2.8 docker-compose up 则会启动一个 mongo:2.8 镜像的容器。

    若当前目录存在 .env 文件,执行 docker-compose 命令时将从该文件中读取变量。

    在当前目录新建 .env 文件并写入以下内容。

    #支持 # 号注释
    MONGO_VERSION=3.6
    

    执行 docker-compose up 则会启动一个 mongo:3.6 镜像的容器。


    实战 Django

    实战:使用 Django+uwsgi+nignx实战搭建django项目
    在这里插入图片描述

    展开全文
  • ipfs-clutser-docker-compose:ipfs-clutser-docker-compose
  • docker-compose-源码

    2021-06-12 13:05:32
    docker-compose
  • docker-compose 常用的 docker-compose 文件
  • Docker-Compose
  • Docker Compose React 目录 概述 docker-compose用于本地开发 货柜 节点 用法 在开始之前, docker-compose.yml使用以下env变量进行端口绑定: 多变的 默认 APP_PORT 3000 随时根据需要进行更改,然后运行容器: ...
  • docker-compose-deployment-using-docker-machine:使用docker-compose和docker机器的无缝微服务部署
  • compose翻译成中文的意思是"构成"和"组成"的意思。Docker我之前把他比作一个大轮船,这个轮船上面可以放很多很多的...docker-compose是一个用来把docker自动化的东西,有了docker-compose你可以把所有繁复的docker操作
  • wordpress-docker-compose:使用DockerDocker Compose轻松进行Wordpress开发
  • docker-compose-mode:编辑docker-compose文件的主要模式
  • 它是什么 Docker Compose UI是Docker Compose的Web界面。...-w /opt/docker-compose-projects/ \ -v /var/run/docker.sock:/var/run/docker.sock \ francescou/docker-compose-ui:1.13.0 您必须等待Doc
  • Docker Compose Maven插件 ... < artifactId>docker-compose-maven-plugin $VERSION 关于 Maven插件,用于通过Maven运行基本的docker-compose命令。 它可以用作Maven生命周期的一部分,也可以用作将do
  • docker&docker-compose.zip

    2021-04-01 16:19:30
    docker以及docker-compose离线安装文件
  • 带有Docker Compose的RabbitMQ集群 创建一个3节点RabbitMQ集群,其中HAProxy充当负载均衡器。 您需要先构建HAProxy映像,然后运行: $ docker build -t haproxy-rabbitmq-cluster:1.7 . 现在运行docker compose...
  • 适用于Pimcore 5和Pimcore 6的Docker-Compose 用于Pimcore 5和Pimcore 6的简单而简单的Docker-Compose配置。 Docker-Compose由以下图像组成: 雷迪斯 MariaDB 10.4 httpd(Apache 2.4)和PHP-FPM,以及PHP7.2和...
  • 使用Docker-Compose工具在多容器架构上设置Magento 2 该存储库对应于博客提到的体系结构设置。 Docker-撰写工具 如Docker文档中所述,Compose是用于定义和运行多容器Docker应用程序的工具。 通过Compose,您可以...
  • 面向Porter的Docker Compose Mixin 这是Porter的一个混合模块,提供了Docker Composedocker-compose)CLI。 混合声明 要在捆绑包中使用此mixin,请这样声明: mixins : - docker-compose 必需的扩展名 要声明...
  • docker-compose 示例 这是我 使用的示例,用于展示如何使用 docker-compose 构建具有负载平衡的环境。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 84,186
精华内容 33,674
关键字:

docker-compose