Docker学习笔记 - 使用配置脚本来启动image
1. 为什么要使用配置脚本
之前有讲到在启动一个image的时候有很多参数需要输入,比如:
docker run -d /
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=password \
-v mongo_data:/data/db
--net mongo-network \
--name mongodb \
mongo
要启动一个mongo db的image需要输入一堆的参数做初始设置。这样每次启动时,都需要正确输入这条命令是非常麻烦,且不利于管理的。其次,在实际的软件发布中,我们往往需要载入一系列的image,也就是多个这样复杂的命令行。试想,如果有管理员不小心输错了一个参数,比如初始密码,那么这个应用发布可能就会出现错误。
于是,我们需要引入启动配置脚本,将载入image的命令和相应的启动参数写成脚本管理起来,一个脚本可以包含一次发布需要的所有image。每次发布时,只要使用同一个脚本,就能保正正确启动。此外,对启动参数的修改也可以通过对脚本的修改和版本管理进行管控。运行这种脚本被称为docker compose。
2. docker compose的脚本格式
让我们来看使用docker compose脚本该如何实现上面这个启动命令。
#Filename: Mongo_docker_compose.yml
version: '3.9'
services:
mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: password
ports:
- 27017:27017
volume:
- mongo_data:/data/db
Volume:
mongo_data:
driver:local
第一部分,version是和Docker Compose相对应的的版本。每个版本都提供了不同的特性和兼容性。在编写docker-compose.yml文件时,指定version与安装的Docker Compose版本相匹配,以避免兼容性问题。
第二部分,service是申明需要载入的image的主题。对于每个image,指定相应的启动参数。常用的参数如下:
- image: [image name]
指定使用的image名字 - ports:
- [Host port]:[Container port]
将container的端口映射到Host的真实端口,对于数据库image,必须要做这一步才能被访问到。对于web应用,开发相应的端口,才能被访问到。 - environment: [env name]:[value]
不同的image的环境变量并不相同,在hub.docker.com上下载image,可以在该image主页查看环境变量的定义。(参加本系列第一篇) - volume:
- [volume name]:[path in image]
或
- [path in host]:[path in image]
或
- [path in host]
在我们每次载入一个image时,如果不指定volume,那么停止container时对这个image的所有操作就会丢失。比如你载入一个数据库image,并且插入了一些数据,一旦停止这些数据就会丢失。为了实现数据持久性,我们引入了volume来指定存储数据的位置,并且在每次启动时都从同一地方载入这些数据,这样数据就不会丢失了。
指定volume的三种方式: - Host Volume :指定在host上的存储位置和在image里的目录的对应关系,称为主机卷
- [path in host]:[path in image] - Anonymous Volume :指定在image里需要被映射的目录,但不指定在host上的存储位置,使用docker的默认设置,称为匿名卷
- [path in image] - Name Volume:指定在image里需要被映射的目录,使用docker的默认存储位置, 但给该存储的数据命名,称为命名卷,推荐使用。
- [volume name]:[path in image]
如有多个image需要加载,并列往下写即可。
# Use postgres/example user/password credentials
version: '3.1'
services:
app:
image: examapp
ports:
- "8001:8000"
db:
image: postgres
restart: always
volumes:
- postgre_data:/var/lib/postgresql/data
port:
- 5432:5432
environment:
POSTGRES_PASSWORD: example
adminer:
image: adminer
restart: always
ports:
- 8080:8080
Volumes:
postgre_data:
- driver:local
第三部分,定义volume
在上述服务中用的volume需要在脚本中定义加载。
每一个volume需要给出volume名字,需要和service中的一致,也可以指定volume的参数。比如 driver, size等。
3. 运行docker compose脚本
运行以下命令,如果你的启动脚本存在错误,就会看到报错信息。如果一切正常,image就会被载入container运行。
docker-compose -f examapp_postgre.yml up
原文地址:https://blog.csdn.net/deecheanW/article/details/136891725
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!