Docker(二):Docker常用命令之镜像的创建:Dockerfile 与 commit

Docker(二):Docker常用命令之镜像的创建:Dockerfile 与 commit

 

相关阅读:

Docker(一):Docker的安装与常用命令

Docker(二):Docker常用命令之镜像的创建:Dockerfile 与 commit

Docker(三):Docker镜像导入与导出、恢复与加载与在Docker容器中安装软件

Docker(四):使用Docker部署tomcat、mysql、nginx文件服务器


 

从镜像仓库载的镜像,都是别人事先做好的。如果需要一个定制的镜像,就必须得自己动手了。自己创建一个镜像有2种方式:

a、使用commit命令基于一个现有的镜像来修改。本质上并不是新建一个镜像,而是基于一个已有的基础镜像进行修改。

b、基于Dockerfile来创建。

 

一、第一种方式:commit命令:

如果你修改了原本容器的某些配置,想要保存这个容器的配置并形成一个新的镜像,就可以使用commit命令,基于该容器创建出一个新的镜像。即:commit 主要用于通过差异性,创建一个新的image。

(1)commit命令格式如下:

docker commit [options] container [repository][:tag]]

 

options说明:

-a 提交的镜像作者

-c 使用Dockerfile 指令来创建镜像

-m 提交时的说明文字

-p 在commit时,将容器暂停,默认情况下,在提交时,容器的执行将被暂停,以保证数据的完整性。

(2)简单演示:

#查看本地的存在的容器
[root@izwz9ib5he33fx3jnuis2xz ~]# docker ps -a
CONTAINER ID    IMAGE       COMMAND              CREATED        STATUS           PORTS                    NAMES
b2e9025226f0    tomcat    “catalina.sh run”     2 days ago     Up 47 hours     0.0.0.0:8080->8080/tcp    tomcat1

#提交一个存在的容器,b2e9025226f0为本地容器的ID
[root@izwz9ib5he33fx3jnuis2xz ~]# docker commit -a “zhangweipeng” -m “mytomcat” b2e9025226f0 mytomcat:v1
sha256:d2259b053f5354dfee0def05e0540ca17e37a2baa0031f3d64b7491f9a5d34bc

 
#查看docker的镜像,可以看到我们新建的镜像
[root@izwz9ib5he33fx3jnuis2xz ~]# docker images
REPOSITORY        TAG         IMAGE ID            CREATED             SIZE
mytomcat          v1         d2259b053f53        8 seconds ago       569 MB

 

二、第二种方式:基于Dockerfile文件:

使用Dockerfile的方式其实是相当于从零开始创建一个新的镜像,具体步骤是先写好一个Dockerfile文件。然后使用docker build命令来构建镜像,构建时会从网上下载及更新基础镜像与相关软件。因此,这种方法的核心是编写好Dockerfile文件

通常一个dockerfile文件与shell脚本类似,是一个批处理的过程,但是它具有自己的命令和语法,因此,将构建镜像需要执行的命令写在Dockerfile文件里面。dockerfile的命令都是大写的,比如:FROM、RUN等。

(1)简单演示:

[root@izwz9ib5he33fx3jnuis2xz ~]# mkdir docker_file

[root@izwz9ib5he33fx3jnuis2xz ~]# cd docker_file/

#1、创建并编辑Dockerfile文件,将构建镜像需要使用的命令写到此文件中,该文件十分关键
[root@izwz9ib5he33fx3jnuis2xz docker_file]#vim Dockerfile

#2、查看Docker文件的内容:
[root@izwz9ib5he33fx3jnuis2xz docker_file]#cat Dockerfile
FROM ubuntu:14.04

ENTRYPOINT [“/bin/echo”]

 
#3、使用build命令构建镜像 .表示当前目录的所有文件
[root@izwz9ib5he33fx3jnuis2xz docker_file]#docker build .
Sending build context to Docker daemon2.048 kB
Step 1/2 : FROM ubuntu:14.04
 —> 8cef1fa16c77
Step 2/2 : ENTRYPOINT /bin/echo
 —> Running in e080bf082e4a
 —> 5cbf5ddc3059
Removing intermediate containere080bf082e4a
Successfully built 5cbf5ddc3059
#至此,镜像构建完成,新创建的镜像的id是5cbf5ddc3059,可以使用docker images命令查看

#4、运行镜像,生成一个新的容器
[root@izwz9ib5he33fx3jnuis2xz docker_file]#docker run 5cbf5ddc3059

