澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

Compose学习记录,Compose学习应用

回去目录

转发请注解出处:Docker-Compose学习运用

Docker Compose

Docker Compose是法定开源的二个Docker容器编排软件,定位于将多少个容器编排在起义行程一组服务。

官方手册地址:https://docs.docker.com/compose/overview/

docker-compose是用来在Docker中定义和运转复杂应用的工具,比方在一个yum文件里定义三个容器,只用一行命令就足以让漫天就绪并运维。

图片 1docker

主要概念

使用docker compose大家得以在Run的层面消除许多其实难题,如:通过创制compose(基于YUML语法)文件,在那么些文件上边描述应用的架构,如选用什么镜像、数据卷、网络、绑定服务端口等等,然后再用一条命令就足以管理全数的劳务(网址1,服务1,监察和控制1)。

Docker Compose是七个用来定义和平运动行复杂应用的Docker工具。二个应用Docker容器的利用,平常由四个容器组成。使用Docker Compose不再须要接纳shell脚本来运维容器。Compose 通过二个布署文件来保管四个Docker容器,在布局文件中,全体的容器通过services来定义,然后选用docker-compose脚本来运营,停止和重启应用,和选拔中的服务以至全部信赖服务的器皿,特别符合组合使用八个容器实行开采的场景。

项目

经过compose生成的一组服务大家称为项目,项目平日由七个容器组成,分享生命周期。

安装compose

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

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

翻开是不是安装成功,看看版本

图片 2

法定文书档案 - Docker Compose

安装

// 直接通过下载compose的执行文件即可
sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

// 下载完成后,进行授权即可使用
sudo chmod  x /usr/local/bin/docker-compose

// 查看一下版本,输出以下内容则说明安装成功
docker-compose version 1.18.0, build 8dd22a9
docker-py version: 2.6.1
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t  3 May 2016

运行yml文件

vs2017相助我们转换了Dockerfile和compose实施方案,我们可以把任何技术方案复制到linux上,然后去恢复生机,编写翻译,发布,运转它们!

图片 3

VS帮大家转移的代码,达成了对缓和方案的包苏醒和透露等职能

version: '2'

services:
  ci-build:
    image: microsoft/aspnetcore-build:1.0-1.1
    volumes:
      - .:/src
    working_dir: /src
    command: /bin/bash -c "dotnet restore ./testCore.sln && dotnet publish ./testCore.sln -c Release -o ./obj/Docker/publish"

大家来运作贰个docker-compose.yml文件

cd 你的实施方案目录 

docker-compose kill #删除正在运营的服务

docker-compose rm #删除服务的镜像

docker-compose build #生成新的镜像

docker-compose up #运维容器

图片 4

 

 

自此会运维我们的器皿!

归来目录

 

docker-compose安装能够参照官方文书档案:Install Docker Compose

使用

Docker Desktop for MacDocker Toolbox 已购并了docker-compose, 所以只要安装了docker是无需安装的,直接就能够用。

首先来四个简约的例证

// 创建一个新目录
cd /var/local

// 创建compose的目录
mkdir tomcat_compose

// 创建compose的生成文件
touch docker-compose.yml

// 进入docker-compose.yml,写入以下内容
version: '3'
services:
  web:
    image: "tomcat"
    ports:
      - "33338:8080"

// 保存文件后,执行docker-compose up运行案例
docker-compose up

// 然后docker-compose就会开始构建你的项目了
// 构建输出...

// 构建完成后,访问33338端口可以看到输出信息

能够看的出来,其实docker-compose是另一种方法的docker容器创设方式。

在Linux系统中,能够由此源码来设置docker-compose

外人给的三个例证

  1. 创办二个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! 该页面已被访问 {} 次。n'.format(count)

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)
  1. 创造一个Dockerfile文件
FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]
  1. 成立三个docker-compose.yml文件
version: '3' // 注意,这里的3是指docker-compose识别的yml格式,一般用3就可以了
services:

  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - redis

  redis:
    image: "redis:alpine"

留意,yml文件之中的缩进为2个空格

  1. 执行docker-compose up构建
// 构建输出
  1. 营造完毕后,访谈 ip:5000,再次来到 Hello World! 该页面已被访谈 N 次。

从docker-compose.yml的协会上看见,这里用了五个镜像来贯彻那组服务,应用软件中调用了redis的自增命令来落到实处计数。

==别的有三个并未有谈到的点是,compose会把那三个容器放置到二个互联网中,所以web端是能够要求到redis的。==

// 查询一下生成的两个容器
docker ps | grep compose01

// 输出
ID              ...    NAMES
82731293d9de    ...    compose01_web_1
8d9d8b80de9f    ...    compose01_redis_1

// 查询一下先有docker网络
docker network ls | grep compose01 // 这个compose01是我构建时的目录

