Docker镜像制作的方式与建立私有仓库他来了


这篇文章主要介绍了 Docker创建镜像两种方法详解的相关资料,Docker创建镜像:一是使用docker commit命令,二是使用本地模板,三是Dockerfile文件,需要的朋友可以参考下

Docker创建镜像

​ 最近学习Docker 的知识,偶然在网上看到关于Docker 创建对象的两种方法很好,这里记录下,也许可以帮助到你。

我们都知道Docker中我们是基于镜像来运行的容器,那如何创建镜像呢?创建镜像有两种方法,一是使用docker commit命令,二是使用docker build命令,三是Dockerfile文件。这里我们说的创建镜像是指基于一个已有的基础镜像比如ubuntu等,而不是从零创建一个全新的镜像。

一:Docker镜像分层

mark

  • FROM后面跟基础镜像

  • ADD:从数组系统往镜像容器当中添加指令文件

  • VOLUME:可以使用数组共享的资源空间 类似于共享挂载 数组系统提供空间,空间存放着预安装的软件包,容器直接挂载共享空间

  • CMD:当你镜像制作完成时要定义启动容器运行的指令

二:Docker镜像的创建

Docker镜像

扫描二维码关注公众号,回复: 11837155 查看本文章
  • 应用发布的标准格式

  • 支持一个Docker容器的运行

Docker镜像的创建方法

  • 基于已有镜像创建

  • 基于本地模板创建

  • 基于Dockerfile创建!!【重点】(关注:参数)

  • 案列环境

主机 操作系统 主机名/IP地址 主要软件及版本
服务器 Centos 7.6 Localhost/20.0.0.42 Docker-19.03.13:

2.1:基于已经镜像创建

  • 使用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

2.2:基于本地模板创建

  • 通过导入操作系统模板文件生成新的镜像
    使用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

2.3:使用dockerfile创建镜像

  • Dockerfile构建镜像是以基础镜像为基础的,Dockerfile是一个文本文件,内容是用户编写的一些docker指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。:

2.31:Dockerfile的十三个基本指令

分别是:FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD

mark

2.31:Dockerfile结构四部分

  • 基础镜像信息

  • 维护者信息

  • 镜像操作指令

  • 容器启动时执行指令

dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释:

2.4:使用Dockerfile创建镜像

  • 使用Dockerfile创建一个httpd镜像并运行

  • 编写Dockerfile文件

#创建一个名称为apache的工作目录
[root@localhost opt]# mkdir apache

#在工作目录创建一个Dockerfile文件     一定不能改名字
[root@localhost opt]# cd apache/
[root@localhost apache]# vim Dockerfile
'//编写信息'

##基于的基础镜像
FROM centos 
##维护镜像的用户信息
MAINTAINER THIS IS SHUAI
##镜像操作指令安装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
[root@docker apache]# vim run.sh
#!/bin/bash
rm -rf /run/httpd/*	'//清除缓存'
exec /usr/sbin/apachectl -D FOREGROUND	'//启动apache'
  • 生成镜像
#最后一个千万注意“.” -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
  • 客户机登录测试

mark
感谢观看,学习不能停!!

猜你喜欢

转载自blog.csdn.net/weixin_47151643/article/details/108702944
今日推荐