Linux-Dockerfile与Docker Compose

文章目录

一、Dockerfile创建

Docker是一个文本文件,其中包含了一系列的指令,每个指令创建创建一个新的镜像层,通过Dockerfile,我们可以实现镜像的自动化构建。

1.1基于Docker镜像的分层结构

  • 镜像分层:Docker镜像不是单一文件,而是由多层文件系统组成,每执行一条Dockerfile指令,都会生成新的镜像层。容器启动时会在镜像的只读层上添加一层可读写层。
  • 镜像缓存:Docker会缓存每一层的镜像,如果某一层的内容没有变化,则会复用缓存层,以提高构建速率。
  • 镜像缓存:Docker 会缓存每一层的镜像,如果某一层的内容没有变化,则会复用缓存层,以提高构建效率。

1.2 Dockerfile操作常用指令

1、FROM

指定新镜像基于的基础镜像,Dokerfile的第一条指令必须为FROM。

from centos:7

2、MAINTAINER

指定镜像的维护者信息:

MAINTAINER "

3、RUN

执行命令并将结果提交到镜像中,常用来安装软件包、修改配置等。如

RUM yum install -y httpd

4、ENTRYPOINT

设置容器启动时默认执行的命令

ENTRYPOINT"httpd"

5、CMD

容器启动时执行的默认命令,CMD指令会被docker run命令 后指定的命令覆盖。

CMD"httpd","-D","FOREGROUND"

6、EXPOSE

声明容器内的端口

EXPOSE 80

7、ENV

设置环境变量

8、ADD

将文件或目录从宿主机复制到镜像中,支持从URL下载文件,并能自动解压归档文件。

9、COPY

将本地文件或目录复制到镜像中。

10、VOLUME

在容器中创建挂载点

VOLIUME "/data"

11、USER

设置容器内运行命令时的用户

12、WORKDIR

设置后续指令的目录(cd)

13、ONBUILD

设置当该镜像作为基础竟像时,后续Dockerfile执行的命令。

14、HEALTHCHECK

设置容器的健康检查

1.3 镜像的分层和缓存

每一条Dockerfile指令都会创建一个新的镜像层。

Docker会缓存每一层的镜像,只有在指令或文件发生变化时,才会重新构建该层及其之后的层。镜像层是不可变的,删除容器时只会删除其上面的读写层,底层的镜像层不会丢失。

-- 总结:

Docker镜像的创建方式常用的有:

基于现有镜像创建:通过修改容器并提交新的镜像。

基于本地模板创建:从模板文件导入创建镜像

基于Dockerfile创建:通过编写Dockerfile来定制镜像,支持自动化构建。

二、Docker Compose编排

通过Docker Compose ,我们可以在一个YAML配置文件中定义多个服务,并实现容器之间的联动,简化了应用的部署和管理。

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。

Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器

(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务当中可包括多个容器实例,Docker-

Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡,比如

Consul。

相关推荐
数智启示录3 分钟前
PostgreSQL 内存调优实战(第 12 篇):work_mem 只调大 64 倍,峰值为什么远不止 64 倍
运维·数据库·经验分享·postgresql·面试
平原201810 分钟前
GPT Image 2 / Nano Banana API成本拆解:$0.0081、84.7%与单张有效成本
linux·服务器·gpt
云登指纹浏览器19 分钟前
RPA 与指纹浏览器集成:多账号自动化运营的5项环境配置
运维·自动化·rpa
T1mzhou32 分钟前
ARM64 Linux 6.10内核启动流程2-rootfs 怎么挂上
linux·服务器·前端
wtblszn33 分钟前
城市内河在线监测系统方案
运维·物联网
捷瑞电子工坊42 分钟前
Ubuntu 终端指令速查手册(持续更新)
linux·ubuntu·教程·开发工具·命令行·速查手册·终端指令
雯宝1 小时前
6. USB 转串口驱动
linux
rest10241 小时前
对jemalloc的理解
linux
Le_ee1 小时前
科来流量分析/结合MCP自动化
运维·自动化
发光的沙子2 小时前
嵌入式系统架构师----Ubuntu如何安装不在列表内的软件?
linux·运维·ubuntu