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。

相关推荐
wj3055853781 小时前
课程 9:模型测试记录与 Prompt 策略
linux·人工智能·python·comfyui
abigriver2 小时前
打造 Linux 离线大模型级语音输入法:Whisper.cpp + 3090 显卡加速与 Rime 中英混输终极调优指南
linux·运维·whisper
wangqiaowq2 小时前
windows下nginx的安装
linux·服务器·前端
YYRAN_ZZU3 小时前
Petalinux新建自动脚本启动
linux
charlie1145141913 小时前
嵌入式Linux驱动开发pinctrl篇(1)——从寄存器到子系统:驱动演进之路
linux·运维·驱动开发
Agent手记3 小时前
异常考勤智能预警与处理与流程优化方案 | 基于企业级Agent的超自动化实战教程
运维·人工智能·ai·自动化
于小猿Sup3 小时前
VMware在Ubuntu22.04驱动Livox Mid360s
linux·c++·嵌入式硬件·自动驾驶
cen__y4 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
不仙5205 小时前
VMware Workstation 26.0.0 在 Ubuntu 24.04 (内核 6.17.0) 上的安装与内核模块编译问题
linux·ubuntu·elasticsearch
AI视觉网奇6 小时前
linux 检索库 判断库是否支持
java·linux·服务器