博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker 创建镜像
阅读量:5962 次
发布时间:2019-06-19

本文共 2283 字,大约阅读时间需要 7 分钟。

 

我们从镜像仓库下载的,都是别人事先做好的。如果我们需要一个定制的镜像,就必须得自己动手。自己创建一个镜像有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

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

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

[root@rocketmq-nameserver4 ~]# docker commit -m 'add json gem' -a 'Docker Container' 7cbcbcc5e574 my/sinatra:v2sha256:8ba1d6a3ce4e6bb17f32e6421b6ccc14c05640099a2c6f07014b88f7c7812178 -->运行命令,返回镜像ID参数说明:-m:提交的描述信息-a:指定镜像作者7cbcbcc5e574:容器ID,在容器执行时可以在命令行开头查看。比如:root@7cbcbcc5e574中@之后的内容。此外还可以通过docker images来查看my/sinatra:v2:指定要创建的目标镜像名

 

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

我们可以看到,一个容器就是一个微型的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首字母是大写

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

Dockerfile中内容如下:

------------------------------------------------------##注解FROM centos##FROM centos:6.7 MAINTAINER ruthless 41125784@qq.comRUN yum -qqy install python------------------------------------------------------

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

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

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

然后使用docker build构建镜像:

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

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

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

Dockerfile 来进行。 然后,Dockfile 中的指令被一条一条的执行。每一步都创建了一个新的容器,在容器中执行指令
并提交修改(就跟之前介绍过的 docker commit 一样)。当所有的指令都执行完毕之后,返回了最终的镜像 id。所有
的中间步骤所产生的容器都被删除和清理了。

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

c、查看刚创建的镜像

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

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

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

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

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

转载地址:http://qfjax.baihongyu.com/

你可能感兴趣的文章
用户需求和分析
查看>>
JS 基本操作
查看>>
MongoDB整理笔记のReplica Sets
查看>>
再诡异的现象背后可能只是一个傻X的低级错误——谈调试心态
查看>>
快速开发 HTML5 WebGL 的 3D 斜面拖拽生成模型
查看>>
html 学习
查看>>
tomcat如何利用waf进行防护
查看>>
2017最新教程--如何下载美拍视频
查看>>
Fixing an incomplete VM that’s stuck in the Creating state
查看>>
Hadoop 学习总结之三:Map-Reduce入门(转载)
查看>>
node 搭建开发框架express
查看>>
loadrunner-2-8HTML和URL模式
查看>>
RabbitMQ封装实战
查看>>
SQL Server VALUES 使用一记住
查看>>
原码、反码、补码、移码
查看>>
js禁止网页使用右键
查看>>
【百度地图API】——如何让标注自动呈现在最佳视野内
查看>>
数据结构(C语言)分享笔记:数据结构的逻辑层次、存储层次
查看>>
javascript数学运算符
查看>>
eclipse安装Run-Jetty-Run插件,修改实时生效
查看>>