// 输出
1f38316baee8    compose01_default    bridge    local

// 查询web的网络
docker inspect compose01_web_1

// 输出
...
    "Networks": {
        "compose01_default": {
...

// 查询redis的网络
docker inspect compose01_redis_1

// 输出
...
    "Networks": {
        "compose01_default": {
...

经过看出两容器使用的网络一样,验证方面包车型地铁结论。

  1. 从github下载最新版docker-compose

wordpress案例

创立wordpress的目录,然后创造docker-compose.yml文件,运营docker-compose up命令,然后访谈就足以看出wordpress的装置页面了。

version: "3"
services:

   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:

去除项目

在compose的营造目录下直接运转 docker-compose rm就可以生成的等级次序

sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$-$" -o /usr/local/bin/docker-compose

compose命令详解

docker-compose的援助了docker的大多数指令,其应用办法也大同小异,具体能够看这里。https://yeasy.gitbooks.io/docker_practice/content/compose/commands.html#rm

  1. 给docker-compose赋予可实践权限

compose模板命令详解

这里指的是写在yml里面包车型大巴指令,详见:https://yeasy.gitbooks.io/docker_practice/content/compose/compose_file.html

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

终极能够经过以下命令来证实是不是安装成功:

docker-compose --version

docker-compose 文件命名以.yml.yaml为后缀。

下边先欣赏一下合盖尔语书档案中的叁个示范:

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部分,version, services, networks, volumes, 其中services中剧情最长,下边将顺序做个简要介绍

version是compose的本子,下表是compose版本与docker版本对照表:

Compose file format Docker Engine release
3.7 18.06.0
3.6 18.02.0
3.5 17.12.0
3.4 17.09.0
3.3 17.06.0
3.2 17.04.0
3.1 1.13.1
3.0 1.13.0
2.4 17.12.0
2.3 17.06.0
2.2 1.13.0
2.1 1.12.0
2.0 1.10.0
1.0 1.9.1.

services是用来布署定义每一个容器运维参数,每一种service便是四个器皿,services下拔尖配备正是服务名称,举个例子地点示例中的redis, db等。

3.2.1. image

image是钦定服务的镜像名称或镜像 ID。借使镜像在本土空头支票,Compose 将会尝试拉取那些镜像。

举个例子说上边那么些格式都以足以的:

image: redisimage: ubuntu:14.04image: tutum/influxdbimage: example-registry.com:4000/postgresqlimage: a4bc65fd

3.2.2. build

劳动除了这一个之外能够依照钦命的镜像,还能依据一份 Dockerfile,在选取 up 运营之时推行营造职分,这几个创设标签正是 build,它能够内定 Dockerfile 所在文书夹的路线。Compose 将会利用它自动构建那么些镜像,然后采取那一个镜像运营服务容器。

build: /path/to/build/dir

也能够是相对路径,只要上下文鲜明就足以读取到 Dockerfile。

build: ./dir

设定上下文根目录,然后以该目录为准内定 Dockerfile。

build: context: ../ dockerfile: path/of/Dockerfile

只顾 build 都以贰个索引,假诺你要内定 Dockerfile 文件必要在 build 标签的子级标签中应用 dockerfile 标签钦命,如上边的事例。如若你况兼钦命了 image 和 build 三个标签,那么 Compose 会塑造镜像何况把镜像命名称为 image 前面包车型地铁十分名字。

既是可以在 docker-compose.yml 中定义创设任务,那么势必少不了 arg 这么些标签,就像是 Dockerfile 中的 A福特ExplorerG 指令,它可以在创设进度中钦命碰着变量,不过在营形成功后撤回,在 docker-compose.yml 文件中也支撑那样的写法:

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

上边这种写法也是帮助的,日常的话下边包车型大巴写法更相符阅读。

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

与 ENV 区别的是,AQashqaiG 是同意空值的。比方:

args: - buildno - password

诸有此类营造进度可以向它们赋值。

小心:YAML 的布尔值(true, false, yes, no, on, off)供给求接纳引号引起来(单引号、双引号均可),不然会当成字符串深入分析。

3.2.3. command

使用 command 能够覆盖容器运营后暗许实行的吩咐。

command: bundle exec thin -p 3000

也能够写成类似 Dockerfile 中的格式:

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

3.2.4. container_name

Compose 的器皿名称格式是:<项目名称><服务名称><序号>纵然能够自定义项目名称、服务名称,可是一旦您想全盘调控容器的命名,能够运用那么些标签钦赐:

container_name: app

如此这般容器的名字就钦命为 app 了。

3.2.5. depends_on

在行使 Compose 时,最大的低价便是少打运行命令,可是通常品种容器运转的逐个是有须要的,假若直接从上到下运行容器,必然会因为容器重视难题而运转失利。比如在没运维数据水库蓄水体积器的时候运维了利用容器,那时候应用容器会因为找不到数据库而退出,为了制止这种情景我们须要加入一个标签,就是depends_on,这些标签化解了容器的注重、运营程序的难点。举个例子下边容器会先启动redis 和 db 五个服务,最终才开动 web 服务:

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

注意的是,私下认可境况下利用 docker-compose up web 那样的议程运转 web 服务时,也会运维 redis 和 db 七个劳务,因为在布局文件中定义了借助关系。

3.2.6.dns

和 --dns 参数同样用途,格式如下:

dns: 8.8.8.8

也得以是一个列表:

dns: - 8.8.8.8 - 9.9.9.9

此外 dns_search 的配置也就如:

dns_search: example.comdns_search: - dc1.example.com - dc2.example.com

3.2.7. environment

和 arg 有几分类似,那么些标签的效果是设置镜像变量,它能够保留变量到镜像里面,也正是说运营的器皿也会蕴藏那些变量设置,那是与 arg 最大的比不上。日常 arg 标签的变量仅用在塑造进度中。而 environment 和 Dockerfile 中的 ENV 指令同样会把变量一向保存在镜像、容器中,类似 docker run -e 的机能。

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

3.2.8. extra_hosts

增多主机名的价签,正是往/etc/hosts文件中增多一些记下,与Docker client的--add-host类似:

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

开端今后查看容器内部hosts:

162.242.195.82 somehost50.31.209.229 otherhost

3.2.9. labels

向容器添欧元数据,和Dockerfile的LABEL指令二个意味,格式如下:

labels: com.example.description: "Accounting webapp" com.example.department: "Finance" com.example.label-with-empty-value: ""labels: - "com.example.description=Accounting webapp" - "com.example.department=Finance" - "com.example.label-with-empty-value"

3.2.10 links

还记得下面的depends_on吧,这一个标签化解的是开发银行顺序难题,这些标签消除的是容器连接难点,与Docker client的--link一样效果,会连接到其他服务中的容器。格式如下:

links: - db - db:database - redis

行使的别新秀会自行在劳务容器中的/etc/hosts里创造。比如:

172.12.2.186 db172.12.2.186 database172.12.2.187 redis

对应的景况变量也将被成立。

3.2.11 ports

辉映端口的竹签。使用HOST:CONTAINETucson格式可能只是钦赐容器的端口,宿主机缘随机映射端口。

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

在乎:当使用HOST:CONTAINE路虎极光格式来映射端口时,借令你使用的容器端口小于60您可能会赢得错误得结果,因为YAML将会分析xx:yy这种数字格式为60进制。所以提议采纳字符串格式。

3.2.12. 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

一旦您不使用宿主机的渠道,你能够钦赐一个volume_driver。

volume_driver: mydriver

3.2.13. networks

加盟内定网络,格式如下:

services: some-service: networks: - some-network - other-network

至于这些标签还会有贰个专门的子标签aliases,那是三个用来设置服务别称的价签,举例:

services: some-service: networks: some-network: aliases: - alias1 - alias3 other-network: aliases: - alias2

平等的服务能够在分裂的网络有例外的小名。

3.2.14. network_mode

互联网情势,与Docker client的--net参数近似,只是相对多了贰个service:[service name] 的格式。例如:

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

能够钦命使用劳务依然容器的互连网。

docker-compose常用命令能够通过以下命令大致看一下:

docker-compose --help

结果如下:

Define and run multi-container applications with Docker.Usage: docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] docker-compose -h|--helpOptions: -f, --file FILE Specify an alternate compose file (default: docker-compose.yml) -p, --project-name NAME Specify an alternate project name (default: directory name) --verbose Show more output --log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL) --no-ansi Do not print ANSI control characters -v, --version Print version and exit -H, --host HOST Daemon socket to connect to --tls Use TLS; implied by --tlsverify --tlscacert CA_PATH Trust certs signed only by this CA --tlscert CLIENT_CERT_PATH Path to TLS certificate file --tlskey TLS_KEY_PATH Path to TLS key file --tlsverify Use TLS and verify the remote --skip-hostname-check Don't check the daemon's hostname against the name specified in the client certificate --project-directory PATH Specify an alternate working directory (default: the path of the Compose file) --compatibility If set, Compose will attempt to convert deploy keys in v3 files to their non-Swarm equivalentCommands: build Build or rebuild services bundle Generate a Docker bundle from the Compose file config Validate and view the Compose file create Create services down Stop and remove containers, networks, images, and volumes events Receive real time events from containers exec Execute a command in a running container help Get help on a command images List images kill Kill containers logs View output from containers pause Pause services port Print the public port for a port binding ps List containers pull Pull service images push Push service images restart Restart services rm Remove stopped containers run Run a one-off command scale Set number of containers for a service start Start services stop Stop services top Display the running processes unpause Unpause services up Create and start containers version Show the Docker-Compose version information

下边会指向有些相比常用的指令举办简易介绍

当修改dockerfile或许docker-compose时,运维docker-compose build 重新创设镜像。 生成镜像后,可利用docker-compose up运维

呈现全部容器消息,暗中认可显示name、command、state、ports。

强制甘休某些正在运行的劳动

打字与印刷服务日志

语法:

logs [options] [SERVICE...]

参数:

--no-color Produce monochrome output.-f, --follow Follow log output-t, --timestamps Show timestamps--tail="all" Number of lines to show from the end of the logs for each container.

营造,创制,运转,链接一个劳务相关的器皿。链接的劳动都将会运转,除非他们已经运营。暗中认可意况, docker-compose up 将会构成全体容器的出口,并且脱离时,全部容器将会结束。假如使用 docker-compose up -d ,将会在后台运转并运维具备的容器。

私下认可情形,假使该服务的器皿已经存在, docker-compose up 将会终止并尝试再一次创立他们(保持利用 volumes-from 挂载的卷),以确认保障docker-compose.yml的更换生效。假如你不想容器被结束同等对待新成立,能够选用 docker-compose up --no-recreate。借使供给的话,那样将会运维已经甘休的器皿。

语法:

up [options] [--scale SERVICE=NUM...] [SERVICE...]

参数:

 -d 后台运行,输出容器的名字. Incompatible with --abort-on-container-exit. --no-color 单色输出. --no-deps 不启动link服务. --force-recreate 强制重新创建compose服务,即使没有任何改变。重新创建后启动容器 Incompatible with --no-recreate. --no-recreate 如果容器已经存在,不重新创建. Incompatible with --force-recreate. --no-build 不创建重启,即使镜像不存在. --build 重新创建镜像,然后生成容器. --abort-on-container-exit 任何容器停止,自动停止所有容器. Incompatible with -d. -t, --timeout TIMEOUT 超时时间. (default: 10) --remove-orphans 移除compose文件中未定义服务的容器

为服务创制容器.只是单纯的create,还索要动用start运维compose

语法:

create [options] [SERVICE...]

参数

 --force-recreate 重新创建容器,即使他的配置和镜像没有改变,不兼容--no-recreate参数 --no-recreate 如果容器已经存在,不需要重新创建. 不兼容--force-recreate参数 --no-build 不创建镜像,即使缺失. --build 创建容器前,生成镜像

终止和删除容器、网络、卷、镜像,这一个内容是透过docker-compose up指令创制的. 暗中认可值删除容器网络,能够经过点名 rmi volumes参数删除镜像和卷。

语法:

down [options]

Compose学习记录,Compose学习应用。参数:

--rmi type 删除镜像,类型必须是: 'all': 删除compose文件中定义的所以镜像. 'local': 删除镜像名为空的镜像-v, --volumes 删除卷 attached to containers.--remove-orphans Remove containers for services not defined in the Compose file

运营二个早就存在的服务容器。

停止四个已经运营的容器,但不删除它。通过 docker-compose start能够另行运行这么些器皿。

停顿容器服务,docker-compose pause 暂停全部服务。docker-compose pause web,暂停web服务的器皿。

卷土重来容器服务,docker-compose unpause 恢复全数服务,docker-compose unpause web,恢复生机web服务的器皿。

重启docker-compose.yml中定义的具备的已告一段落的和正在周转的服务。

除去已经终止的器皿,假若服务在运作,须要先docker-compose stop 结束容器,暗许情状下,已挂载的volume中的数据不会被去除,能够选取docker volume ls查看全体的volume景况。全数在容器中未有在volume中的数据将被删去。

在二个劳动上施行二个命令.

语法:

run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] [-l KEY=VALUE...] SERVICE [COMMAND] [ARGS...]

参数:

-d 后台运行,输出容器名.-e KEY=VAL 设置环境变量参数,可以使用多次-u, --user="" 指定运行的用户--no-deps 不启动link服务,只启动run的服务.--rm 运行后删除容器,后台运行模式除外.-p, --publish=[] 开放端口--service-ports compose文件中配置什么端口,就映射什么端口.-T 禁用TTY.-w, --workdir="" 设置工作目录

例如:

docker-compose run ubuntu ping docker.com

安装同二个劳动运维的容器个数。通过 service=num 的参数来设置数量。

法定文书档案 - Docker Composedocker-compose.yml 配置文件编写制定详解docker-compose:基本语法docker-compose命令详解

转发请申明出处:Docker-Compose学习运用

本文由澳门新浦京娱乐场网站发布于澳门新浦京娱乐场网站,转载请注明出处:Compose学习记录,Compose学习应用