#5、查看容器,可以看到生成一个新的容器
[root@izwz9ib5he33fx3jnuis2xz docker_file]#docker ps –a
CONTAINER ID    IMAGE          COMMAND       CREATED           STATUS                    PORTS      NAMES
75ccd954b6b8   5cbf5ddc3059   “/bin/echo”   15 minutes ago    Exited (0) 15 minutes ago            vibrant_swirles

#6、在创建容器的时候加入一个参数
[root@izwz9ib5he33fx3jnuis2xz docker_file]#docker run 5cbf5ddc3059 hello world
hello world

#1、重新编写Dockerfile文件
[root@izwz9ib5he33fx3jnuis2xz docker_file]#vim Dockerfile
#2、查看Dockerfile文件的内容
[root@izwz9ib5he33fx3jnuis2xz docker_file]#cat Dockerfile
FROM ubuntu:14.04

#ENTRYPOINT [“/bin/echo”,”Hiworld!”]
CMD [“/bin/echo”,”Hiworld!”]

 
#3、使用build命令构建镜像
[root@izwz9ib5he33fx3jnuis2xz docker_file]#docker build .
Sending build context to Docker daemon2.048 kB
Step 1/2 : FROM ubuntu:14.04
 —> 8cef1fa16c77
Step 2/2 : CMD /bin/echo Hi world!
 —> Running in 82d89be69ec6
 —> dcb78037c371
Removing intermediate container82d89be69ec6
Successfully built dcb78037c371

 
#4、通过新创建的镜像来创建容器
[root@izwz9ib5he33fx3jnuis2xz docker_file]#docker run dcb78037c371
Hi world!

[root@izwz9ib5he33fx3jnuis2xz docker_file]#docker run dcb78037c371 /bin/date
Thu May 24 14:33:02 UTC 2018

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114737.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • kafka集群搭建-docker版本[通俗易懂]

    kafka集群搭建-docker版本[通俗易懂]提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档kafka集群搭建文章目录kafka集群搭建前言一、kafka是什么?二、集群1.集群2.负载均衡3.扩容4.ZookeeperLeader选举kafka架构集群搭建下载安装zookeeper前言kafka是个高吞吐的消息中间件,为啥快啊?1顺序读写20拷贝3批量提交和批量ACK4分片和副本消息队列高可用就得用集群。提示:以下是本篇文章正文内容,下面案例可供参考一、kafka是什么?kafka理论参

    2022年5月2日
    82
  • docker端口映射无法外部访问_docker用户映射

    docker端口映射无法外部访问_docker用户映射端口映射容器中可以运行一些应用,要让外部也可以访问这些应用,可以通过-P或-p参数来指定端口映射。当使用大写的-P标记时,Docker会随机映射一个物理机的49000~49900之间的端口到内部容器开放的网络端口。-p则可以指定想要映射的物理机端口,并且,在一个指定端口上只可以绑定一个容器。1.映射指定的本地IP和端口到容器端口dockerrun-it-p192.168.10.10:8000:80busybox2.映射本地指定IP的任意端口到

    2022年10月18日
    0
  • Docker暴露2375端口导致服务器被攻击解决方法!

    Docker暴露2375端口导致服务器被攻击解决方法!相信了解过dockerremoteAPI的同学对2375端口都不陌生了,2375是docker远程操控的默认端口,通过这个端口可以直接对远程的dockerdaemon进行操作。当$HOST主机以dockerdaemon-H=0.0.0.0:2375方式启动daemon时,可以在外部机器对$HOST的dockerdaemon进行直接操作:docker-Htcp://$HOS…

    2022年4月29日
    260
  • 如何在docker容器中运行docker命令

    如何在docker容器中运行docker命令欢迎关注个人微信公众号:devopscube前言​Docker作为目前炙手可热的容器运行环境,越来越多的应用到应用的部署当中。这种一次打包,随处运行的模式备受好评,也节约了很多环境配置的麻烦。很多软件运行时都提供了docker的镜像部署方式,我们可以看到常用的组件,开源的项目,都会提供docker镜像,或者用于打包镜像的dockerfile。所以Docker已然成为了软件…

    2022年5月17日
    156
  • docker 入门_docker高级教程

    docker 入门_docker高级教程一、docker概述1.什么是dockerDocker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app),更重要的是容器性能开销极低。Docker从17.03版本之后分为CE(CommunityEdition:社区版)和E..

    2022年10月15日
    0
  • docker-compose 集群_基于hadoop的集群搭建

    docker-compose 集群_基于hadoop的集群搭建前言实际工作中我们部署一个应用,一般不仅仅只有一个容器,可能会涉及到多个,比如用到数据库,中间件MQ,web前端和后端服务,等多个容器。我们如果一个个去启动应用,当项目非常多时,就很难记住了,所有

    2022年7月29日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号