Windows使用docker教程(六):docker compose启动容器

前端小王hs:
清华大学出版社《后台管理实践——Vue.js+Express.js》作者 
网络工程师 前端工程师 项目经理 阿里云社区博客专家 

email: 337674757@qq.com
vx: 文章最下方有vx链接
资料/交流群: vx备注docker

前文链接:
Windows使用docker教程(一):配置与安装docker
Windows使用docker教程(二):镜像与容器的介绍和使用
Windows使用docker教程(三):容器的基本使用命令
Windows使用docker教程(四):挂载MySQL并完成本地映射
Windows使用docker教程(五):内部网络及容器互通案例

compose是一个yaml格式的文件

compose的主要作用就是能够在不同的环境一键部署,配置多个容器,这也是docker的主要优势之一

dockerfile的区别在于dockerfile是定义单个容器的行为,非启动容器

什么是yaml

YAML(YAML Ain’t Markup Language)是一种简洁的、易于阅读的数据序列化格式,广泛用于配置文件和数据交换。它被设计成比XML和JSON更加人性化,特别适用于需要手动编辑配置文件的场景。YAML文件通常以.yaml.yml为扩展名。

docker就是通过读取yaml内的配置文件,执行启动容器的操作

一个简单的yaml文件如下所示:

person:
  name: 张三
  age: 25
  address:
    city: 广东梅州
    zip_code: '10001'

compose示例

一个简单的用于启动nginxyaml文件可能如下所示:

version: '3'
services:
  web:
    image: "nginx:latest"
    ports:
      - "80:80"
    volumes:
      - ./data:/usr/share/nginx/html
  db:
    image: "mysql:5.7"
    environment:
      MYSQL_ROOT_PASSWORD: example
volumes:
  data_volume:
networks:
  frontend:

下面会以上述文件进行解释

compose语法直通车

顶级元素

compose示例中,靠近左侧的称为顶级元素,一共包括6种:

  • name:项目名称
  • services:服务
  • version:版本
  • networks:网络
  • volumes:卷
  • configs:配置
  • secrets:密钥

注意,服务、网络、卷、配置、密钥都是复数,即带s

在官网种可查看顶级元素的写法,如下图所示:
顶级元素
顶级元素不是必须要写够这6个才行,一般只需名字、版本、服务、网络、卷即可,如上述的ngnixcompose

compose组成与命令对比

怎么去写compose呢,前面都是通过命令去启动容器的,其实,这两者基本上相同,以Windows使用docker教程(四):挂载MySQL并完成本地映射中启动MySQL命令为例:

docker run -d -p 3306:3306 -v C:\app\myconf:/etc/mysql/ --name firstmysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.19

对应的compose即为

name: mySQL
services:
  firstmysql:
    image: mysql:5.7.19
    container_name: firstmysql
    ports:
      - "3306:3306"
    volumes:
      - ./C:/app/myconf:/etc/mysql/
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    restart: unless-stopped

在启动命令中没有name,所以这个compose里的name其实可有可无

在文档中对元素的书写有非常明确的解释,如下图所示:
container_name

服务中,首先是服务的名字firstmysql(这里与container_name一致),然后image表示镜像的版本、ports表示端口号即对应的pvolumes是映射的卷即对应的-venvironment是环境即对应的-erestart的属性unless-stopped表示始终重启容器,除非容器是被手动停止的

服务可以和容器是一对一的,也可以是一对多的,服务定义了容器怎么被创建和管理

这里有个需要注意的是,volumes被写在了次级元素,之前提到volumes是顶级元素,因为这里的volumes是属于容器的操作,什么时候需要写顶级的volumes(包括类似networks之类的)呢?

需要对卷进行更详细的配置的时候、复用配置的时候,也就是以便在整个Compose文件中复用

volumes:
  data_volume:
    driver: local
services:
  web:
    image: "nginx:latest"
    volumes:
      - data_volume:/usr/share/nginx/html

在这段配置中命名了名为data_volume的卷,并挂载到了服务web的容器内的指定路径

来看一个复用volumes的例子,代码如下:


version: '3.8'

# 定义卷
volumes:
  shared_data:  # 命名卷定义
    driver: local  # 使用默认的本地驱动

services:
  nginx:
    image: "nginx:latest"
    ports:
      - "80:80"
    volumes:
      - shared_data:/usr/share/nginx/html  # 挂载共享卷到Nginx的web目录
    depends_on:
      - php-fpm

  php-fpm:
    image: "php:fpm"
    volumes:
      - shared_data:/var/www/html  # 挂载相同的共享卷到PHP-FPM的工作目录

depends_on表示先启动php-fpm后启动nginx,如果多个容器之间有涉及顺序,那么就需要使用depends_on

怎么写compose

要熟练使用compose,最好还是先熟悉文档,当然,有读者可能会觉得有AI一键生成即可,但是很多配置最起码需要先了解后,才知道什么环境下使用什么配置是符合的,AI不一定能完全输出符合场景的compose命令

启动compose

在桌面上新建一个compose.yaml的文件,并写入命令,如下图所示:
写入命令
cmd中进入桌面,并执行docker compose [-f 文件名] up -d,如下图所示:
桌面
查看docker ps,可以看到容器正确运行了,如下图所示:
docker ps

Windows使用docker教程(七):dockefile制作镜像

欢迎关注csdn前端领域博主: 前端小王hs,喜欢可以点个赞!您的支持是我不断更新的动力!🔥🔥🔥

前端小王hs:
清华大学出版社《后台管理实践——Vue.js+Express.js》作者 
网络工程师 前端工程师 项目经理 阿里云社区博客专家 

email: 337674757@qq.com
vx: 文章最下方有vx链接
资料/交流群: vx备注docker
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端小王hs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值