设为首页 收藏本站
查看: 721|回复: 0

[经验分享] Docker创建镜像以及私有仓库

[复制链接]

尚未签到

发表于 2019-2-21 08:01:58 | 显示全部楼层 |阅读模式
  Docker的安装及镜像、容器的基本操作详见博客http://blog.运维网.com/11134648/2160257
下面介绍Docker创建镜像和创建私有仓库的方法,详细如下:

创建镜像
  创建镜像的方法有三种,分别是基于已有镜像创建、基于本地镜像模板创建以及基于Dockfile创建。下面介绍这三种镜像的方法

1.基于已有镜像创建
  实质就是把一个容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像。

命令格式:docker commit [选项] 容器ID/名称 仓库名称:标签
  (1)首先需要查看启动已有镜像的容器的ID号

docker ps -a

(2)之后使用docker commit命令创建一个新镜像


命令格式:docker commit [选项] 容器ID/名称 仓库名称:标签
常用选项: -m 说明信息
-a 作者信息
-p 生成过程中停止容器的运行

(3)创建完成后会返回新创建镜像的ID号


docker images | grep daoke


2.基于本地模板创建
  通过导入操作系统模板文件可以生成镜像,模板文件可以从OPENVZ开源项目下载,下载地址为http://download.openvz.org/template/precreated。
  (1)下载模板文件

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz

(2)使用docker导入命令导入为本地镜像


cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new

(3)导入完成后会返回生成镜像的ID信息


docker images | grep new


3.基于Dockerfile创建



  •   Dockfile是由一组指令组成的文件,其中每条指令对应Linux中的一条命令,Docker程序将读取Dockfile中的指令生成指定镜像。

  • Dockfile结构大致分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
  • Dockfile每行支持一条指令,每条指令可携带多个参数,支持使用”#“号开头的注释。

  Dockerfile有十几条命令可用于构建镜像,其中常见的指令如下:


指令
含义




FROM 镜像
指定所创建镜像的基础镜像


MAINTAINER 名字
指定维护者信息


RUN 命令
在所基于镜像上执行命令


CMD ["要运行的程序",“参数1”,“参数2”]
指定启动容器时默认执行的命令


LABEL
指定生成镜像的元数据标签信息


EXPOSE 端口号
指定新镜像加载到Docker时要开启的端口


ENV 环境变量 变量值
设置一个环境变量的值,会被后面的RUN使用


ADD < src >
赋值指定的< src > 路径下的内容到容器中的路径下,可以为URL;,要与Dockerfile位于相同目录;如果为tar文件,会自动解压到路径下


COPY < src >
复制本地主机的路径下的内容到镜像中的路径下;一般情况下推荐使用COPY,而不是ADD


ENTRYPOINT
指定镜像的默认入口


VOLUME [&quot;目录&quot;]
在容器中创建数据卷挂载点


USER 用户名/UID
指定运行容器时的用户名或UID


WORKDIR 路径
为后续的RUN、CMD、ENTRYPOINT指定工作目录


ARG
指定镜像内使用的参数(例如版本号信息等)


ONBUILD 命令
配置当前所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作指令


STOPSIGNAL
容器退出的信号值


HEALTHCHECK
如何进行健康检查


SHELL
指定使用shell时默认shell类型
  例如基于Dockerfile创建httpd镜像,步骤如下:
  (1)建立目录,作为生成镜像的工作目录

mkdir  apache
cd  apache
  (2)创建并编写Dockerfile文件

vim Dockerfile
#基于的基础镜像
FROM centos
#维护镜像的用户信息
MAINTAINER The porject
#镜像操作指令安装apache软件
RUN yum -y update
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"]
  (3)编写执行脚本内容

vim run.sh
#!/bin/bash
rm -rf /run/httpd/*   #清理httpd缓存
exec /usr/sbin/apachectl -D FOREGROUND  #启动apache服务
  (4)创建测试页面

echo "web test" > index.html
  需要注意的是Dockerfile文件、需要运行的脚本文件以及要复制到容器中的文件都必须在工作目录下同一级。

(5)使用Dockfile生成镜像


命令格式:docker build [选项] 路径
常用选项: -t 指定镜像的标签信息
docker build -t httpd:centos .   #注意别忘了末尾有"."

(6)使用新的镜像运行容器


docker run -d -p 1216:80 httpd:centos   #其中-p选项实现从本地端口1216到容器中的80端口的映射

可以看到该镜像已在容器中加载运行

  本机的ip地址是192.168.100.138,访问容器中的Apache服务。

firefox http://192.168.100.138:1216


创建私有仓库
  使用registry镜像来搭建本地私有仓库。

1.下载registry镜像

docker pull registry


2.在/etc/docker/目录下创建一个json文件,定义私有仓库地址

vim /etc/docker/daemon.json
{ "insecure-registries":["192.168.100.138:5000"]}
3.重启docker服务

systemctl start daemon-reload
systemctl restart docker.service
4.使用下载好的registry镜像启动一个容器


  • 默认情况下仓库存放于容器内的/tmp/registry目录下。
  • -v选项可以将本地目录挂载到容器内的/tmp/registry下使用,这样就不会容器被删除后镜像也会随之消失。
    docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry


    5.将上传的镜像标记

    docker tag httpd:centos 192.168.100.138:5000/httpd

6.上传做标记的镜像

docker push 192.168.100.138:5000/httpd


7.获取私有仓库列表

curl -XGET http://192.168.100.138:5000/v2/_catalog
curl -XGET http://192.168.100.138:5000/v2/httpd/tags/list


8.删除做标记的镜像

docker rmi 192.168.100.138:5000/httpd
docker images


9.从私有仓库下载标记的镜像

docker pull 192.168.100.138:5000/httpd

可以看出下载速度明显很快





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675069-1-1.html 上篇帖子: Docker安装以及镜像、容器的管理操作 下篇帖子: Docker数据管理、网络通信以及资源控制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表