Docker-Compose 基础与实战,望这一篇就够了 | 原力计划

原标题:Docker-Compose 基础与实战,望这一篇就够了 | 原力计划

作者 | 飘渺Jam

责编 | 屠敏

出品 | CSDN 博客

what & why

Compose 项现在是 Docker 官方的开源项现在,负责实现对 Docker 容器集群的迅速编排。操纵前线介绍的Dockerfile吾们很容易定义一个单独的行使容器。然而在平时开发做事中,频繁会碰到必要众个容器相互互助来完善某项义务的情况。例如要实现一个 Web 项现在,除了 Web 服务容器自己,往往还必要再添上后端的数据库服务容器;再比如在分布式行使清淡包含若干个服务,每个服务清淡都会安放众个实例。倘若每个服务都要手动启停,那么效果之矮、维护量之大可想而知。这时候就必要一个工具能够管理一组相有关的的行使容器,这就是Docker Compose。

Compose有2个主要的概念:

项现在(Project): 由一组有关的行使容器构成的一个完善营业单元,在 docker-compose.yml 文件中定义。 服务(Service): 一个行使的容器,实际上能够包括若干运走相通镜像的容器实例。

docker compose 安置与卸载

安置

二进制包在线安置

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

sudo chmodx/usr/ local/bin/docker-compose

这个手段现在基本走不通,下载太慢了,不选举操纵。

二进制包离线安置

打开全文

从https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64下载对答的安置包,比如吾下载了Linux-x86_64的。

将下载益的安置包剪切到/usr/local/bin/docker-compose现在录下mv/app/download/docker-compose-Linux-x86_64/usr/local/bin/docker-compose

增补实走权限

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

pip安置

先安置益pip工具

#安置倚赖

yum -y installepel- release

#安置PIP

yum -y installpython-pip

#升级PIP

pip install--upgrade pip

验证pip 版本

[root@tymonitor bin] # pip --version

pip 8.1.2from/usr/lib/python2 .7/site-packages (python 2.7)

安置docker compose pip install -U docker-compose==1.25.0

验证docker compose版本

[root@tymonitor bin]# docker-compose--version

docker-composeversion1 .25.0, buildb42d419

安置补全插件

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

卸载

二进制卸载

rm /usr/ local/bin/docker-compose

pip卸载

pipuninstall docker-compose

docker compose 主要命令

命令选项

-f, --file FILE 指定操纵的 Compose 模板文件,默认为 docker-compose.yml,能够众次指定。 -p, --project-name NAME 指定项现在名称,默认将操纵所在现在录名称行为项现在名。 –x-networking 操纵 Docker 的可拔插网络后端特性 –x-network-driver DRIVER 指定网络后端的驱动,默认为 bridge –verbose 输出更众调试新闻。 -v, --version 打印版本并退出。

常用&主要命令

config 验证 Compose 文件格式是否准确,若准确则表现配置,若格式舛讹表现舛讹因为。 如: docker-compose -f skywalking.yml config 此命令不会实走真实的操作,而是表现 docker-compose 程序解析到的配置文件内容

images 列出 Compose 文件中包含的镜像。 如docker-compose -f skywalking.yml images

ps 列出项现在中现在的一切容器。 如docker-compose -f skywalking.yml ps

build 构建(重新构建)项现在中的服务容器。 如: docker-compose -f skywalking.yml build,清淡搭配自定义镜像,比如编写的Dockfile,功能相通于docker build . up 该命令相等富强(重点掌握),它将尝试自动完善包括构建镜像,(重新)创建服务,启动服务,并有关服务有关容器的一系列操作。 如docker-compose -f skywalking.yml up。 默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印一切容器的输出新闻,能够很方便进走调试。 倘若操纵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 秒)。 down 此命令停留用up命令所启动的容器并移除网络,如docker-compose -f skywalking.yml down stop 格式为 docker-compose stop [options] [SERVICE...] 停留已经处于运走状态的容器,但不删除它。 始末 docker-compose start 能够再次启动这些容器,倘若不指定service则默认停留一切的容器。 如docker-compose -f skywalking.yml stop elasticsearch 选项: -t, --timeout TIMEOUT 停留容器时候的超时(默认为 10 秒)。 start 启动已经存在的服务容器。 用法跟上面的stop刚益相逆,如docker-compose -f skywalking.yml start elasticsearch restart 重启项现在中的服务。 用法跟上面的stop,start相通 logs 格式为docker-compose logs [options] [SERVICE...] 查望服务容器的输出。 默认情况下,docker-compose 将对分别的服务输出操纵分别的颜色来区分。 能够始末 --no-color 来关闭颜色。 该命令在调试题目的时候相等有效。 如docker-compose -f skywalking.yml logs 查望团体的日志,docker-compose -f skywalking.yml logs elasticsearch 查望单独容器的日志

