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

[经验分享] docker 制作镜像

[复制链接]

尚未签到

发表于 2019-2-21 11:06:12 | 显示全部楼层 |阅读模式
                                                                                  docker 制作镜像
  一、docker commit
  启动一个容器

  [root@foundation12 docker]# docker run -it --name web ubuntu

  docker commit 进行提交
  [root@foundation12 docker]# docker commit -m "add files" web addweb


  查看当前docker的镜像列表,发现刚才创建的镜像已经显示出来了
  [root@foundation12 docker]# docker images
  
  然后查看刚才提交的镜像的详细信息
  
  删除已启动的容器

  
  用刚提交的镜像,重新启动一个容器
  [root@foundation12 docker]# docker run -it addweb


  可以看到,新的容器保留了之前的修改。
  虽然镜像是可读的,但我们可以通过启动容器对镜像进行修改。
  二、docker build
  除了上述的方式docker commit可以将容器导成镜像之外,还可以通过docker build进行操作,不过两者有如下区别:
  (1)docker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。
(2)使用docker build创建镜像需要编写Dockerfile.这个相当于是自己编写策略,相当于是docker里的脚本,它具有可重复性、透明性。而且构建时是以层级进行构建的。非常方便。

  

  下面就以Dockerfile的形式来编写构建脚本
  

  首先创建一个目录来存放配置镜像所需的信息
  [root@foundation12 docker]# pwd
/tmp/docker
[root@foundation12 docker]# mkdir Dockerfile
[root@foundation12 docker]# cd Dockerfile

  

  首先我们查看下从那个已有的镜像进行拓展
  
  选择最后一个richxsl/rhel7,下面编写Dockerfile文件
  首先了解Dockerfile的语法
ADD
ADD命令有两个参数,源和目标。它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统。如果源是一个URL,那该URL的内容将被下载并复制到容器中。
CMD
和RUN命令相似,CMD可以用于执行特定的命令。和RUN不同的是,这些命令不是在镜像构建的过程中执行的,而是在用镜像构建容器后被调用。
ENV
ENV命令用于设置环境变量。这些变量以”key=value”的形式存在,并可以在容器内被脚本或者程序调用。这个机制给在容器中运行应用带来了极大的便利。
EXPOSE
EXPOSE用来指定端口,使容器内的应用可以通过端口和外界交互。
FROM
FROM命令可能是最重要的Dockerfile命令。改命令定义了使用哪个基础镜像启动构建流程。基础镜像可以为任意镜 像。如果基础镜像没有被发现,Docker将试图从Docker image index来查找该镜像。FROM命令必须是Dockerfile的首个命令。
RUN
RUN命令是Dockerfile执行命令的核心部分。它接受命令作为参数并用于创建镜像。不像CMD命令,RUN命令用于创建镜像(在之前commit的层之上形成新的层)。


  注:COPY与ADD的区别
  Dockerfile中的COPY指令和ADD指令都可以将主机上的资源复制或加入到容器镜像中,都是在构建镜像的过程中完成的。

  COPY指令和ADD指令的唯一区别在于是否支持从远程URL获取资源。COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中。而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。
  [root@foundation12 Dockerfile]# vim Dockerfile

  FROM richxsl/rhel7
MAINTAINER cara@huanzi.org
ENV HOSTNAME server1
EXPOSE 22
COPY dvd.repo /etc/yum.repos.d/dvd.repo
RUN yum install -y openssh-clients openssh-server && yum clean all && ssh-keygen -t rsa -f "/etc/ssh/ssh_host_ecdsa_key" -q -N "" && ssh-keygen -t ed25519 -f "/etc/ssh/ssh_host_ed25519_key" -q -N "" && echo root:redhat | chpasswd
CMD ["/usr/sbin/sshd","-D"]

  (1)在Dockerfile中,#开头的被认作是注释;
(2)FROM代表这从哪个指定的镜像为基础处理接下来的命令,如果该镜像不在本地,则docker会从dockerhub上进行下载。
(3)RUN代表着所需要执行的命令。
(4)COPY可以把指定的文件或者目录在创建镜像的时候拷贝到镜像的指定位置。

  [root@foundation12 Dockerfile]# vim dvd.repo

  [dvd]
name=rhel7.3
baseurl=http://172.25.12.250/rhel7.3
gpgcheck=0

  接下来执行Dockerfile脚本内容,[root@foundation12 Dockerfile]# docker build -t rhel7:v1 .


  
  

  可以看到docker build的执行是按照步骤分步执行的,这种创建镜像的方式非常的快捷,而且一旦出错可以快速定位有问题的步骤
  执行完成后,在镜像列表中可以看到新创建的镜像(第一个):
  

  以新创建的镜像去启动一个容器:
  [root@foundation12 Dockerfile]# docker run -d --name vm1 rhel7:v1
[root@foundation12 Dockerfile]# docker inspect vm1


  连接新的容器

  [root@foundation12 Dockerfile]# ssh root@172.17.0.2





运维网声明 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-675266-1-1.html 上篇帖子: CentOS7 部署Docker&搭建OwnCloud私人云盘服务 下篇帖子: docker 容器互联,Docker Compose
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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