精华内容
下载资源
问答
  • MAINTAINER docker_user docker_user@email.com # 3、镜像操作指令 RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list RUN apt-get update && apt-

    DockerFile

    基本结构

    # 1、第一行必须是 FROM 基础镜像信息
    FROM ubuntu
     
    # 2、维护者信息
    MAINTAINER docker_user docker_user@email.com
     
    # 3、镜像操作指令
    RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
    RUN apt-get update && apt-get install -y nginx
    RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
     
    # 4、容器启动执行指令
    CMD /usr/sbin/nginx
    

    Dockerfile 基本就长这样,当然这是一个很简单的例子,还有很多其他命令会在下个小节介绍。

    有几点需要注意,第一行必须是 FROM 命令,表示是基于哪个基础镜像来创建镜像的。第二行一般是 MAINTAINER 命令,表示维护人信息,但不做硬性要求。最后一行是 CMD 命令,表示启动容器执行的命令,CMD 命令必须在最后一行,如果有多个 CMD 命令,则只有最后一个生效。

    常用指令

    FROM: 必须是 Dockerfile 的首个命令,定义了使用哪个基础镜像启动构建流程。

    MAINTAINER: 声明镜像作者。

    COPY: 将宿主机的文件拷贝到镜像内的指定路径。

    ADD: 作用类似于 COPY

    COPYADD 的区别是:ADD 命令功能更多,比如拷贝一个压缩包,ADD 可以将压缩包解压到镜像内,如果是下载链接,ADD 会先下载文件,然后再拷贝。

    但现在 docker 官方更推荐使用 COPY 命令,一个命令只做一件事。

    WORKDIR: 指定 Dockerfile 中该命令下的操作所在的工作目录。

    RUN: 执行命令行命令。

    ENV: 设置环境变量。

    VOLUME: 挂载数据卷。

    EXPOSE: 暴露端口。

    CMD: 服务启动命令。

    创建镜像

    有了 Dockerfile 之后,在 Dockerfile 所在目录执行命令:

    # docker build -t <image_name> .
    

    就这么简单,镜像就创建好了。

    DockerCompose

    使用 docker-compose 部署 Redis 服务

    项目 Docker 化部署的最后一步,就差 Redis 了。本来以为是一件很简单的事,没想到折腾了我大半天的时间,下面就来分享分享我的采坑经历。

    docker-compose 文件:

    version: '3'
    
    services:
      redis:
        image: redis:3.2.12
        container_name: redis
        restart: always
        network_mode: host
        command: redis-server /etc/redis.conf
        ports:
          - 6379:6379
        volumes:
          - /data:/data
          - ./redis.conf:/etc/redis.conf
    

    当前目录下执行:

    # docker-compose up
    

    本来以为服务一启,事情就这么愉快的结束了,但是,报错。

    Can’t open the log file: No such file or directory

    原因就是 redis.conf 文件直接用的是在物理机上部署时用的,logfile 参数配的是 /var/lib/redis,但 docker 容器里没有这个目录,但是有 /data 目录,所以,把 logfile 配置成 /data 即可。

    改完之后再一启,没有任何信息输出,看来是成功了。

    docker ps 看看,没有容器。

    这下给我整懵了,咋回事呢?其实报错都不怕,就怕启动不成功,还没有报错信息。

    就这个问题给我折腾了好久,突然灵光一闪,想到 redis 会不会是以后台进程起的,导致容器直接退出。

    检查一下配置文件中的 daemonize 参数,果然是 yes。改成 no 之后,就可以正常启动了。

    就这么个破问题,卡了这么长时间,而且这类问题之前还遇到过,真是让人郁闷。

    至此,项目中的所有服务就都 Docker 化部署了。

    展开全文
  • docker compose使用

    万次阅读 2021-09-11 20:55:02
    可视的执行,是一个管理多个容器的工具,比如可以解决容器之间的依赖关系,当在宿主机启动较多的容器时候,如果都是手动操作会觉得比较麻烦而且容器出错,这个时候推荐使用 dockerd的单机编排工具 docker-compose。...

    docker-compose是基于docker的由python实现的编排工具,托管于github上,使容器的操作能够批量的,可视的执行,是一个管理多个容器的工具,比如可以解决容器之间的依赖关系,当在宿主机启动较多的容器时候,如果都是手动操作会觉得比较麻烦而且容器出错,这个时候推荐使用 dockerd的单机编排工具 docker-compose。

    1.下载docker compose

            https://github.com/docker/compose/releases

     执行命令:curl "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

     然后将docker-compose-linux-x86_64移动到docker-compose中

    2.修改权限

            chmod +x /usr/local/bin/docker-compose

    3.查看版本

            docker-compose version

    4.启动docker-compose

            docker-compose

    __________________________________________________________

          docker-compse 常用命令:

                    查看配置:docker-compose config

                    后台启动:docker-compose up -d

                    构建镜像:docker-compose build

                    下载镜像:docker-compose pull

                    运行中的容器:docker-compose  ps

                    进程:docker-compose top

                    启动:docker-compose start

                    停止:docker-compose stop

    5.编排 docker-compose 配置文件,通过docker-compose.yml文件管理各容器

    可参考:docker-compose官方文档

            开启三个服务service-aservice-bservice-eureka

    version: '2'
    
    services:
    
     service-eureka: 
       image: java
       volumes:
         - /Users/objcat/jar/service-eureka.jar:/usr/local/service-eureka.jar
       ports:
         - 8081:8081
       command:
         - /bin/sh
         - -c
         - |
           echo 192.168.1.126 servicehost >> /etc/hosts
           java -jar /usr/local/service-eureka.jar
    
     service-a: 
       image: java
       volumes:
         - /Users/objcat/jar/service-a.jar:/usr/local/service-a.jar
       ports:
         - 8082:8082
       command:
         - /bin/sh
         - -c
         - |
           echo 192.168.1.126 servicehost >> /etc/hosts
           java -jar /usr/local/service-a.jar
    
     service-b: 
       image: java
       volumes:
         - /Users/objcat/jar/service-b.jar:/usr/local/service-b.jar
       ports:
         - 8083:8083
       command:
         - /bin/sh
         - -c
         - |
           echo 192.168.1.126 servicehost >> /etc/hosts
           java -jar /usr/local/service-b.jar

    6.运行docker-compose

            docker-compose up -d

                    -d:后台运行

    7.查看运行起来的容器

            docker ps -a

    对应服务容器运行起来后就可以通过公网访问对应端口访问该服务了。

    展开全文
  • Compose 通过一个配置文件(YML 文件)来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合...

    目录

    1、了解Compose

    1.1 Compose介绍

    1.2 Compose和Docker兼容性

    1.3 docker、dockerfile与docker-compose区别

    2、安装compose(需先安装docker)

    2.1 安装环境查看

    2.2 安装compose

    方式一:从github上下载docker-compose二进制文件安装

    方式二:python-pip方式安装docker-compose

    3、Compose快速入门

    3.1 Compose 使用的三个步骤

    3.2 Compose 入门范例

    3.3 Compose容器分层

    3.4 Docker Compose 常用命令

    4、Docker-compose模板文件

    4.1 Docker-compose模板文件简介

    4.2 docker-compose.yml命令说明

    1)image

    2)build

    3)context

    4)dockerfile

    5)args

    6)commond

    7)container_name

    8)volumes

    9)volumes_from

    10)depends_on

    11)PID

    12)ports

    13)restart

    14)environment

    15)expose

    16)extra_hosts

    17)dns

    19)net

    5、Compose模板文件实例

    5.1 Docker-compose模板文件(docker-compose.yml)编写

    5.2 启动应用

    5.3 服务访问


    参考: https://docs.docker.com/compose/overview/

    1、了解Compose

    1.1 Compose介绍

    我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知,使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具(用来做docker 的多容器控制)。Docker-compose 是一个用来把 docker 自动化的东西。
    有了 Docker-compose 你可以把所有繁复的 docker 操作全都一条命令,自动化的完成。

    Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。通过一个配置文件(YML 文件)来管理多个Docker容器,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务,不再需要使用shell脚本来启动容器。 在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

    Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。

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

    1.2 Compose和Docker兼容性

    Compose 文件格式有多个版本 - 1、2、2.x 和 3.x,下表显示哪些 Compose 文件版本支持特定的 Docker 版本。详情可参考Compose file versions and upgrading | Docker Documentation

    compose文件格式版本docker版本
    Compose specification19.03.0+
    3.819.03.0+
    3.718.06.0+
    3.618.02.0+
    3.517.12.0+
    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.+

    Compose 文件格式有三个旧版本:

    • 版本 1(已弃用)。这是通过省略versionYAML 根的一个键来指定的。
    • 版本 2.x。这是通过 YAML 根目录下的version: '2'或version: '2.1'等条目指定的。
    • 版本 3.x,旨在在 Compose 和 Docker 引擎的群模式之间交叉兼容 。这是通过 YAML 根目录下的version: '3'或version: '3.1'等条目指定的。

    Compose 文件格式的最新和推荐版本由Compose Specification定义。这种格式合并了 2.x 和 3.x 版本,由Compose 1.27.0+实现。

    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。

    1.3 docker、dockerfile与docker-compose区别

    docker

    • 和操作系统无关的一个沙箱容器,宿主机安装的什么操作系统和其本身无关,在它基础上可以制作各种系统类型的基础服务。

    Dockerfile

    • 是把手工安装docer镜像的过程变成一个配置文件的方式运行,这样每次不需要一步步手敲命令去安装了,而只是需要一个配置文件运行既可生成一个镜像。

    docker-compose

    • 提供了服务和项目的概念,这样一个服务可以配置多个项目,这个服务是多个项目的集合体,启动和关闭都相对一个一个项目的启动要方便很多。

    2、安装compose(需先安装docker)

    2.1 安装环境查看

    uname -a :显示主机名、内核等系统信息
    lsb_release -a :显示操作系统信息
    docker -v :查看docker版本

    要求:

    • 1)操作系统
    • 推荐使用Ubuntu、Debian和RHEL(Centos、Fedora等)
    • 在Windows和OS X中也可以使用,但要安装Docker Toolbox工具
    • 2)内核
    • 推荐3.8及以上的内核,虽然只是要求内核>=2.6,但是虽然一些老版本的也能运行,但运行结果会有很大的不同。
    • 内核必须支持并开启cgroup和命名空间功能

    2.2 安装compose

    在已安装了docker的 ubuntu 上安装最新的compose版本3,ubuntu上需要先安装docker。docker的安装可参考:Docker教程-1-学习及安装Docker 

    两种docker安装方式:

    方式一:从github上下载docker-compose二进制文件安装

    1)下载最新版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

    2)添加可执行权限

    sudo chmod +x /usr/local/bin/docker-compose

    3)测试安装结果

    docker-compose --version

    4)Docker-compose卸载

    若通过curl方式安装的Docker-compose需要卸载,可以使用如下命令卸载:

    rm /usr/local/bin/docker-compose
    • 注意: 如果出现了"Permission denied"的错误,那可能是你没有适当的权限去删除docker-compose。你可以在前面加上sudo来删除。

    方式二:python-pip方式安装docker-compose

    1)安装python-pip

    可参考如下命令:

    # 更新索引
    apt-get update
    
    # 安装python-pip
    apt-get install python-pip
    
    # 如果python-pip无效,可安装python3-pip
    apt-get install python3-pip
    
    # pip3的升级
    pip3 install --upgrade pip
    
    # pip3的卸载
    apt-get remove -purge python3-pip
    
    # 查看默认python3版本
    python3 -V

     2)安装docker-compose

    sudo pip install docker-compose

    3)测试安装结果

    docker-compose --version

    4)Docker-compose卸载

    若通过pip安装的Docker-compose需要卸载,可以使用如下命令卸载:

    pip uninstall docker-compose

    3、Compose快速入门

    3.1 Compose 使用的三个步骤

    1. 使用 Dockerfile 定义应用程序的环境。
    2. 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
    3. 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

    3.2 Compose 入门范例

    1)打包项目,获得 jar 包 docker-demo-0.0.1-SNAPSHOT.jar

    mvn clean package

    2)在 jar 包所在路径创建 Dockerfile 文件,添加以下内容

    FROM java:8
    VOLUME /tmp
    ADD docker-demo-0.0.1-SNAPSHOT.jar app.jar
    RUN bash -c 'touch /app.jar'
    EXPOSE 9000
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

    3)在 jar 包所在路径创建文件 docker-compose.yml,添加以下内容

    version: '3' # 表示该 Docker-Compose 文件使用的是 Version 3 file
    services:
      docker-demo:  # 指定服务名称
        build: .  # 指定 Dockerfile 所在路径
        ports:    # 指定端口映射
          - "9000:8761"

    4)在 docker-compose.yml 所在路径下执行该命令 Compose 就会自动构建镜像并使用镜像启动容器

    docker-compose up
    docker-compose up -d  // 后台启动并运行容器

    5)访问 http://localhost:9000/hello 即可访问微服务接口

    3.3 Compose容器分层

    Docker Compose将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)。

    Docker Compose运行目录下的所有文件(docker-compose.yml、extends文件或环境变量文件)组成一个工程(默认为docker-compose.yml所在目录的目录名称)。一个工程可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例。

    3.4 Docker Compose 常用命令

    Docker-compose命令格式

    docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
    
    命令选项如下
    -f --file FILE指定Compose模板文件,默认为docker-compose.yml
    -p --project-name NAME 指定项目名称,默认使用当前所在目录为项目名
    --verbose  输出更多调试信息
    -v,-version 打印版本并退出
    --log-level LEVEL 定义日志等级(DEBUG, INFO, WARNING, ERROR, CRITICAL)
    

    1)ps:列出所有运行容器

    docker-compose ps
    
    命令格式:
    docker-compose  ps [options] [SERVICE...]
    列出项目中所有的容器

    2)logs:查看服务日志输出

    docker-compose logs
    
    命令格式
    docker-compose logs [options] [SERVICE...]
    查看服务容器的输出。默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。
    docker-compose logs
    查看服务容器的输出
    -f 跟踪日志输出

    3)port:打印绑定的公共端口

    下面命令可以输出 eureka 服务 8761 端口所绑定的公共端口
    docker-compose port eureka 8761
    
    命令格式
    docker-compose port [options] SERVICE PRIVATE_PORT
    显示某个容器端口所映射的公共端口。
    选项包括:
    –protocol=proto,指定端口协议,TCP(默认值)或者UDP
    –index=index,如果同意服务存在多个容器,指定命令对象容器的序号(默认为1)

    4)build:构建或者重新构建服务

    docker-compose build
    
    命令格式
    docker-compose build [options] [--build-arg key=val...] [SERVICE...]
    构建(重新构建)项目中的服务容器。
    选项包括:
    –compress 通过gzip压缩构建上下环境
    –force-rm 删除构建过程中的临时容器
    –no-cache 构建镜像过程中不使用缓存
    –pull 始终尝试通过拉取操作来获取更新版本的镜像
    -m, –memory MEM为构建的容器设置内存大小
    –build-arg key=val为服务设置build-time变量
    服务容器一旦构建后,将会带上一个标记名。可以随时在项目目录下运行docker-compose build来重新构建服务

    5)start:启动指定服务已存在的容器

    docker-compose start eureka
    
    命令格式
    docker-compose start [SERVICE...]
    docker-compose start
    启动已经存在的服务容器。

    6)restart:重新启动服务

    命令格式
    docker-compose restart [options] [SERVICE...]
    重启项目中的服务。
    选项包括:
    -t, –timeout TIMEOUT,指定重启前停止容器的超时(默认为10秒)
    docker-compose restart
    重启项目中的服务

    7)stop:停止已运行的服务的容器

    docker-compose stop eureka
    
    命令格式
    docker-compose stop [options] [SERVICE...]
    选项包括
    -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
    docker-compose stop
    停止正在运行的容器,可以通过docker-compose start 再次启动

    8)rm:删除指定服务的容器

    docker-compose rm eureka
    
    命令格式
    docker-compose rm [options] [SERVICE...]
    删除所有(停止状态的)服务容器。
    选项包括:
    –f, –force,强制直接删除,包括非停止状态的容器
    -v,删除容器所挂载的数据卷
    docker-compose rm
    删除所有(停止状态的)服务容器。推荐先执行docker-compose stop命令来停止容器。

    9)up:构建、启动容器

    docker-compose up
    
    命令格式
    docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
    选项包括:
    -d 在后台运行服务容器
    -no-color 不是有颜色来区分不同的服务的控制输出
    -no-deps 不启动服务所链接的容器
    --force-recreate 强制重新创建容器,不能与-no-recreate同时使用
    –no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用
    –no-build 不自动构建缺失的服务镜像
    –build 在启动容器前构建服务镜像
    –abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用
    -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
    –remove-orphans 删除服务中没有在compose文件中定义的容器

    10)kill:通过发送 SIGKILL 信号来停止指定服务的容器

    docker-compose kill eureka
    
    命令格式
    docker-compose kill [options] [SERVICE...]
    通过发送SIGKILL信号来强制停止服务容器。
    支持通过-s参数来指定发送的信号,例如通过如下指令发送SIGINT信号:
    docker-compose kill -s SIGINT

    11)pull:下载服务镜像

    docker-compose pull
    
    命令格式
    docker-compose pull [options] [SERVICE...]
    拉取服务依赖的镜像。
    选项包括:
    –ignore-pull-failures,忽略拉取镜像过程中的错误
    –parallel,多个镜像同时拉取
    –quiet,拉取镜像过程中不打印进度信息
    docker-compose pull
    拉取服务依赖的镜像

    12)push:推送服务镜像

    docker-compose push [options] [SERVICE...]
    推送服务的镜像。
    选项包括:
    –ignore-push-failures 忽略推送镜像过程中的错误

    13)scale:设置指定服务运气容器的个数,以 service=num 形式指定

    docker-compose scale user=3 movie=3
    
    docker-compose scale web=3 db=2
    设置指定服务运行的容器个数。通过service=num的参数来设置数量

    14)run:在一个服务上执行一个命令

    docker-compose run web bash
    
    命令格式
    docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
    在指定服务上执行一个命令。
    docker-compose run ubuntu ping www.baidu.com
    在指定容器上执行一个ping命令。

    15)down:停止和删除容器、网络、卷、镜像

    命令格式
    docker-compose down [options]
    停止和删除容器、网络、卷、镜像。
    选项包括:
    –rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像
    -v, –volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷
    –remove-orphans,删除服务中没有在compose中定义的容器
    docker-compose down
    停用移除所有容器以及网络相关

    16)pause:暂停一个服务容器

    docker-compose pause [SERVICE...]
    暂停一个服务容器

    17)uppause:恢复处于暂停状态中的服务 

    docker-compose unpause [SERVICE...]
    恢复处于暂停状态中的服务。

    18)create:为服务创建容器

    docker-compose create [options] [SERVICE...]
    为服务创建容器。
    选项包括:
    –force-recreate:重新创建容器,即使配置和镜像没有改变,不兼容–no-recreate参数
    –no-recreate:如果容器已经存在,不需要重新创建,不兼容–force-recreate参数
    –no-build:不创建镜像,即使缺失
    –build:创建容器前  ,生成镜像

    19)exec:登陆服务 

    docker-compose exec [options] SERVICE COMMAND [ARGS...]
    选项包括:
    -d 分离模式,后台运行命令。
    –privileged 获取特权。
    –user USER 指定运行的用户。
    -T 禁用分配TTY,默认docker-compose exec分配TTY。
    –index=index,当一个服务拥有多个容器时,可通过该参数登陆到该服务下的任何服务,例如:docker-compose exec –index=1 web /bin/bash ,web服务中包含多个容器
    

    20)docker-compose -h 查看帮助

    4、Docker-compose模板文件

    4.1 Docker-compose模板文件简介

    Compose允许用户通过一个docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

    Compose模板文件是一个定义服务、网络和卷的YAML文件。Compose模板文件默认路径是当前目录下的docker-compose.yml,可以使用.yml或.yaml作为文件扩展名。

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

    Docker-Compose标准模板文件应该包含version、services、networks 三大部分,最关键的是services和networks两个部分。

    • version:指定 docker-compose.yml 文件的写法格式
    • services:多个容器集合
    • build:配置构建时,Compose 会利用它自动构建镜像,该值可以是一个路径,也可以是一个对象,用于指定 Dockerfile 参数

    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:

    4.2 docker-compose.yml命令说明

    1)image

    每一个定义在docker-compose.yml中的服务必须明确指定一个image或者build选项,这与docker run命令行中输入的是对应相同的,对于docker run,在Dockerfile文件中指定的选项(比如CMD、EXPOSE、VOLUME、ENV)是默认的,因此不必在docker-compose.yml中再指定一次

    image 是指定服务的镜像名称或镜像ID,这个image ID可以是本地也可以是远程的,如果本地不存在,Compose会尝试去拉取镜像。如果你还指定了build,在这种情况下,它将使用指定的build选项构建它,并使用image指定的名字和标记对其进行标记。

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

    2)build

    服务除了可以基于指定的镜像,还可以基于一份Dockerfile,在使用up启动时执行构建任务,构建标签是build,可以指定Dockerfile所在文件夹的路径。Compose将会利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。

    build: /path/to/build/dir
    
    # 也可以是相对路径,只要上下文确定就可以读取到Dockerfile。
    build: ./dir
    
    # 设定上下文根目录,然后以该目录为准指定Dockerfile。另外还可以指定args参数
    build:
      context: ../
      dockerfile: path/of/Dockerfile
      args:
        buildno: 1

    build是一个目录,如果要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定。如果同时指定image和build两个标签,那么Compose会构建镜像并且把镜像命名为image值指定的名字。 

    # 由./dir构建的名为webapp和标记为tag的镜像。
    build: ./dir
    image: webapp:tag

    3)context

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

    build:
      context: ./dir

    4)dockerfile

    使用dockerfile文件来构建,必须指定构建路径。

    build:
      context: .
      dockerfile: Dockerfile-alternate

    5)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)必须用引号括起来,以便解析器将它们解释为字符串。

    6)commond

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

    command: bundle exec thin -p 3000

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

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

    7)container_name

    Compose的容器生成的默认名称格式是:<项目名称><服务名称><序号>,可以自定义项目名称、服务名称,但如果想自定义容器名称,可以使用标签指定:container_name: my-web-container;由于Docker容器名称必须是唯一的,因此如果指定了自定义名称,则无法将服务扩展到多个容器。 

    container_name: my-web-container

    8)volumes

    挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER]格式,或者使用[HOST:CONTAINER:ro]格式,后者对于容器来说,数据卷是只读的,可以有效保护宿主机的文件系统。Compose的数据卷指定路径可以是相对路径,使用 . 或者 .. 来指定相对目录。数据卷的格式可以是下面多种形式:

    volumes:
      // 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。
      - /var/lib/mysql
      // 使用绝对路径挂载数据卷
      - /opt/data:/var/lib/mysql
      // 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。
      - ./cache:/tmp/cache
      // 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。
      - ~/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:

    9)volumes_from

    从另一个服务或容器挂载其数据卷:

    volumes_from:
       - service_name   
         - container_name

    10)depends_on

    在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题。

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

    上述YAML文件定义的容器会先启动redis和db两个服务,最后才启动web 服务。

    11)PID

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

    pid: "host"

    12)ports

    ports用于映射端口的标签。常用的简单格式:使用HOST:CONTAINER格式或者只是指定容器的端口(宿主机会随机映射端口)

    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"
    • 当使用HOST:CONTAINER格式来映射端口时,如果使用的容器端口小于60可能会得到错误得结果,因为YAML将会解析xx:yy这种数字格式为60进制。所以建议采用字符串格式。

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

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

    13)restart

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

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

    14)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子选项来定义构建时的环境变量。

    15)expose

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

    expose:
        - "3000"
        - "8000"

    16)extra_hosts

    添加主机名的标签,会在/etc/hosts文件中添加一些记录。

    extra_hosts:
     - "somehost:162.242.195.82"
     - "otherhost:50.31.209.229"

    启动后查看容器内部hosts:

    162.242.195.82  somehost
    50.31.209.229   otherhost

    17)dns

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

    dns: 8.8.8.8
    dns:
      - 8.8.8.8
      - 9.9.9.9

    链接到其它服务中的容器。使用服务名称(同时作为别名),或者“服务名称:服务别名”(如 SERVICE:ALIAS),例如:

    links:
        - db
        - db:database
        - redis

    19)net

    设置网络模式。

    net: "bridge"
    net: "none"
    net: "host"

    5、Compose模板文件实例

    5.1 Docker-compose模板文件(docker-compose.yml)编写

    version: '2'
    services:
      web1:
        image: nginx
        ports:
          - "6061:80"
        container_name: "web1"
        networks:
          - dev
      web2:
        image: nginx
        ports:
          - "6062:80"
        container_name: "web2"
        networks:
          - dev
          - pro
      web3:
        image: nginx
        ports:
          - "6063:80"
        container_name: "web3"
        networks:
          - pro
     
    networks:
      dev:
        driver: bridge
      pro:
        driver: bridge

    docker-compose.yml文件指定了3个web服务

    5.2 启动应用

    创建一个webapp目录,将docker-compose.yaml文件拷贝到webapp目录下,使用docker-compose启动应用。

    docker-compose up -d

    5.3 服务访问

    通过浏览器访问web1,web2,web3

    http://127.0.0.1:6061
    http://127.0.0.1:6062
    http://127.0.0.1:6063
    展开全文
  • Docker compose使用

    2021-07-16 10:12:29
    curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose 或 curl -L ...

    安装

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

    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
    

    pip install docker-compose
    

    添加可执行权限

    chmod +x /usr/local/bin/docker-compose
    

    测试安装结果

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

    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。 另外关于如何创建镜像可以看这篇文章:使用Dockerfile构建Spring Boot Jar包镜像 创建docker-compose.yml # 指定本 yml 依从的 compose 哪个版本制定的 version: "3" # ...
  • Docker Compose 一、安装Docker Compose # Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。 curl -L ...
  • 1. Docker Compose 介绍 Docker Compose用来定义运行多个容器 ... 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。 最后,执行 docker-compose up 命令
  • Docker Compose详解

    2021-10-17 18:15:43
    Docker Compose详解 一、Compose简介 Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建...
  • docker-compose使用自定义网络(五)-HOST 一、编写docker-compose.yml文件 在特殊情况下需要使用host映射方式将应用对外暴露,使用docker network 中的HOST模式 version: "2" services: web: image: nginx:...
  • 这导致我们每次操作都要敲入很多命令字符,当你使用compose配置文件名字不为docker-compose.yml时,更是如此,我们还需要通过-f选项指定配置文件路径。 为了简化命令行输入,减少键盘敲击次数,我们可以将复杂的...
  • ----Docker Compose 是一种工具,用于帮助定义和共享多容器应用程序。 通过 Compose,你可以创建 YAML 文件来定义服务,并且只需一个命令,就可以启动或清理所有内容。 ----使用 Compose 的巨大优点是,你可以在文件...
  • 中我使用拷贝docker目录的方式将所有容器迁移到另一台服务器上。由于我的容器是用Docker Compose管理的,但是docker-compose.yml文件并没有拷贝新服务器上,那么在新服务器上如何用Docker Compose管理呢? 没有...
  • docker-compose使用自定义网络(一) 目录 docker-compose使用自定义网络(一) 一、编写docker-compose.yml文件 二、启动应用 三、查看应用状态 四、停止应用 五、移除应用 一、编写docker-compose.yml文件...
  • compose # step 3: 创建指向/usr/bin的符号链接 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # step 4: 测试安装结果 sudo docker-compose --version 如果你使用上面的方式安装docker,...
  • 使用Docker Compose编排微服务

    千次阅读 2021-11-10 21:47:35
    使用Docker Compose编排微服务 经过前文讲解,可使用Dockerfile(或Maven)构建镜像,然后使用docker命令操作容器,例如docker run、docker kiil等。然而,使用微服务架构的应用系统一般包含若干个微服务,每个微服务...
  • Docker Compose部署Redis 登录服务器并创建redis目录及redis配置文件 mkdir redis cd redis touch docker-compose.yaml touch redis.conf 配置文件 docker-compose.yml配置文件 version: "3.3" services: redis...
  • 使用docker部署时,若服务器的ip使用的是172.xxx.xxx.xxx网段的,就很有可能出现网段冲突的问题。docker默认docker0网桥的网关也是172.xxx.xxx.xxx网段的。
  • Docker Compose https://docs.docker.com/compose/ 1、安装 Linux环境下离线安装,在线安装速度太慢 1.1、下载 https://github.com/docker/compose/releases 1.2、配置 cp docker-compose-Linux-x86_64 /usr/local/...
  • 2.1使用Docker Compose本地安装Superset (从这一篇开始都是 (二)安装与配置 中的内容,限于篇幅,分成多篇文章) 本地尝试Superset的最快方法就是在运行Linux或者Mac OSX的电脑上使用Docker Compose,Superset...
  • 继上篇 Dockerfile 部署后,又尝试了一下 Docker Compose 的方式部署 还是部署之前的 SpringBoot 项目 1 编写 Docker Compose 文件 可以采用先打成镜像的方式,我这边采用的是本地 jar 包直接启动的方式 ...
  • 如果仅仅使用Docker原生当时来部署容器,则每个服务都要手动启动、维护、连接,对于大型项目部署或者项目迁移来说,效率十分低下,维护十分困难,因此需要一个帮助我们快速管理、编排多容器服务的工具----Docker ...
  • docker-compose一、docker compose概述二、安装docker-compose三、docker-compose.yaml文件四、部署示例docker-compose.yml部署mysqldocker...使用Docker Compose不再需要使用shell脚本来启动容器。 Compose 通过一个配
  • Docker Compose 的安装与运行 一. 前言 Docker 官网 :https://docs.docker.com/compose/ 1. 什么是 Docker Compose ...(3)在使用Docker Compose 时,只需要在一个配置文件中定义多个Docker容器...
  • 上文写到docker使用自定义网络的基本使用方法,本文讲解自定义网络的另一种方法,使用固定网段方法
  • 简介 安装 脚本 # 下载 sudo curl -L "https://hub.fastgit.org/docker/compose/releases/download/1.24.1/docker-compose-$...sudo chmod +x /usr/local/bin/docker-compose # 创建快捷方式 sudo ln -s /usr/local/b
  • 文章目录前言一、Docker Compose 概述(YML)1.Docker-Compose 配置常用字段2.Docker-Compose 常用命令3.Docker-Compose 文件结构二、Docker-Compose 安装三、Docker-Compose 部署 Nginx1. 准备依赖文件2. 编写配置...
  • Docker Compose network配置

    2021-01-26 14:28:16
    这里是对docker compose 网络配置的一些说明,详细的文档参考: https://docs.docker.com/compose/networking/ 1 default network 如果不显式指定,Compose会为每一个app设置一个default网络。每个service的...
  • 使用 Compose,我们可以创建一个 YAML 文件来定义服务,并且可以使用单个命令来启动或拆除所有内容.(参考文档) 使用 Compose的一大优势是您可以在文件中定义应用程序堆栈,将其保存在项目存储库的根目录下(现在受版本...
  • 1.Docker Compose简介 Dockerfile build run 手动操作,单个容器! 微服务,100个微服务,依赖关系。 Docker Compose 来轻松高效的管理容器,定义运行多个容器。 1.1 官方介绍 Compose is a tool for defining and ...
  • 服务器环境:CentOS 7.6 先决条件 Docker Compose 依赖 Docker Engine 进行任何有意义的工作,因此请确保根据您的设置,在本地或远程安装了 Docker Engine。 安装步骤参考: ...在 Docker Desktop for Mac 和 Windows ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,151
精华内容 20,860
关键字:

dockercompose使用