docker(4)——镜像的两种构建方式(commit&dockerfile方式)

镜像的分层结构

在这里插入图片描述

  • 共享宿主机的kernel
  • base镜像提供的是最小的Linux发行版
  • 同一docker主机支持运行多种Linux发行版采用分层结构的最大好处是:共享资源
  • 新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。

Docker镜像要采用分层结构

共享资源

在这里插入图片描述

base镜像

base 镜像简单来说就是不依赖其他任何镜像,完全从0开始建起。
其他镜像都是建立在他的之上,可以比喻为大楼的地基
base 镜像不依赖其他镜像,从 scratch 构建;其他镜像可以之为基础进行扩展。
所以,能称作 base 镜像的通常都是各种 Linux 发行版的 Docker 镜像,比如 Ubuntu, Debian, CentOS 等。

镜像的写时复制特性

在这里插入图片描述

Docker的这种机制我们称之为写时复制。
镜像是用来创建容器的,是容器的只读模板,默认可以从 docker hub 上下载

commit构建镜像

docker commit构建新镜像三部曲:

  • 运行容器
  • 修改容器
  • 将容器保存为新的镜像

缺点:

  • 效率低、可重复性弱、容易出错
  • 使用者无法对镜像进行审计,存在安全隐患
docker ps

将容器保存为新的镜像

docker commit 3be43c7fa968 busybox:v1

查看指定镜像的创建历史

docker history busybox:latest 
docker history busybox:v1

发现v1中使用了原来的busybox的两层,并且在上面新建了一层,叠加在上面

docker ps
docker rm -f 3be43c7fa968	#删除正在运行的容器需要-f参数强制删除
docker run -it --rm busybox:v1

在这里插入图片描述

dockerfile方式

demo1:拷贝文件

COPY:把文件从build context复制到镜像
支持两种形式:COPY src dest 和 COPY ["src", "dest"]
src必须指定build context中的文件或目录

创建一个Dockerfile

1.dockerfile的目录不要再根目录下,因为默认创建时会把当前目录的所有数据发送给docker引擎,如果在根目录下,就会把根下的所有数据发送给docker进行构建,这显然时不合理的
2.COPY参数要求要拷贝的文件必须在当前目录,不能写绝对路径,只能是相对路径。拷贝的目的地可以是目录或文件

mkdir docker
cd docker/
vim Dockerfile
FROM busybox	#指定开始的镜像,若镜像不存在,会去拉取该镜像
COPY testfile /	#把当前目录下的testfile文件拷贝到容器的根目录下
echo redhat > testfile

在这里插入图片描述

删除之前的镜像(没有做过之前的实验可忽略此步骤)

docker images
docker rmi busybox:v1
docker rmi busybox:v2
docker images

在这里插入图片描述

构建镜像

docker build -t demo:v1 
docker history demo:v1 

在这里插入图片描述

demo2:RUN在容器中运行命令

RUN:在容器中运行命令并创建新的镜像层,常用于安装软件包:
RUN yum install -y vim

修改Dockerfile

<font color=dahoc>step1 修改Dockerfile:
vim Dockerfile 
FROM busybox
COPY testfile /
RUN echo hello nigar !! > file1

构建镜像

docker build -t demo:v2

在这里插入图片描述

测试

docker run -it demo:v2

在这里插入图片描述

demo3:镜像分层的缓存特性

修改Dockerfile

vim Dockerfile 
FROM busybox
COPY testfile /
RUN echo hello nigar !! > file1
RUN echo hello nigar !! > file2

构建镜像

docker build -t demo:v3

在这里插入图片描述

测试

在这里插入图片描述

demo4:ADD自动解压文件

ADD:用法与COPY类似,不同的是src可以是归档压缩文件,文件会被自动解压到dest,也可以自动下载URL并拷贝到镜像:
ADD html.tar /var/www
ADD http://ip/html.tar /var/www

放一个nginx的压缩包在/root/docker下,修改Dockerfile

vim Dockerfile 
FROM busybox
ADD nginx-1.16.1.tar.gz /

构建镜像

docker build -t demo:v4 .

测试

在这里插入图片描述

demo5:ENV定义环境变量

修改Dockerfile

vim Dockerfile 
FROM busybox
ENV hostname server1
ADD nginx-1.16.1.tar.gz /	#定义环境变量hostname为server1

构建镜像

docker build -t demo:v5 .

测试
在这里插入图片描述

demo6:VOLUME声明数据卷,在封装应用容器时常用

修改Dockerfile

vim Dockerfile 
FROM busybox
ENV hostname server1
ADD nginx-1.16.1.tar.gz /
VOLUME ["/data"]

构建镜像

docker build -t demo:v6 .

在这里插入图片描述

查看镜像的创建历史

在这里插入图片描述

进入容器,创建文件

在这里插入图片描述

查看demov6的挂载信息

在这里插入图片描述

进入目录,查看到刚刚创建的文件file

在这里插入图片描述

释放数据卷

在这里插入图片描述

demo7:WORKDIR设置镜像中的当前工作目录

在这里插入图片描述

测试

在这里插入图片描述

demo8:CMD与ENTRYPOINT

在这里插入图片描述

测试

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值