Docker-Compose基础与实战,看这一篇就够了

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

docker-compose version 1.25.0, build b42d419

安装补全插件

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卸载

pip uninstall 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 程序解析到的配置文件内容:

image

  • images

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

image

  • ps

列出项目中目前的所有容器。如docker-compose -f skywalking.yml ps

image

  • build

构建(重新构建)项目中的服务容器。如:docker-compose -f skywalking.yml build,一般搭配自定义镜像,比如编写的Dockfile,功能类似于docker build .

  • up

该命令十分强大(重点掌握),它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。如docker-compose -f skywalking.yml up。默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。

image

如果使用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插件

image

本次实战我们以docker-compose部署skywalking为例。编写skywalking.yml,内容如下。

version: ‘3.3’
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

[外链图片转存中…(img-DglatDuy-1713320548185)]

小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

[外链图片转存中…(img-e2JdRzhq-1713320548186)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值