zoukankan      html  css  js  c++  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

    添加完成后,使用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来启动容器

    我们可以看到,一个容器就是一个微型的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.com
    RUN 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就是修改标签过后的镜像。

  • 相关阅读:
    android开发过程遇到的一些错误
    TCP/IP协议详解笔记——ARP协议和RARP协议
    TCP/IP协议详解笔记——IP协议
    C# Exchange发送邮件
    Echarts柱状图堆叠显示总数
    Git解决fatal: unable to connect to github.com问题
    IIS 413错误 解决方案
    C#启动外部Exe控制台程序并输入命令
    再看JavaScript
    Web Api(5)
  • 原文地址:https://www.cnblogs.com/linjiqin/p/8588836.html
Copyright © 2011-2022 走看看