docker compose 模板文件

模板文件是操纵 Compose 的中央,涉及到的指令关键字也比较众。本文主要列出几个常见&主要的指令,其他指令行家能够自走百度。

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

version:'3'

services:

elasticsearch:

image:elasticsearch:6.8. 5

container_name:elasticsearch

restart:always

volumes:

- /app/skywalking/elasticsearch/data:/usr/share/elasticsearch/data:rw

- /app/skywalking/elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

- /app/skywalking/elasticsearch/conf/jvm.options:/usr/share/elasticsearch/config/jvm.options

- /app/skywalking/elasticsearch/logs:/usr/share/elasticsearch/logs:rw

environment:

- TZ=Asia/Shanghai

- xpack.monitoring.enabled= false

- xpack.watcher.enabled= false

ports:

- "9200:9200"

- "9300:9300"

仔细每个服务都必须始末 image 指令指定镜像或 build 指令(必要 Dockerfile)等来自动构建生成镜像。倘若操纵 build 指令,在 Dockerfile 中竖立的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中重复竖立。

常用&主要命令

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

image: apache/skywalking-oap-server:6.5.0

image: apache/skywalking-ui:6.5.0

ports 袒露端口新闻。 操纵宿主端口: 容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都能够,端口字符串都操纵引号包括首来的字符串格式。

ports:

-"3000"

-"8080 :8080"

-"127 .0.0.1:8001:8001"

volumes 数据卷所挂载路径竖立。 能够竖立为宿主机路径(HOST:CONTAINER)或者数据卷名称(VOLUME:CONTAINER),并且能够竖立访问模式 (HOST:CONTAINER:ro)。

volumes:

- /app/skywalking/elasticsearch/data:/usr/share/elasticsearch/data:rw

- conf/elasticsearch. yml:/usr/share/elasticsearch/config/elasticsearch.yml

version: "3"

services:

my_src:

image: mysql:8.0

volumes:

- mysql_data:/var/lib/mysql

volumes:

mysql_data:

ulimits 指定容器的 ulimits 局限值。 例如,指定最大进程数为 65535,指定文件句柄数为 20000(柔局限,行使能够随时修改,不及超过硬局限) 和 40000(编制硬局限,只能 root 用户挑高)。

ulimits:

nproc: 65535

nofile:

soft: 20000

hard: 40000

depends_on 解决容器的倚赖、启动先后的题目。 以下例子中会先启动 redis mysql 再启动 web

version: '3'

services:

web:

build: .

depends_on:

- db

- redis

redis:

image: redis

db:

image: mysql

environment 竖立环境变量。 你能够操纵数组或字典两栽格式。

environment:

SW_STORAGE: elasticsearch

SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200

environment:

- SW_STORAGE= elasticsearch

- SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200

restart 指定容器退出后的重启策略为首终重启。 该命令对保持服务首终运走相等有效,在生产环境中选举配置为 always 或者 unless-stopped。

restart: always

docker-compose 实战

最先吾必要选举两件事:

配置docker添速镜像 创建或修改/etc/docker/daemon.json

sudo mkdir-p /etc/docker

sudo tee /etc/docker/daemon.json <<- 'EOF'

{

"registry-mirrors": [

"https://hub-mirror.c.163.com",

"https://mirror.ccs.tencentyun.com",

"https://reg-mirror.qiniu.co"

]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

给你的ide工具装上docker插件

本次实战吾们以docker-compose安放skywalking为例。编写skywalking.yml,内容如下。

version: '3.3'

services:

elasticsearch:

image: docker.elastic.co/elasticsearch/elasticsearch:6.8.5

container_name: elasticsearch

restart: always

ports:

- 9200:9200

- 9300:9300

environment:

discovery.type: single-node

ulimits:

memlock:

soft: -1

hard: -1

oap:

image: skywalking/oap

container_name: oap

depends_on:

- elasticsearch

links:

- elasticsearch

restart: always

ports:

- 11800:11800

- 12800:12800

environment:

SW_STORAGE: elasticsearch

SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200

ui:

image: skywalking/ui

container_name: ui

depends_on:

- oap

links:

- oap

restart: always

ports:

- 8080:8080

environment:

SW_OAP_ADDRESS: oap:12800

安放完善后将其上传至服务器,实走docker-compose -f /app/skywalking.yml up -d即可。

声明:本文为CSDN博主「飘渺Jam」的原创文章。

想为博主点赞?

想要请问博主?

迅速 获取与博主直面疏导的手段吧!

posted @ 20-02-22 06:51 作者:admin  阅读:

Powered by 青斯集团有限公司 @2018 RSS地图 html地图

Copyright 站群系统 © 2013-2018 版权所有