docker-compose模板文件、命令的使用
创始人
2024-01-30 08:19:17

docker-compose官网

一、docker-compose的命令

在这里插入图片描述

1、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 -d # -d是后台启动

在这里插入图片描述

2、down(停止)

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

#必须执行该命令的相同路径下有docker-compose.yml文件
docker-compose down

在这里插入图片描述

3、exec(进入容器)

进入指定的容器。

docker-compose exec rabbitmq bash

在这里插入图片描述

4、ps(列出项目中目前的所有容器)

格式为 docker-compose ps [options] [SERVICE…]。
列出项目中目前的所有容器。
选项:
-q: 只打印容器的 ID 信息。

docker-compose ps

在这里插入图片描述

5、restart(重启项目中的服务)

格式为 docker-compose restart [options] [SERVICE…]。
选项:
-t: --timeout TIMEOUT 指定重启前停止容器的超时(默认为 10 秒)。

docker-compose restart 

在这里插入图片描述

6、rm(删除所有(停止状态的)服务容器)

格式为 docker-compose rm [options] [SERVICE…]。
推荐先执行 docker-compose stop 命令来停止容器。
选项:
-f: --force 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。
-v: 删除容器所挂载的数据卷。

docker-compose rm -f

在这里插入图片描述

7、start(启动已经存在的服务容器)

格式为 docker-compose start [SERVICE…]。

docker-compose start 

在这里插入图片描述

8、stop(停止已经处于运行状态的容器,但不删除它)

格式为 docker-compose stop [options] [SERVICE…]。
选项:
-t: --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。

docker-compose stop -t1000

在这里插入图片描述

9、top(查看各个服务容器内运行的进程)

docker-compose top

在这里插入图片描述

10、images(所有镜像)

docker-compose images

在这里插入图片描述

二、docker-compose模板文件

官网详细模板文件介绍

1、模板文件是使用 Compose 的核心,这里面大部分指令跟 docker run 相关参数的含义都是类似的。
2、默认的模板文件名称为docker-compose.yml格式为yml格式
3、每个指令都必须通过image指令指定镜像或者build(需要Dockerfile)指令来自动构建生成镜像

1、build(指定镜像、并构建)

  • 指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
version: "3.0"
services:demo: #项目idbuild: #启动服务时,先将build中指定的dockerfile打包成镜像,再运行该镜像context: jenkins-demo #指定上下文目录dockerfile所在目录[相对、绝对路径都可以]dockerfile:  Dockerfile #文件名称args: #指定构建镜像时候的变量buildno: 1 container_name: jenkins-demoports:- "8881:8881"

2、command(覆盖容器启动后命令)

  • 覆盖容器启动后的默认执行命令
version: "3.0"
services:redis:container_name: redisimage: redis:7.0.5-alpineports:- "6379:6379"command: "redis-server --appendonly yes" #run镜像之后,appendonly覆盖容器内的默认命令

3、container_name(指定容器名称)

  • 指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式。
version: "3.0"
services:redis:#container_name: rediscontainer_name: docker-web-container

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

4、depends_on(容器的依赖、启动先后的问题)

  • 解决容器的依赖、启动先后的问题。以下例子中会先启动 redis db 再启动 web
version: '3'
services:web:image:  ruoyidepends_on:- db- redisredis:image: redisdb:image: postgres

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

5、env_file(文件中获取环境变量)

  • 从文件中获取环境变量,可以为单独的文件路径或列表
