dockerfile

1.数据卷

概述

创建容器的时候,通过指定目录,实现容器与宿主机之间,或者容器和容器之间的数据共享。

容器的生命周期是有限的,容器一旦销毁,内部的数据也会一并消失,所以通过创建数据卷的方式,将容器内的数据持久化保存到宿主机。

宿主机与容器之间

docker run itd --name nginx1 -v /opt/test1:/usr/share/nginx/html -p 80:80 nginx:1.22

-v (volume):挂载卷,数据卷

宿主机的目录:容器内部的目录:ro

ro:readonly,只读模式

默认权限是rw,read和write,可以不写

以宿主机的目录为准,容器的生命周期是有限的,保存到宿主机的数据可以在下一次创建容器时继续使用

容器和容器之间

docker run -itd --name test2 -v /opt/data1 -v /opt/data2 centos:7

docker run -itd --name test3 --volumes-from test2 centos:7

-v 指定目录,如果没有: 这个目录就是容器内部的数据目录,不会和宿主机挂载

--volumes-from:另外一个容器,使用其他容器提供的数据目录。

这个目录仅限于容器内数据共享。一旦容器销毁,内部的数据目录也会一并销毁。

创建容器的时候,一定要做宿主机和容器之间的端口映射(容器对外提供访问);一定要对容器做资源限制;一定要做数据卷。

2.dockerfile

概述

基于dockerfile创建:联合文件系统,UnionFs ,是创建docker镜像的基础,镜像可以通过分层来进行集成。

基于基础的镜像可以制作各种应用的镜像。

特点:一次性加载多个文件系统,但是创建好容器之后,对于容器来说只有一个文件系统。

把所有的需要的操作写入一个脚本当中,然后一键运行,就是dockerfile。

组成

  • 基础镜像: 程序的运行环境
  • 维护者信息 (可选项,相当于注释) 可以不写
  • 镜像的操作命令 (自定义应用)
  • 容器启动时的命令 (容器没有可执行的命令,就会退出,stop状态,必须要给器一个可执行的持久化的命令)

3.dockerfile的命令格式

镜像的操作命令

  • FROM 指定程序的基础镜像
  • MAINTAINER 维护者信息(可以忽略) LABEL
  • RUN 在基础镜像上运行命令,结果提交到新镜像。每执行一次run就相当于是镜像的一层,run的命令越多,镜像的分层就越多,镜像越大。
  • ADD 将宿主机的文件复制到镜像的内部,可以URL和解压
  • COPY 仅限于复制,将宿主机的文件复制到镜像的内部,只能是宿主机的本地文件,不支持下载
  • ENV 指定镜像内的容器运行之后的环境变量
  • WORKDIR 容器的工作目录,也是进入容器之后的默认目录
  • USER 指定容器运行时的用户名或者uid
  • VOLUME 创建容器内的挂载点,可以被外部使用,既可以和宿主机挂载,也可以和容器使用
  • EXPOSE 声明容器对外的网络端口
  • ARG 用来传递变量,把宿主机的参数传递到容器内部的参数

容器启动的命令

  • CMD 指定容器运行时的默认命令
  • ENTRYPOINT 指定容器运行时的默认命令

CMD和ENTRYPOINT的区别

  • CMD可以给ENTRYPOINT传参,
  • ENTRYPOINT会覆盖CMD的命令;
  • 当创建容器时,外部定义了参数,如果是CMD,会被外部的传参覆盖,只会执行外部传参的命令,但是ENTRYPOINT的命令是不会被外部传参的命令覆盖的;
  • 如果有多个CMD和ENTRYPOINT只会执行最后一个

docker build -t centos:test1 .

#开启镜像的制作

-t 创建完成后给镜像制定的名称和标签

. 直接从当前目录的dockerfile文件创建镜像

run命令在一个dockerfie当中不能太多,每执行一次run就相当于是镜像的一层run的命令太多,镜像的分层就越多,镜像越大。

RUN apt -y insatll nginx RUN apt -y install httpd

--> RUN apt -y insatll nginx && apt -y install httpd

&&:在run命令中,表示连接多个命令,确保前一个命令执行成功,才会运行第二个命令

RUN apt -y insatll nginx ; apt -y install httpd

; 不管前面的命令是否成功,都会执行后面的命令,一般不用

|| 或者(只有前面的失败了,后面的命令才会执行) 一般也不用

ADD和COPY

  • add和copy在复制文件时,表现的是一致的。复制本地文件。 找和dockerdfile在一个目录下的文件。自动复制到指定路径。
  • 解压和下载--->add

ADD的优点:没有格式的限制----解压 .gz .bz2 .zip 直接跟上路径,会自动解压到目标路径

ADD的缺点:在不解压的前提下,无法复制tar的压缩文件

只是复制,使用copy,如果是压缩再使用 add

4.实验

用ubuntu实现nginx:1.22的编译版本,暴露端口为84,设置nginx的默认访问目录为/var/www/html/,宿主机和访问目录实现挂载,限制cpu只能使用10%,以及1g的内存

cd /opt/docker

vim Dockerfile

vim nginx.conf

创建自定义镜像

到宿主机的挂载目录里编辑内容并查看

相关推荐
sszdzq2 小时前
Docker
运维·docker·容器
dmy2 小时前
docker 快速构建开发环境
后端·docker·容器
2401_897930065 小时前
linux系统如何配置host.docker.internal
linux·docker·eureka
亲持红叶10 小时前
open-webui安装
docker·open-webui
伪装成塔的小兵10 小时前
Windows使用docker部署fastgpt出现的一些问题
windows·docker·容器·oneapi·fastgpt
转身後 默落13 小时前
11.Docker 之分布式仓库 Harbor
分布式·docker·容器
菩提云14 小时前
Deepseek存算分离安全部署手册
人工智能·深度学习·安全·docker·容器
c无序20 小时前
Docker-技术架构演进之路
docker
努力的小T1 天前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
东风微鸣1 天前
TTRSS 迁移实战
docker·云原生·kubernetes·可观察性