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

[经验分享] Docker镜像的创建方法与数据管理

[复制链接]

尚未签到

发表于 2019-2-21 08:13:55 | 显示全部楼层 |阅读模式
Docker镜像的创建方法


  • 创建镜像的方法有三种,分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile 创建。

1、基于已有镜像创建


  • 基于已有镜像创建主要使用Docker commit 命令。实质就是把一个容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像。

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

  • 基于已有的httpd镜像来创建新的镜像;

> docker images                 #查看镜像信息
>
> docker create -it httpd /bin/bash         #创建容器;可以不用运行
>
> docker ps -a                              #查看容器运行信息
>
> docker commit -m "new" -a "httpd01" fddb8d93d6a7 httpd01:test         #创建一个名为httpd01,标签为test 的新镜像
>
> docker images | grep httpd01              #查看新创建的镜像信息


2、基于本地模板创建


  • 通过导入操作系统模板文件可以生成镜像,模板可以从OPENVZ开源项目下载,下载地址为http://download.openvz.org/template/precreated/。
  • 使用docker导入命令将下载的debin模板压缩包导入为本地镜像;

> wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz     #下载模板压缩包  
>
> cat debian-7.0-x86-minimal.tar.gz | docker import - debin01:new                       #导入模板压缩包生成镜像
>
> docker images | grep new                                                              #查看新生成的镜像信息
3、基于Dockerfile 创建(推荐)


  • Dockerfile是由一组指令组成的文件,其中命一条指令对应Linux中的命令,Docker程序将读取Dockerfile中的指令生成指定镜像。
  • Dockerfile结构大致分为四大部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。Docker每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释。
  • 在编写Dockerfile时,有严格的格式需要遵循:第一行必须使用FROM指令指明所基于的镜像名称;之后使用MAINTAINER指令说明维护镜像的用户信息;然后是镜像操作相关指令,如RUN指令,每一条都会给基础镜像添加新的一层;最后使用CMD指令,来指定启动容器时需要运行的命令操作。
  • Docker操作指令:


header 1
header 2




指令
含义


FROM 镜像
指定新镜像所基于的镜像,第一条指令必须为FORM指令,每创建一个镜像就需要一条FROM指令


MAINTAINER名字
说明新镜像的维护人信息


RUN 命令
在所基于的镜像上执行命令,并提交到新的镜像中


CMD["要运行的程序","参数1","参数2"]
指定启动容器时要运行的命令或脚本,Dockerfile只能有一条CMD命令,如果指定多条则只执行最后一条


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


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


ADD 源文件/目录 目标文件/目录
将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL


COPY 源文件/目录 目标文件/目录
将本地主机上的源文件/目标复制到目标地点,源文件/目录要与Dockerfile位于相同目录中


VOLUME ["目录"]
在容器中创建一个挂载点


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


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


ONBUILD 命令
指定所生成的镜像作为一个基础镜像时所需要运行的命令

  mkdir  apache             #创建工作目录
  cd  apache
  vim Dockerfile            #编写Dockerfile文件


#基于的基础镜像
FROM centos
#维护镜像的用户信息
MAINTAINER this is first test
#镜像操作指令安装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"]
  vim run.sh#编写执行脚本


#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
  echo "this is web test" > index.html          #创建测试页面
  docker build -t httpd:centos .                #生成镜像(注意别忘了末尾有".")
  docker run -d -p 49188:80 httpd:centos         #运行镜像;-p实现从本地端口49188到容器80端口的映射



  • 使用浏览器查看容器中Apache服务测试页;


Docker镜像上传私有仓库

  docker pull registry
  vim /etc/docker/daemon.json               #创建一个json文件,否则在往自定义的私用仓库中上传镜像时,会报错


{"insecure-registries":["192.168.190.139:5000"]}       #本地IP地址和使用端口
  systemctl restart docker.service          #重启docker
  docker create -it registry /bin/bash      #创建registry容器
  docker ps -a                              #查看容器运行信息
  docker start 4748e2cce568                 #启动容器
  docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry       #宿主机的/data/registry自动创建挂载容器中的/tmp/registry
  docker tag httpd 192.168.190.139:5000/test01          #更改标记为192.168.190.138:5000/test01
  docker push 192.168.190.139:5000/test01                                  #上传
  curl -XGET http://192.168.190.139:5000/v2/_catalog                        #获取私有仓库列表



Docker 的数据管理

1、数据卷


  • 数据卷是一个共容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。
  • 在docker run 命令中使用-v选项可以在容器内创建数据卷。多次使用-v选项可创建多个数据卷。使用--name 选项可以给容器创建一个友好的自定义名称。

  docker run  -v /var/www:/data1 --name web1 -it httpd /bin/bash        #宿主机目录/var/www 挂载容器中的/data
  cd /data1                 #cd到容器的挂载目录
  touch test01              #创建一个空文件
  exit                      #退出
  ls /var/www               #查看宿主机相对应的目录



2、数据卷容器


  • 数据卷容器就是一个普通的容器,专门提供数据卷给其他容器挂载使用。使用方法如下:首先,需创建一个容器作为数据卷容器,之后在其他容器创建时用 --volumes-from挂载数据卷容器中的数据卷使用。

  docker run --name web2 -v /data1 -v /data2 -it httpd /bin/bash       #数据卷容器
  docker run -it --volumes-from web2 --name db1 httpd /bin/bash        #新容器挂载数据卷容器web2



  • 在db1容器数据卷/data1中创建一个文件,在web2容器中的/data1目录中也可以看到。





运维网声明 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-675083-1-1.html 上篇帖子: Docker(五)建立私有仓库 下篇帖子: Docker数据管理及网络通信
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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