version: "3.0"
services:mysql:container_name: mysql8image: mysql:8.0.29ports:- "3306:3306"#- MYSQL_ROOT_PASSWORD=root #指定值env_file: #替换environment的配置[直接给该文件、不会泄露密码等信息]- mysql.env #此处为相对路径,也可以写绝对路径[里面的格式key=value,并且支持#的注释]- ./common.env- ./apps/web.env- /opt/secrets.env
  • mysql.env文件[支持#开头的注释行]
#root的密码
MYSQL_ROOT_PASSWORD=root

6、environment(设置环境变量)

  • 设置环境变量。你可以使用数组或字典两种格式。
version: "3.0"
services:mysql:container_name: mysql8image: mysql:8.0.29ports:- "3306:3306"environment: #环境变量[此处写得太过敏感,给文件容易被别人知道]- MYSQL_ROOT_PASSWORD=root #指定值- MYSQL_ROOT_PASSWORD: password- TZ: Asia/Shanghai

如果变量名称或者值中用到 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

7、healthcheck(检查容器是否健康运行)

  • 通过命令检查容器是否健康运行。
version: "3.0"
services:tomcat8082:container_name: tomcat02image: tomcat:8.0.15-jre7 #镜像版本ports:- "8082:8080"healthcheck:test: [ "CMD", "curl", "-f", "http://localhost" ]interval: 1m30stimeout: 10sretries: 3

8、image(指定镜像名称或镜像 ID)

  • 指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
version: "3.0"
services:tomcat8082:container_name: tomcat02image: ubuntu #image: orchardup/postgresql#image: a4bc65fd

9、networks(配置容器连接的网络)

  • 配置容器连接的网络。
version: "3.0"
services:tomcat8082:container_name: tomcat02image: tomcat:8.0.15-jre7 #镜像版本ports:- "8082:8080"networks: #代表当前服务使用那个网络桥- hello
networks: #定义服务使用到的网桥hello: #定义上面的服务用到的网桥名称, 默认创建的就是bridgeexternal:true #使用外部指定网桥,注意,网桥必须存在[docker network create -d bridge hello]

10、ports(暴露端口信息)

  • 暴露端口信息。使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
version: "3.0"
services:tomcat8082:container_name: tomcat02image: tomcat:8.0.15-jre7 #镜像版本ports:- "8082:8080"

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

11、sysctls(配置容器内核参数)

  • 配置容器内核参数
version: "3.0"
services:tomcat8080: #服务idcontainer_name: tomcat01 #相当于run  --nameimage: tomcat:8.0.15-jre7 #镜像版本(没有的话会自动拉取) 相当于run imageports: #完成host与容器的端口映射 相当于run p- "8080:8080" #(防止出错,官方建议用""包起来)volumes: #完成宿主机与容器中目录数据卷的映射(可以挂在多个) 相当于run -v#- /usr/local/software/tomcat/webapps:/usr/local/tomcat/webapps #使用自定义路径映射- tomcatWebapps:/usr/local/tomcat/webappsnetworks: #代表当前服务使用那个网络桥 相当于run network- hellosysctls:net.core.somaxconn: 1024net.ipv4.tcp_syncookies: 0#sysctls:#- net.core.somaxconn=1024#- net.ipv4.tcp_syncookies=0

12、ulimits(指定容器的 ulimits 限制值)

  • 指定容器的 ulimits 限制值。

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

version: "3.0"
services:tomcat8080: #服务idcontainer_name: tomcat01 #相当于run  --nameimage: tomcat:8.0.15-jre7 #镜像版本(没有的话会自动拉取) 相当于run imageports: #完成host与容器的端口映射 相当于run p- "8080:8080" #(防止出错,官方建议用""包起来)ulimits:nproc: 65535nofile:soft: 20000hard: 40000

13、volumes(数据卷所挂载路径设置)

  • 数据卷所挂载路径设置。可以设置为宿主机路径(HOST:CONTAINER)或者数据卷名称(VOLUME:CONTAINER),并且可以设置访问模式 (HOST:CONTAINER:ro)。
version: "3.0"
services:tomcat8080: #服务idcontainer_name: tomcat01 #相当于run  --nameimage: tomcat:8.0.15-jre7 #镜像版本(没有的话会自动拉取) 相当于run imageports: #完成host与容器的端口映射 相当于run p- "8080:8080" #(防止出错,官方建议用""包起来)volumes: #完成宿主机与容器中目录数据卷的映射(可以挂在多个) 相当于run -v#- /usr/local/software/tomcat/webapps:/usr/local/tomcat/webapps #使用自定义路径映射- tomcatWebapps:/usr/local/tomcat/webapps #使用声明数据卷的方式
#声明数据卷
volumes: #声明上面服务所使用的自动的卷名tomcatWebapps: #声明指定的卷名 compose会自动创建改卷明,但是会在之前加入项目名external: #使用自定义的卷名false #true确定使用自定义卷名 注意,一旦使用外部自定义卷名,启动服务之前必须手动创建      

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
最安全的匿名举报方式 匿名12... 来源:中安在线8月9日,河北邢台小伙张钊(化名)在河北政务服务网12345平台举报楼上邻居涉嫌非法开...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
中国光棍有多少人 2020年9... 我国是世界上人口最多的国家,庞大的人口基数为我国的发展带来了许多的益处。但是同时,我国也是出生人口性...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...