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

创建自定义镜像

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

相关推荐
小夏子_riotous15 分钟前
Docker学习路径——10、Docker Compose 一站式编排:从入门到生产级部署
linux·运维·服务器·docker·容器·centos·云计算
smallcelebration25 分钟前
132 docker入门学习
学习·docker·容器
AI服务老曹30 分钟前
突破芯片壁垒:基于 Docker 与异构计算架构的工业级 AI 视频管理平台深度解析
人工智能·docker·架构
旧故新长41 分钟前
部署自动发卡网站的问题和解决方案
linux·docker
hiwb1 小时前
Docker 安装 MySQL,DBeaver 连接 MySQL
mysql·docker·容器
AI服务老曹2 小时前
【架构深度解析】从X86到ARM的异构算力调度:如何利用 Docker 与 GB28181 构建高可用的私有化AI视频管理平台(含源码交付方案)
arm开发·docker·架构
杨云龙UP2 小时前
Docker MySQL 5.7 全库备份到异地服务器实践记录_20260427
linux·运维·服务器·数据库·mysql·docker·容器
Young soul22 小时前
docker-compose安装elasticsearch、kibana、logstash以及ik分词器
elasticsearch·docker·jenkins
极客先躯3 小时前
高级java每日一道面试题-2025年11月17日-容器与虚拟化题[Dockerj]-请解释容器和虚拟机的本质区别,从架构层面详细说明。
java·docker·架构
MAVER1CK18 小时前
Install VNC in Docker container
运维·docker·容器