企业级容器技术docker(3)

本文详细介绍了两种构建Docker镜像的方法:commit构建和Dockerfile构建。对比了两者安全性,重点讲解了Dockerfile构建镜像的流程,包括常用命令如FROM、COPY、ADD、WORKDIR等的使用,以及缓存机制对构建效率的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构建镜像
构建镜像有两种方法,一种commit构建镜像另一种编写Dockerfile构建镜像。

commit构建镜像

构建镜像的原理,为打开容器,运行容器,最后将容器保存为镜像。但是这种方法一般不太安全,因为使用docker history命令查看镜像构建历史看不到,存在隐患。
在下面我们将对这种方法做一个讲解,我们选取的镜像为busybox,镜像很小,但是有基本的功能。
载入镜像,进入容器内部可以创建一个文件test用来作测试。
创建完成后退出容器,下来使用命令

docker commit vm test:v1 ##提交  vm是原来的容器 test是新镜像名 v1指的是版本

提交完成后在使用

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                v1                  a4cdea958cf4        5 seconds ago       1.15MB

可以看到新的镜像已经生成。但是在查看构建历史的时候没有办法看到操作,这让使用者使用起来感觉不安全,无法信任新镜像。

docker history test:v1 
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
a4cdea958cf4        3 minutes ago       sh                                              21B                 
59788edf1f3e        16 months ago       /bin/sh -c #(nop)  CMD ["sh"]                   0B                  
<missing>           16 months ago       /bin/sh -c #(nop) ADD file:63eebd629a5f7558c…   1.15MB     

编写Dockerfile构建镜像

这种方法使用起来更加安全和直观,所以成为了现在主流的构建镜像的方法。
首先创建一个构建目录,进入目录中编写dockerfile文件并且将文件中所需要的安装包和其他配置文件都要放置在构建目录中。
dockerfile文件中常用的指令。

命令作用
FROM指定基础镜像
MAINTAINER设置作者等
COPY复制
ADD将文件添加到镜像中,如果是压缩文件会直接解压
ENV设置环境变量
EXPOSE主动暴露端口
VOLUME指定数据挂载点
WORKDIR进入目录
RUN容器当中运行

以上为一些基本的命令,下来就可以试着构建一个新的镜像了。
下列操作均在/root/Docker目录中完成
COPY命令

vim dockerfile
FROM busybox
COPY 1.repo /etc/yum.repo.d/

文件编写完成,下来需要将yum仓库配置文件复制到该目录中,准备工作完成后建立新的镜像。

docker build -t test:v1 . ##最后面有个点表示在当前目录下,当然也可以使用绝对路径。

建立完成后查看镜像

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                v1                  0eb16fd25560        7 seconds ago       1.15MB

可以看到镜像已经建立完成,使用交互式的方法进入容器中查看,

docker run -it --name vm1 test:v1 
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # cd etc/
network/     yum.repo.d/
/ # cd etc/yum.repo.d/
/etc/yum.repo.d # vi 1.repo 

文件已经复制进入了容器。
ADD命令
在上面实验的基础上添加一行,并且将nginx的压缩包放置在当前目录中。

ADD nginx-1.17.0.tar.gz /tmp

构建镜像并进入容器内部查看。

docker build -t test:v2 .
docker run -it --name vm2  test:v2 
/tmp # cd nginx-1.17.0/
/tmp/nginx-1.17.0 # ls
CHANGES     LICENSE     auto        configure   html        src
CHANGES.ru  README      conf        contrib     man

这样nginx就直接解压完成了。
注:
注意观察构建v1 v2镜像时操作的提示

[root@server1 Docker]# docker build -t test:v1 .
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM busybox
 ---> 59788edf1f3e
Step 2/2 : COPY 1.repo /etc/yum.repo.d/
 ---> 0eb16fd25560
Successfully built 0eb16fd25560
Successfully tagged test:v1
[root@server1 Docker]# docker build -t test:v2 .
Sending build context to Docker daemon  1.037MB
Step 1/3 : FROM busybox
 ---> 59788edf1f3e
Step 2/3 : COPY 1.repo /etc/yum.repo.d/
 ---> Using cache ##注意这个地方
 ---> 0eb16fd25560
Step 3/3 : ADD nginx-1.17.0.tar.gz /tmp
 ---> 5ff91cd750d6
Successfully built 5ff91cd750d6
Successfully tagged test:v2

在使用dockerfile构建镜像的时候会有一个缓存机制,原来构建过的步骤,只要文件没变,那么就会直接使用缓存,不会重新进行构建。

WORKDIR命令
在上面的实验中加入

WORKDIR /tmp/nginx-1.17.0

可以直接进入该目录进行下一步的操作,类似linux系统中的cd操作。
以上表格中的命令都会进行运用,下一篇我们尝试搭建一个完整的镜像,并且解决镜像优化问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值