Docker镜像制作与建立私有仓库
这篇文章主要介绍了 Docker创建镜像两种方法详解的相关资料,Docker创建镜像:一是使用docker commit命令,二是使用docker build命令,三是Dockerfile文件,需要的朋友可以参考下
Docker创建镜像
最近学习Docker 的知识,偶然在网上看到关于Docker 创建对象的两种方法很好,这里记录下,也许可以帮助到你。
我们都知道Docker中我们是基于镜像来运行的容器,那如何创建镜像呢?创建镜像有两种方法,一是使用docker commit命令,二是使用docker build命令,三是Dockerfile文件。这里我们说的创建镜像是指基于一个已有的基础镜像比如ubuntu等,而不是从零创建一个全新的镜像。
Docker镜像分层
-
FROM后面跟基础镜像
-
ADD:从数组系统往镜像容器当中添加指令文件
-
VOLUME:可以使用数组共享的资源空间 类似于共享挂载 数组系统提供空间,空间存放着预安装的软件包,容器直接挂载共享空间
-
CMD:当你镜像制作完成时要定义启动容器运行的指令
Docker镜像的创建
Docker镜像
-
应用发布的标准格式
-
支持一个Docker容器的运行
Docker镜像的创建方法
-
基于已有镜像创建
-
基于本地模板创建
-
基于Dockerfile创建!!【重点】(关注:参数)
案列环境
主机 | 操作系统 | 主机名/IP地址 | 主要软件及版本 |
---|---|---|---|
服务器 | Centos 7.6 | Localhost/20.0.0.41 | Docker-19.03.13 |
基于已经镜像创建
使用docker commit创建
docker commit [选项] 容器ID/名称 仓库名称:[标签]
-m 说明信息
-a 作者信息
-p 生成过程中停止容器的运行
示例
#获取centos:7镜像
[root@localhost ~]# docker pull centos:7
#创建容器
[root@localhost ~]# docker create -it centos:7 /bin/bash
-i:让容器的标准输入保持打开
-t:让Docker分配一个伪终端
#查看容器列表
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ad432b34512 centos:7 "/bin/bash" About a minute ago Created dazzling_swanson
#启动容器
[root@localhost ~]# docker start 5ad432b34512
#使用docker commit创建
[root@localhost ~]# docker commit -m "shuai" -a "daoke" 5ad432b34512 daoke:test
这里5ad432b34512是修改过的容器ID,daoke:test是镜像名跟标签
上面-m选项指定了镜像的提交信息,-a选项标注了作者信息,最后的:test是标签。
#查看镜像列表 可以看到已经创建成功
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daoke test 0ade30d9aa5a About a minute ago 203MB
nginx latest 7e4d58f0e5f3 10 days ago 133MB
centos 7 7e6257c9f8d8 5 weeks ago 203MB
基于本地模板创建
通过导入操作系统模板文件生成新的镜像
使用wget命令导入为本地镜像
通过导入系统模板文件可以生成镜像,模板可以从OPENVZ开源项目下载
地址为:https://wiki.openvz.org/Download/template/precreated
或者使用wget下载:wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
导入成功后可查看本地镜像信息
docker images lgrep new
示例
[root@localhost opt]# ls
debian-7.0-x86-minimal.tar.gz rh
#基于模板生成
[root@localhost opt]# cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:shuai
#可以看到已经生成 标签为shuai
[root@localhost opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daoke shuai df9e22f0a57e About a minute ago 215MB
daoke test 0ade30d9aa5a 15 minutes ago 203MB
nginx latest 7e4d58f0e5f3 10 days ago 133MB
centos 7 7e6257c9f8d8 5 weeks ago 203MB
使用dockerfile创建镜像
Dockerfile构建镜像是以基础镜像为基础的,Dockerfile是一个文本文件,内容是用户编写的一些docker指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
Dockerfile的十三个基本指令
分别是:FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD
Dockerfile结构四部分
-
基础镜像信息
-
维护者信息
-
镜像操作指令
-
容器启动时执行指令
dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释
使用Dockerfile创建镜像
-
使用Dockerfile创建一个httpd镜像并运行
-
编写Dockerfile文件
#创建一个名称为apache的工作目录
[root@localhost opt]# mkdir apache
#在工作目录创建一个Dockerfile文件 一定不能改名字
[root@localhost opt]# cd apache/
[root@localhost apache]# vim Dockerfile
'//编写信息'
##基于的基础镜像
FROM centos
##维护镜像的用户信息
MAINTAINER The porject <CN-TangZheng>
##镜像操作指令安装Apache软件
RUN yum -y update
##安装Apache服务
RUN yum -y install httpd
##开启80端口
EXPOSE 80
##复制网址首页文件
ADD index.html /var/www/html/index.html
##将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
##启动容器时执行脚本
CMD ["/run.sh"]
编写执行脚本首页内容
[root@localhost apache]# echo "this is test web" > index.html
生成镜像
#最后一个千万注意“.” -t:镜像文件名称:标签
[root@localhost apache]# docker build -t httpd:centos .
...省略信息...
Complete!
Removing intermediate container 9bdc2873b24f '//每层缓存都会生成一个临时的容器来执行命令,然后在删除'
---> 40c76ad7fb84
Step 5/9 : EXPOSE 80
---> Running in 49402cd8d904
Removing intermediate container 49402cd8d904
---> 32033d970f7d
Step 6/9 : ADD index.html /var/www/html/index.html
---> f2362d265c6e
Step 7/9 : ADD run.sh /run.sh
---> f0a73b8e4103
Step 8/9 : RUN chmod 755 /run.sh
---> Running in 51c8d3736c06
Removing intermediate container 51c8d3736c06
---> b7cf62b05664
Step 9/9 : CMD ["/run.sh"]
---> Running in 290d45883cce
Removing intermediate container 290d45883cce
---> e85ac386fe3e
Successfully built e85ac386fe3e
Successfully tagged httpd:centos
#查看镜像,已经生成
[root@localhost apache]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd centos 073365dcb0eb 37 seconds ago 283MB
centos 7 7e6257c9f8d8 5 weeks ago 203MB
centos latest 0d120b6ccaa8 5 weeks ago 215MB
新镜像运行容器
# -d:守护进程 -p:映射端口 对外提供端口随意写 不宿主机冲突就行 -P:大写P是随机端口号
[root@localhost apache]# docker run -d -p 1216:80 httpd:cetnos
#查看容器列表
[root@localhost apache]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cd1bc0acea9f httpd:cetnos "/run.sh" 11 seconds ago Up 10 seconds 0.0.0.0:1216->80/tcp beautiful_northcutt
客户机登录测试
CREATED STATUS PORTS NAMES
cd1bc0acea9f httpd:cetnos “/run.sh” 11 seconds ago Up 10 seconds 0.0.0.0:1216->80/tcp beautiful_northcutt
客户机登录测试
![mark](https://img-blog.csdnimg.cn/img_convert/8bf3354cf73231c5dad75b2e8ad8f0ef.png)