前端小王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示例
一个简单的用于启动nginx
的yaml
文件可能如下所示:
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
示例中,靠近左侧的称为顶级元素,一共包括6种:
- name:项目名称
- services:服务
- version:版本
- networks:网络
- volumes:卷
- configs:配置
- secrets:密钥
注意,服务、网络、卷、配置、密钥都是复数,即带s
在官网种可查看顶级元素的写法,如下图所示:
顶级元素不是必须要写够这6个才行,一般只需名字、版本、服务、网络、卷即可,如上述的ngnix
的compose
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
其实可有可无
在文档中对元素的书写有非常明确的解释,如下图所示:
服务中,首先是服务的名字firstmysql
(这里与container_name
一致),然后image
表示镜像的版本、ports
表示端口号即对应的p
、volumes
是映射的卷即对应的-v
、environment
是环境即对应的-e
,restart
的属性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
,可以看到容器正确运行了,如下图所示:
Windows使用docker教程(七):dockefile制作镜像
欢迎关注csdn前端领域博主: 前端小王hs,喜欢可以点个赞!您的支持是我不断更新的动力!🔥🔥🔥
前端小王hs:
清华大学出版社《后台管理实践——Vue.js+Express.js》作者
网络工程师 前端工程师 项目经理 阿里云社区博客专家
email: 337674757@qq.com
vx: 文章最下方有vx链接
资料/交流群: vx备注docker