Docker(4)--镜像构建的具体操作方式(commit、Dockerfile)

1.通过commit构建镜像

1>运行容器

docker ps  #查看当前运行的容器
docker ps -a  #显示所有的容器
docker rm -f nginx  #删除容器nginx
docker rm -f game   #删除容器game
docker load -i rhel7.tar   #若本地有保存好的镜像,则可以直接导入
docker pull busybox   #若没有则需要进行拉取,拉取basybox镜像

Docker(4)--镜像构建的具体操作方式(commit、Dockerfile)_第1张图片Docker(4)--镜像构建的具体操作方式(commit、Dockerfile)_第2张图片
2>修改容器

docker history busybox:latest   #查看basybox在运行时需要执行什么操作,发现有CMD
CMD表示容器运行时会默认运行的操作
docker run -it busybox     #交互式运行
在容器内创建文件,ctrl+d退出,但此时容器已经停止
docker ps -a   #可以查看停止的容器

Docker(4)--镜像构建的具体操作方式(commit、Dockerfile)_第3张图片

由于运行时没有进行容器的命名,因此在启动时需要使用随机生成的名称或者容器ID
docker start f25154ebb502       #启动容器
docker attach f25154ebb502    #连接容器
快捷键ctrl+p+q     #不退出,是容器在后台运行,不会停止

Docker(4)--镜像构建的具体操作方式(commit、Dockerfile)_第4张图片3>将容器保存为新的镜像

保存时,即使容器停止也不影响保存,因为保存的是静态数据
测试时创建的文件是在容器的文件系统中,而不是保存在本地的文件系统中(当前本地文件系统为xhs)
若存储在本地的文件系统,效率较高,而容器层的文件系统的读写效率较差
若应用数据非常庞大,保存在容器的话会导致i镜像非常大,拉取时不方便,会浪费大量的磁盘空间和带宽空间
docker commit f25154ebb502 busybox:v1    #打包提交镜像名称为basybox:v1
docker history busybox
docker history busybox:v1
通过对比发现,v1版在原始的层上面又增加了新的一层,用来保存之前操作的痕迹,是一层一层向上叠加的方式
docker rm -f f25154ebb502      #正在运行的容器删除时,加-f强制,否则需要先停止容器
docker run -it --rm busybox:v1     #使用自己打包的镜像basybox:v1查看容器中的内容,并自动释放容器
发现原先在容器内保存的内容在镜像中存在

Docker(4)--镜像构建的具体操作方式(commit、Dockerfile)_第5张图片Docker(4)--镜像构建的具体操作方式(commit、Dockerfile)_第6张图片
在镜像中每一层都是通过commit打包提交而成

2.通过Dockerfile构建镜像

示例1:
1>删除前面构建的镜像和容器

docker rmi busybox:v1     #由于已经将上述实验所产生的容器删除,因此直接删除镜像即可(先删除容器再删除镜像)

Docker(4)--镜像构建的具体操作方式(commit、Dockerfile)_第7张图片2>编写Dockerfile文件

mkdir docker/    #创建空目录
注意不要在根下创建,默认情况下构建时会将创建的目录下的所有数据发送到docker引擎
若在根下创建则会将根下的所有数据发送给docker引擎进行构建
vim Dockerfile   #编辑Dockerfile文件
FROM  #默认从哪个镜像开始
COPY  #拷贝文件,必须在当前目录

Docker(4)--镜像构建的具体操作方式(commit、Dockerfile)_第8张图片
3>创建镜像demo:v1

docker build -t demo:v1 .    #创建镜像到当前,-t指定镜像名称,会默认从当前读取编写的Dockerfile文件并执行操作
docker images
docker history demo:v1 

通过此种方式,可以很清楚的知道在每一层都进行了哪些操作

Docker(4)--镜像构建的具体操作方式(commit、Dockerfile)_第9张图片示例2:
1>编写Dockerfile文件

编辑内容为:
FROM busybox
COPY file1 /
RUN echo hello > file2   #默认会保存在根目录下

在这里插入图片描述
2>创建镜像demo:v2

docker build -t demo:v2 . 
docker history demo:v2
docker history demo:v1
发现v2是在v1的基础上进行构建, 相同的层进行共享

Docker(4)--镜像构建的具体操作方式(commit、Dockerfile)_第10张图片示例3:
1>编写Dockerfile文件

编辑内容为:
FROM busybox
COPY file1 /
RUN echo hello > file2   
RUN echo westos > file3

Docker(4)--镜像构建的具体操作方式(commit、Dockerfile)_第11张图片
2>创建镜像demo:v3

docker build -t demo:v3 . 
构建时发现相同的步骤都是使用cache,会加速构建过程
docker history demo:v3

Docker(4)--镜像构建的具体操作方式(commit、Dockerfile)_第12张图片在容器中进行测试:

docker run -it --rm demo:v1  #使用容器demo:v1并自动释放
docker run -it --rm demo:v2
docker run -it --rm demo:v3

Docker(4)--镜像构建的具体操作方式(commit、Dockerfile)_第13张图片

你可能感兴趣的:(Docker学习)