当前位置: 首页 > news >正文

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: mongorestart: alwaysenvironment:MONGO_INITDB_ROOT_USERNAME: adminMONGO_INITDB_ROOT_PASSWORD: passwordports:- 27017:27017volume: - 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: examappports:- "8001:8000"		db:image: postgresrestart: always    volumes:  - postgre_data:/var/lib/postgresql/dataport:- 5432:5432environment:POSTGRES_PASSWORD: exampleadminer:image: adminerrestart: alwaysports:- 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

相关文章:

  • golang常用库之-golang常用库之-ladon包 | 基于策略的访问控制
  • docker入门(十)—— docker-compose详解
  • stm32定时器
  • scDEA一键汇总12种单细胞差异分析方法 DESeq2、edgeR、MAST、monocle、scDD、Wilcoxon
  • K8S Storage
  • PYTorch训练和推理 指定GPU
  • docker swarm 集群创建
  • Go语言学习04~05 函数和面向对象编程
  • c++算法学习笔记 (15) 质数
  • 新手如何入门电子电路
  • 我的VSCode配置和常见插件
  • 探秘开源隐语:架构深度剖析与隐私计算技术之旅
  • 解读 Xend Finance:向 RWA 叙事拓展,构建更具包容性的 DeFi 体系
  • c++类型转换(持续更新)
  • 七仔充电桩平台 二轮电动自行车 四轮汽车 云快充1.5 云快充1.6
  • ES学习笔记(12)--Symbol
  • JavaScript HTML DOM
  • Javascript设计模式学习之Observer(观察者)模式
  • Java知识点总结(JavaIO-打印流)
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • maya建模与骨骼动画快速实现人工鱼
  • MySQL QA
  • passportjs 源码分析
  • React-redux的原理以及使用
  • underscore源码剖析之整体架构
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 构建二叉树进行数值数组的去重及优化
  • 后端_ThinkPHP5
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 排序算法学习笔记
  • 前端攻城师
  • 算法系列——算法入门之递归分而治之思想的实现
  • 线上 python http server profile 实践
  • 赢得Docker挑战最佳实践
  • 再次简单明了总结flex布局,一看就懂...
  • ​ubuntu下安装kvm虚拟机
  • ​VRRP 虚拟路由冗余协议(华为)
  • #NOIP 2014# day.1 T2 联合权值
  • ${factoryList }后面有空格不影响
  • (7)STL算法之交换赋值
  • (算法)求1到1亿间的质数或素数
  • (转)程序员疫苗:代码注入
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转)用.Net的File控件上传文件的解决方案
  • (状压dp)uva 10817 Headmaster's Headache
  • .aanva
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .net mvc部分视图
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET框架设计—常被忽视的C#设计技巧
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [383] 赎金信 js
  • [ACTF2020 新生赛]Upload 1
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [BJDCTF2020]The mystery of ip1