1.利用commit构建镜像
(1)利用commit封装镜像
commit构建镜像的步骤
运行容器
修改容器
将容器保存为新的镜像
(2)利用ubuntu镜像建立容器vm1,,对它进行修改
(3)使用commit命令进行封装
(4)使用新封装的镜像构建容器,保存了之前操作的痕迹
2.编写Dockerfile构建镜像
准备编写DockFile实现安装httpd服务
(1)删除前面构建的镜像和容器
docker rmi ubuntu:v1
(2)拉取rhel7镜像源
(3)编写Dockerfile
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 . ##注意命令后有一个点,表示当前目录下
(5)基于刚才封装的镜像运行一个容器
(6) 书写httpd服务默认发布文件,导入容器内部
访问测试
可以看出刚才构建的镜像是好的,基于镜像运行起来的容器也是好的
(7)构建镜像,并添加数据卷挂载位置(VOLUME [“var/www/html”])
Build构建镜像
[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多了一层
生成容器,并测试是否可以正常访问
(8)直接在数据卷中编写发布文件
重新生成容器
查看httpd3的数据卷位置
进入数据卷位置并编写发布文件并测试
测试