Docker系列教程04-Docker构建镜像的三种方式

开源Linux 发表于 2021/04/13 22:36:57 2021/04/13
【摘要】 今天就逐一讲述为大家讲述,如何构建属于自己的docker镜像

简介

创建镜像的方法主要有三种:基于已有镜像的容器创建基于本地模板导入基于Dockerfile创建

今天就逐一讲述为大家讲述,如何构建属于自己的docker镜像。

1、基于容器构建镜像

基于已有容器构建镜像主要是通过docker commit命令来构建新的镜像,语法规则如下:


docker commit 语法

下面将演示下如何基于已有容器构建镜像

1、首先,创建一个容器,并在其容器内创建一个test文件,之后退出。代码如下:

root@ubuntu:~# docker run -it ubuntu:18.04 /bin/bash
root@b66c08d61f9e:/# echo "DIY" > /test
root@b66c08d61f9e:/# exit
exit

2、基于该容器使用docker commit命令构建新的镜像

root@ubuntu:~# docker commit -m "new_image" -a "cnLinuxer" b66 myubuntu:v1
sha256:de7a0211f27fb71ca34c3a5c1829f6d2a69c15ef74cd397a52f2cc8a5e98e1b9

参数解释:上面-m选项指定了新镜像的提交信息,-a标注作者信息,b66是容器ID,myubuntu:v1是指定的新镜像名称。

3、此时本地镜像库已生成myubuntu:v1镜像

关注微信公众号【开源Linux】,后台回复『10T』,领取10T学习资源大礼包,涵盖Linux、虚拟化、容器、云计算、网络、Python、Go等书籍和视频

root@ubuntu:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myubuntu            v1                  de7a0211f27f        8 minutes ago       64.2MB
...

4、使用新生成的镜像构建容器,测试自定义数据有无丢失

root@ubuntu:~# docker run -it myubuntu:v1 /bin/bash
root@d11d9577f31b:/# cat /test
DIY
root@d11d9577f31b:/#

基于已有容器构建镜像,其实质就是将容器里运行的程序以及该程序的运行环境打包起来生成新的镜像。

2、基于本地模板导入

用户也可以从模板文件中导入镜像,主要使用docker import命令

下面演示基于本地模板导入镜像

1、首先,创造出一个模板,即 将容器导入到一个模板文件中

root@ubuntu:~# docker export b66 > /root/myubuntu.tar
root@ubuntu:~# ls /root
/root/myubuntu.tar

2、利用模板导入成镜像

root@ubuntu:~# docker import /root/myubuntu.tar qinlulu/ubuntu:18.04
sha256:498afccbfb2ddcc7b8ce5a697e982f5bc8d3af9a55adf6a7cc2fd1121dbee36e

3、此时本地镜像仓库多出一个qinlulu/ubuntu:18.04镜像

root@ubuntu:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
qinlulu/ubuntu      18.04               498afccbfb2d        6 seconds ago       64.2MB

3、基于Dockerfile构建

基于Dockerfile构建镜像就目前而言是使用最为广泛的。Dockerfile是由一组指令组成的文件,其每条指令对应Linux中的一条命令,Docker程序通过读取Dockerfile中的指令最终生成镜像。


Dockerfile指令

下面演示基于Dockerfile文件构建nginx镜像的实例

1、准备工作:

创建一个目录,在该目录里编写dockerfile及存放nginx软件包

root@ubuntu:~# mkdir -p /opt/nginx
root@ubuntu:~# wget -P /opt/nginx http://nginx.org/download/nginx-1.11.1.tar.gz
root@ubuntu:~# touch /opt/nginx/Dockerfile
  // 需要准备好以下两个文件
root@ubuntu:~# ls /opt/nginx/
Dockerfile  nginx-1.11.1.tar.gz

2、编写dockerfile文件,代码如下:

root@ubuntu:~# vim /opt/nginx/Dockerfile
FROM centos:7.5.1804 #指定父镜像
MAINTAINER mynginx   #指定维护者信息
ADD nginx-1.11.1.tar.gz /usr/local #将本地nginx软件包上传至容器/usr/local/下
RUN yum -y install vim wget gcc gcc-c++ make openssl-devel pcre-devel #yum安装依赖软件
WORKDIR /usr/local/nginx-1.11.1/ #进入nginx工作目录
RUN ./configure --prefix=/usr/local/nginx && make && make install #编译并安装nginx服务
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf #关闭nginx后台运行
ENV PATH /usr/local/nginx/sbin:$PATH #添加nginx的环境变量
EXPOSE 80 #将容器的80端口映射出来
CMD ["nginx"]  #执行nginx命令,启动nginx

3、构建nginx镜像

root@ubuntu:/opt/nginx# docker build -t mynginx:v1

输出两个Successfully即为构建成功!如下图:

dockerfile构建镜像过程

4、运行nginx镜像

root@ubuntu:~# docker run -itd -p 888:80 mynginx:v1
e93a52fffd9ea4928a062f00613e4325296042a143307602700ddf0c463c02c9

5、测试nginx服务

浏览器访问测试浏览器访问测试

更多Dockerfile的内容将通过后面大量的构建实例再为大家详细介绍。

关注微信公众号【开源Linux】,后台回复『10T』,领取10T学习资源大礼包,涵盖Linux、虚拟化、容器、云计算、网络、Python、Go等书籍和视频 
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请发送邮件至:cloudbbs@huaweicloud.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。