自学内容网 自学内容网

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)!