Docker之构建镜像的两种方式(Dockerfile、commit)

1.利用commit构建镜像

(1)利用commit封装镜像

commit构建镜像的步骤

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

(2)利用ubuntu镜像建立容器vm1,,对它进行修改
Docker之构建镜像的两种方式(Dockerfile、commit)_第1张图片
(3)使用commit命令进行封装

Docker之构建镜像的两种方式(Dockerfile、commit)_第2张图片Docker之构建镜像的两种方式(Dockerfile、commit)_第3张图片Docker之构建镜像的两种方式(Dockerfile、commit)_第4张图片

(4)使用新封装的镜像构建容器,保存了之前操作的痕迹

Docker之构建镜像的两种方式(Dockerfile、commit)_第5张图片

2.编写Dockerfile构建镜像

准备编写DockFile实现安装httpd服务

(1)删除前面构建的镜像和容器
docker rmi ubuntu:v1

(2)拉取rhel7镜像源

Docker之构建镜像的两种方式(Dockerfile、commit)_第6张图片(3)编写Dockerfile
Docker之构建镜像的两种方式(Dockerfile、commit)_第7张图片Docker之构建镜像的两种方式(Dockerfile、commit)_第8张图片

FROM rhel7      # 源镜像是rhel7,最好将名为rhel7的镜像放在本地
COPY yum.repo /etc/yum.repo.d		#将本地的yum源文件复制到容器中的/etc/yum.repo.d/目录下
RUN  rpmdb --rebuilddb && yum install -y httpd在容器中安装httpd服务
# 执行命令安装httpd并清除yum缓存
# rpmdb 命令用于初始化和重建rpm数据库
# --rebuilddb:从已安装的包头文件,反向重建RPM数据库
EXPOSE 80    # 定义端口为80
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
# 打开apach服务
# -D 是全局文件/etc/sysconfig/httpd中的打开参数

(4)封装镜像,并测试能否正常使用

[root@server1 docker]# docker build  -t rhel7:v1 .		##注意命令后有一个点,表示当前目录下

Docker之构建镜像的两种方式(Dockerfile、commit)_第9张图片Docker之构建镜像的两种方式(Dockerfile、commit)_第10张图片
(5)基于刚才封装的镜像运行一个容器

Docker之构建镜像的两种方式(Dockerfile、commit)_第11张图片
(6) 书写httpd服务默认发布文件,导入容器内部

Docker之构建镜像的两种方式(Dockerfile、commit)_第12张图片访问测试
可以看出刚才构建的镜像是好的,基于镜像运行起来的容器也是好的

Docker之构建镜像的两种方式(Dockerfile、commit)_第13张图片Docker之构建镜像的两种方式(Dockerfile、commit)_第14张图片
(7)构建镜像,并添加数据卷挂载位置(VOLUME [“var/www/html”])
Docker之构建镜像的两种方式(Dockerfile、commit)_第15张图片
Build构建镜像
Docker之构建镜像的两种方式(Dockerfile、commit)_第16张图片

[root@server1 docker]# docker build -t rhel7:v2 .
Sending build context to Docker daemon  4.096kB
Step 1/6 : FROM rhel7
 ---> 0a3eb3fde7fd
Step 2/6 : COPY yum.repo /etc/yum.repos.d/
 ---> Using cache												##使用了缓存
 ---> db0ce1a7fb77
Step 3/6 : RUN rpmdb --rebuilddb  && yum install -y httpd
 ---> Using cache												##使用了缓存
 ---> ba007361f210
Step 4/6 : EXPOSE 80
 ---> Using cache												##使用了缓存
 ---> 554977c12e37
Step 5/6 : VOLUME ["/var/www/html"]
 ---> Running in 4fbea9452763
Removing intermediate container 4fbea9452763
 ---> 7094cf717b4c
Step 6/6 : CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
 ---> Running in 0efba909bae5
Removing intermediate container 0efba909bae5
 ---> 6d1e0dbaa3ff
Successfully built 6d1e0dbaa3ff
Successfully tagged rhel7:v2

这就要提到一个重要点:镜像的缓存特性
此时可以看到 rhel7:v2比 rhel7:v1多了一层

Docker之构建镜像的两种方式(Dockerfile、commit)_第17张图片

生成容器,并测试是否可以正常访问
Docker之构建镜像的两种方式(Dockerfile、commit)_第18张图片Docker之构建镜像的两种方式(Dockerfile、commit)_第19张图片

(8)直接在数据卷中编写发布文件

重新生成容器

Docker之构建镜像的两种方式(Dockerfile、commit)_第20张图片查看httpd3的数据卷位置

Docker之构建镜像的两种方式(Dockerfile、commit)_第21张图片进入数据卷位置并编写发布文件并测试

Docker之构建镜像的两种方式(Dockerfile、commit)_第22张图片
测试

Docker之构建镜像的两种方式(Dockerfile、commit)_第23张图片

你可能感兴趣的:(linux企业实战)