Docker学习笔记 - 使用配置脚本来启动image

Docker从入门到精通相关文章连接

  1. 基本概念
  2. 常用命令
  3. 使用docker compose启动脚本
  4. 创建自己的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
  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

编程小白的逆袭日记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值