docker创建java镜像_Docker 创建镜像

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

a、基于一个现有的镜像来修改

b、基于Dockerfile来创建

1、基于一个现有的镜像进行修改

a.修改已有镜像

先使用docker pull training/sinatra下载镜像

b.启动镜像

[root@rocketmq-nameserver4 ~]# docker run -i -t training/sinatra /bin/bash

c. 在镜像中添加json和gem两个应用

root@7cbcbcc5e574:/# gem install json

374a921d9435658ad6fc816f23383111.png

添加完成后,使用exit退出容器,我们在容器中添加了新的应用,容器被改变。

d、我们使用docker commit命令来提交更新后的副本

[root@rocketmq-nameserver4 ~]# docker commit -m 'add json gem' -a 'Docker Container' 7cbcbcc5e574 my/sinatra:v2

sha256:8ba1d6a3ce4e6bb17f32e6421b6ccc14c05640099a2c6f07014b88f7c7812178 -->运行命令,返回镜像ID

参数说明:

-m:提交的描述信息

-a:指定镜像作者

7cbcbcc5e574:容器ID,在容器执行时可以在命令行开头查看。比如:root@7cbcbcc5e574中@之后的内容。此外还可以通过docker images来查看

my/sinatra:v2:指定要创建的目标镜像名

e.使用我们自己创建的镜像my/sinatra:v2来启动容器

9b709e667986642b7049d398db38a938.png

我们可以看到,一个容器就是一个微型的LINUX系统

2、本地文件系统创建镜像

使用Dockerfile来创建镜像,使用docker commit虽然很容易扩展镜像,但不便于团队分享,我们可以使用docker build来创建一个新的镜像,为此首先要创建一个Dockerfile文件,这个文件中包含如何创建镜像的指令。

a.首先新建一个目录和Dockerfile

[root@rocketmq-nameserver4 centos]# cd /home/xm6f/dev

[root@rocketmq-nameserver4 centos]# mkdir centos

[root@rocketmq-nameserver4 centos]# cd centos/

[root@rocketmq-nameserver4 centos]# touch Dockerfile #注意Dockerfile首字母是大写

6c9319b95a5b3dec0397be9967dc0929.png

b.Dockerfile中输入指令,每条指令都创建镜像的一层。

Dockerfile中内容如下:

------------------------------------------------------

##注解

FROM centos

##FROM centos:6.7

MAINTAINER ruthless 41125784@qq.com

RUN yum -qqy install python

------------------------------------------------------

它与shell脚本类似,是一个批处理的过程,但是它具有自己的命令和语法。Dockerfile的命令都是大写的,比如:FROM、RUN等。

FROM:告诉Docker使用哪个镜像作为基础

MAINTAINER:维护者的信息

RUN开头的指令会在创建中运行,例如安装一些软件包,这里使用yum 安装python;注意使用yum 需要制定参数 -qqy,不然呢可能会报错的。

6e08489a729ee180976438974ecc6d40.png

然后使用docker build构建镜像:

$ docker build -t='my/centos_width_python:v1.0.1' . ##注意此处有个".",表示从当前目录查找Dockerfile

e319a6db50cfdc15f85446230e3b4d35.png

其中 -t 标记来添加 tag,指定新的镜像的用户信息。 “.” 是 Dockerfile 所在的路径(当前目录),也可以替换为一个具体的 Dockerfile 的路径。

可以看到 build 进程在执行操作。它要做的第一件事情就是上传这个 Dockerfile 内容,因为所有的操作都要依据

Dockerfile 来进行。 然后,Dockfile 中的指令被一条一条的执行。每一步都创建了一个新的容器,在容器中执行指令

并提交修改(就跟之前介绍过的 docker commit 一样)。当所有的指令都执行完毕之后,返回了最终的镜像 id。所有

的中间步骤所产生的容器都被删除和清理了。

需要注意的是一个镜像是不能操作127层的,否则会报错!

c、查看刚创建的镜像

6528843f42470102566bef9d3175d568.png

当然Dockerfile中还可以输入其他的命令,例如可以使用ADD命令复制本地文件到镜像中;用EXPOSE命令对外开放端口;用CMD命令描述容器启动后运行的程序。

d.现在可以使用创建好的镜像来启动容器

[root@rocketmq-nameserver4 centos]# docker run -i -t my/centos_width_python:v1.0.1 /bin/bash

现在觉的镜像的标签不好,可以使用docker tag 命来来修改镜像的标签。

6c2e31804205130430ee53bcaa1ef126.png

通过docker images命令发现,my/python就是修改标签过后的镜像。

https://www.cnblogs.com/linjiqin/category/1108912.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值