Docker镜像制作与建立私有仓库

Docker镜像制作与建立私有仓库

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

Docker创建镜像

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

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

Docker镜像分层

mark

  • FROM后面跟基础镜像

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

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

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

Docker镜像的创建

Docker镜像
  • 应用发布的标准格式

  • 支持一个Docker容器的运行

Docker镜像的创建方法
  • 基于已有镜像创建

  • 基于本地模板创建

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

案列环境

主机操作系统主机名/IP地址主要软件及版本
服务器Centos 7.6Localhost/20.0.0.41Docker-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

mark

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值