制作Docker镜像有两种方式:第一种、docker commit,保存容器(Container)的当前状态到镜像后,然后生成对应的image;第二种、docker build,使用Dockerfile文件自动化制作镜像。

(1).docker commit

  启动一个实例,安装apache

  1. [root@youxi1 ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. centos latest 67fa590cfc1c 3 weeks ago 202MB
  4. hub.c.163.com/library/tomcat latest 72d2be374029 2 years ago 292MB
  5. [root@youxi1 ~]# docker run -it centos:latest /bin/bash
  6. [root@985ef7e0c4ca /]# yum -y install httpd
  7. [root@985ef7e0c4ca /]# exit
  8. exit

  根据容器当前状态制作一个镜像,语法docker commit <容器ID> [仓库]:[标签]

  1. [root@youxi1 ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 985ef7e0c4ca centos:latest "/bin/bash" 4 minutes ago Exited (0) 2 minutes ago sharp_kare
  4. 9a81af9b4134 centos:latest "/bin/bash" 2 days ago Exited (0) 2 days ago pensive_dijkstra
  5. 3ecc9bafd429 centos:latest "/bin/bash" 2 days ago Exited (0) 2 days ago sleepy_wilbur
  6. [root@youxi1 ~]# docker commit 985ef7e0c4ca centos:httpd
  7. sha256:bdd371e6f1cf035bd501c09b28a2b2827900973a0defa9e35eadcd2f2f55e5e4
  8. [root@youxi1 ~]# docker images
  9. REPOSITORY TAG IMAGE ID CREATED SIZE
  10. centos httpd bdd371e6f1cf 14 seconds ago 346MB
  11. centos latest 67fa590cfc1c 3 weeks ago 202MB
  12. hub.c.163.com/library/tomcat latest 72d2be374029 2 years ago 292MB

  启动新创建的镜像,查看是否存在httpd服务

  1. [root@youxi1 ~]# docker run -it centos:httpd /bin/bash
  2. [root@34ac01c03fe3 /]# rpm -qa httpd  //可以看到是存在的
  3. httpd-2.4.6-89.el7.centos.1.x86_64

(2).docker build

  使用docker build创建镜像时,需要使用Dockerfile文件自动化制作镜像。Dockerfile类似源码编译./configure后产生的Makefile。

  创建工作目录,制作Dockerfile

  1. [root@youxi1 ~]# mkdir /docker-build
  2. [root@youxi1 ~]# vim /docker-build/Dockerfile
  3. FROM centos:latest  #以哪个镜像为基础
  4. MAINTAINER <youxi@163.com>  #镜像创建者
  5. RUN yum -y install httpd  #运行安装httpd命令
  6. ADD start.sh /usr/local/bin/start.sh  #将本地文件拷贝到镜像中,权限为0755(?),uid和gid为0
  7. ADD index.html /var/www/html/index.html
  8. CMD /usr/local/bin/start.sh  #实例启动后执行的命令,一般跟需要开机启动的服务或脚本

  创建start.sh和index.html

  1. [root@youxi1 ~]# echo "/usr/sbin/httpd -DFOREGROUND" > /docker-build/start.sh
  2. [root@youxi1 ~]# chmod +x /docker-build/start.sh
  3. [root@youxi1 ~]# echo "docker image build test" > /docker-build/index.html

  删除已有的centos:httpd

  1. [root@youxi1 ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 34ac01c03fe3 centos:httpd "/bin/bash" About an hour ago Exited (0) 43 minutes ago gifted_cerf
  4. 985ef7e0c4ca centos:latest "/bin/bash" About an hour ago Exited (0) About an hour ago sharp_kare
  5. 9a81af9b4134 centos:latest "/bin/bash" 2 days ago Exited (0) 2 days ago pensive_dijkstra
  6. 3ecc9bafd429 centos:latest "/bin/bash" 2 days ago Exited (0) 2 days ago sleepy_wilbur
  7. [root@youxi1 ~]# docker stop 34ac01c03fe3
  8. 34ac01c03fe3
  9. [root@youxi1 ~]# docker rm 34ac01c03fe3
  10. 34ac01c03fe3
  11. [root@youxi1 ~]# docker ps -a
  12. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  13. 985ef7e0c4ca centos:latest "/bin/bash" About an hour ago Exited (0) About an hour ago sharp_kare
  14. 9a81af9b4134 centos:latest "/bin/bash" 2 days ago Exited (0) 2 days ago pensive_dijkstra
  15. 3ecc9bafd429 centos:latest "/bin/bash" 2 days ago Exited (0) 2 days ago
  16. [root@youxi1 ~]# docker rmi centos:httpd
  17. Untagged: centos:httpd
  18. Deleted: sha256:bdd371e6f1cf035bd501c09b28a2b2827900973a0defa9e35eadcd2f2f55e5e4
  19. Deleted: sha256:e5f250b390d99269c53a6150c776f5af4e74b965f4c86977fea7582b9e624870
  20. [root@youxi1 ~]# docker images
  21. REPOSITORY TAG IMAGE ID CREATED SIZE
  22. centos latest 67fa590cfc1c 3 weeks ago 202MB
  23. hub.c.163.com/library/tomcat latest 72d2be374029 2 years ago 292MB

  使用build创建新的镜像,语法docker build -t [仓库名]:[标签] [Dockerfile文件路径]

  1. [root@youxi1 ~]# docker build -t centos:httpd /docker-build/
  2. [root@youxi1 ~]# docker images
  3. REPOSITORY TAG IMAGE ID CREATED SIZE
  4. centos httpd 565f0e4e1ef3 About a minute ago 346MB
  5. centos latest 67fa590cfc1c 3 weeks ago 202MB
  6. hub.c.163.com/library/tomcat latest 72d2be374029 2 years ago 292MB

(3).Docker镜像发布

 1)发布到本地

  语法:docker save  -o [tar包名] [仓库名]:[标签]

  1. [root@youxi1 ~]# docker save -o docker.id-centos-httpd-image.tar centos:httpd
  2. [root@youxi1 ~]# ll -h
  3. 总用量 346M
  4. -rw-------. 1 root root 1.6K 5 14 09:20 anaconda-ks.cfg
  5. -rw------- 1 root root 339M 9 14 15:26 docker.id-centos-httpd-image.tar

 2)发布到网上

  一般先到https://hub.docker.com/(DockerHub)上注册一个账号,并创建一个存储库

  使用命令登录

  1. [root@youxi1 ~]# docker login -u [用户名] -p [密码]
  2. WARNING! Using --password via the CLI is insecure. Use --password-stdin.
  3.  
  4. WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
  5. Configure a credential helper to remove this warning. See
  6. https://docs.docker.com/engine/reference/commandline/login/#credentials-store
  7.  
  8. Login Succeeded

  上传镜像。注意:上传前需要修改仓库名,否则上传有问题。

  1. [root@youxi1 ~]# docker tag centos:httpd ghhh4512/centos:httpd  //这里的ghhh4512是我的Docker用户名,centos是建立的存储库
  2. [root@youxi1 ~]# docker push ghhh4512/centos:httpd
  3. The push refers to repository [docker.io/ghhh4512/centos]
  4. 7873e44b6044: Pushed
  5. 0e86f20c1056: Pushed
  6. b3e0fc83922e: Pushed
  7. 877b494a9f30: Pushed
  8. httpd: digest: sha256:464ffb58cbc2334a936bea7081db41b257afb5b21dfcce6dd27863dc9b777855 size: 1155

  

Docker容器(二)——镜像制作的更多相关文章

  1. Docker系列-(2) 镜像制作与发布

    上篇文章引入了Docker的基本原理和操作,本节文章主要介绍如何制作Docker镜像和发布. 镜像文件结构 Docker镜像的本质是一系列文件的集合,这些文件依次叠加,形成了最后的镜像文件,类似于下图 ...

  2. Docker Java程序镜像制作

    Docker Java程序镜像制作 制作前的准备 jre:不需要完整的jdk,jre即可,到Oracle进行下载即可,下载链接,根据自己的情况进行选择,这里选择jre-8u221-linux-x64. ...

  3. Docker容器 关于镜像构建的安全问题

    写在前面 确保容器中服务与应用安全是容器化演进的关键点.容器安全涉及到应用开发与维护的整个生命周期,本文主要从镜像构建的视角来看docker容器的一些安全问题及应对措施. 一.权限管理 1.避免以容器 ...

  4. 理解docker容器和镜像(layer,ufs)和docker命令解释

    博客好文1:http://blog.csdn.net/x931100537/article/details/49633107(理解docker容器和镜像,理解简单,从原理入手,什么是layer,什么是 ...

  5. [转]图解Docker容器和镜像

    本文转自:https://www.cnblogs.com/wangqiaomei/p/5818636.html 图解Docker容器和镜像 这篇文章希望能够帮助读者深入理解Docker的命令,还有容器 ...

  6. 图解Docker容器和镜像

    图解Docker容器和镜像 这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(container)和镜像(image)之间的区别,并深入探讨容器和运行中的容器之间的区别. 当我对Docke ...

  7. 【原创】深入理解Docker容器和镜像 -- 分析了docker的命令含义

    10张图带你深入理解Docker容器和镜像 镜像(Image)就是一堆只读层(read-only layer)的统一视角 要点:容器 = 镜像 + 读写层.并且容器的定义并没有提及是否要运行容器. 一 ...

  8. Docker容器和镜像的区别

    docker容器和镜像区别  转自 https://www.cnblogs.com/bethal/p/5942369.html 这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(conta ...

  9. Docker镜像管理基础与基于容器的镜像制作示例

    一.Docker镜像 Docker镜像是启动Docker容器的一个非常重要的组件.Docker各组件之间的关系如图: Docker镜像含有启动容器所需要的文件系统及其内容,因此Docker镜像用于创建 ...

  10. Docker2 docker commit方法镜像制作

    一.前期准备 1.下载一个centos镜像,进入容器,安装wget docker pull centos docker run -it centos bash [root@web1 ~]# docke ...

随机推荐

  1. c# 隐藏窗口在ALT+TAB中

    winform: protected override CreateParams CreateParams { get { const int WS_EX_APPWINDOW = 0x40000; c ...

  2. 华东交通大学 2019 I 不要666 数位dp进阶

    Problem Description 题库链接 666是一个网络用语,用来形容某人或某物很厉害很牛.而在西方,666指魔鬼,撒旦和灵魂,是不吉利的象征.所以邓志聪并不喜欢任何与6有关的数字.什么数字 ...

  3. Kubernetes 学习4 kubernetes应用快速入门

    一.相关命令 1.kubectl 通过连接api server 进行各k8s对象资源的增删改查,如pod,service,controller(控制器),我们常用的pod控制器replicaset,d ...

  4. YAML_13 嵌套循环,循环添加多用户

    with_nested ansible]# vim add1.yml --- - hosts: web2   remote_user: root   vars:     un: [a, b, c]   ...

  5. my.conf

    [client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock basedir ...

  6. Codevs 1070 普通递归关系(矩阵乘法)

    1070 普通递归关系 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 考虑以下定义在非负整数n上的递归关系 f(n) = f0 ...

  7. 洛谷 P2661 信息传递 题解

    P2661 信息传递 题目描述 有 \(n\) 个同学(编号为 \(1\) 到 \(n\) )正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 \(i\) 的同学的信息传 ...

  8. COGS 1583. [POJ3237]树的维护

    二次联通门 : COGS 1583. [POJ3237]树的维护 /* COGS 1583. [POJ3237]树的维护 树链剖分 + 边权化点权 线段树 单点修改 + 区间取相反数 + 查询区间最大 ...

  9. HIVE 乱码以及 HUE SQL 语句兼容性的记录(遇到应该会一直更新)

    最近在 HUE 里面查询有中文字段相关的东西被报错警告... (1366, Incorrect string value: \\xE4\\xBA\\xAC\\xE4\\xB8\\x9C... for ...

  10. php 数组元素加法

    <?php//添加一个元素 $dirs[] = '1location';//再次添加一个元素 $dirs[] = '2location';//第三次添加一个元素 $dirs[] = '3loca ...