创建属于自己的docker镜像

docker镜像是容器的基础,当每次执行docker run时就是在对docker说现在我需要哪个镜像。如果在你的docker主机上没有这个镜像,docker会自动从一个registry上下载这个镜像(默认为docker hub)

在这一节,我们将会探讨更多的关于docker镜像的内容:

  • 管理和使用本地镜像
  • 创建基础镜像

使用docker images命令列出本地的docker镜像

[[email protected] ~]# docker images 
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
docker-whale          latest              05bfcfec1909        7 days ago          252.7 MB
docker/docker-whale   latest              05bfcfec1909        7 days ago          252.7 MB
nginx                 latest              e43d811ce2f4        2 weeks ago         181.4 MB
ubuntu                latest              f753707788c5        3 weeks ago         127.1 MB

你可以看到所有之前用过的镜像,同时通过列出所有镜像,我们可以知道三个很重要的信息

  • 每个镜像来自于那个仓库(repository)
  • 每个惊喜的标签是什么(tag)
  • 每个镜像的IMAGE ID

一个镜像仓库中对于一个镜像可能有多个不同的变体,比如说对于ubuntu来说,我们可能会找到Ubuntu 10.04, 12.04, 12.10, 13.04, 13.10 and 14.04这么多不同的变体,所以我们会通过一个标签(tag)来区分不同的变体,如下所示

ubuntu:14.04

所以,当你要创建一个容器时,你可以参考下面来标记镜像

$ docker run -t -i ubuntu:14.04 /bin/bash

如果你想创建一个Ubuntu 12.04的容器,请参考下面:

$ docker run -t -i ubuntu:12.04 /bin/bash

如果你没有指定标签,我们还用ubuntu举例,docker会默认使用ubuntu:latest镜像

Tip:我们应该尽量指定镜像标签,例如ubuntu:14.04,那样我们就能精确地知道我们使用的是哪个镜像,对我们后期的排查和调试会有很大帮助

现在获取一个新的镜像

$ docker pull centos

Using default tag: latest
latest: Pulling from library/centos
f1b10cd84249: Pull complete
c852f6d61e65: Pull complete
7322fbe74aa5: Pull complete
Digest: sha256:90305c9112250c7e3746425477f1c4ef112b03b4abe78c612e092037bfecc3b7
Status: Downloaded newer image for centos:latest

查找一个镜像

$ docker search sinatra
NAME                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
training/sinatra                       Sinatra training image                          0                    [OK]
marceldegraaf/sinatra                  Sinatra test app                                0
mattwarren/docker-sinatra-demo                                                                  0. . .

如果这其中有你需要的镜像,你就可以把它pull到本地了

$ docker pull training/sinatra

创建一个我们自己的镜像

我们从docker hub上下载的镜像可能不能完全满足我们的实际需要,这时候我们就需要对他做一些更新或修改了,我们主要更新或修改一个镜像的方式主要有以下两种:

  • 先用镜像创建出一个容器,然后对容器做修改,最后将容器提交(commit)为一个新的镜像
首先创建一个容器
$ docker run -t -i training/sinatra /bin/bash

[email protected]:/#

在容器内安装一些需要的软件包
[email protected]:/# apt-get install -y ruby2.0-dev ruby2.0

将这个容器提交为新的镜像
$ docker commit -m "Added json gem" -a "Kate Smith" 0b2616b0e5a8 ouruser/sinatra:v2

之后通过这个镜像创建的容器就会有上面安装的软件包了
  • 可以用Dockerfile去创建一个指定的镜像
首先创建一个目录和一个Dockerfile
$ mkdir sinatra
$ cd sinatra
$ touch Dockerfile

向Dockerfile中写入指令
# This is a comment
FROM ubuntu:14.04
MAINTAINER Kate Smith <[email protected]>
RUN apt-get update && apt-get install -y ruby ruby-dev
RUN gem install sinatra

然后就可以通过build命令创建自己定制的镜像
$ docker build -t ouruser/sinatra:v2 .

Note:一个镜像最多不能超过127层,这是为了使镜像的整体大小处在一个最佳状态的全局设置

时间: 2024-08-08 19:13:00

创建属于自己的docker镜像的相关文章

创建支持ssh的docker镜像

docker容器运行,一般不能ssh,这容器的管理带来麻烦,下面将介绍如何创建支持ssh的docker镜像 首先从dock hub  下载 ubuntu的镜像 命令: docker pull ubuntu 新建一个ssh_ubuntu 目录 mkdir /ssh_ubuntu cd /ssh_ubuntu ;touch Dockerfile vi Dockerfile Dockerfile内容 FROM ubuntu MAINTAINER lincoln_zhongRUN apt-get upd

从头基于空镜像scratch创建一个新的Docker镜像

我们在使用Dockerfile构建docker镜像时,一种方式是使用官方预先配置好的容器镜像.优点是我们不用从头开始构建,节省了很多工作量,但付出的代价是需要下载很大的镜像包. 比如我机器上docker images返回的这些基于nginx的镜像,每个都超过了100MB,而一个简单的Ubuntu的容器超过了200MB,如果安装了相关的软件,尺寸会更大. 如果我们的需求是在构建一个符合我们实际业务需求的Docker镜像的前提下,确保镜像尺寸尽可能的小,应该怎么做呢? 思路是使用空镜像scratch

Docker镜像的创建及上传

Docker镜像的创建及上传 Docker镜像介绍 Docker镜像除了是Docker的核心技术之外也是应用发布的标准格式.一个完整的Docker镜像可以支撑一个Docker容器的运行,在Docker的整个使用过程中,进入一个已经定型的容器之后,就可以在容器中,进行操作,最常见的操作就是在容器中安装应用,如果要把已经安装的服务进行迁移,就需要把环境以及搭建的服务生成新的镜像. 创建镜像的方法有三种,分别是基于已有镜像.基于本地模版以及基于Dockerfile创建. 基于已有镜像创建 基于已有的镜

Docker 镜像-管理-导入-导出

目录 Docker 镜像基本概念 Docker 镜像加速 Docker 镜像 常用命令 Docker 镜像的创建和导出导入 Docker 镜像基本概念 我们使用的容器都是基于镜像的,镜像是由多层组成的,容器是在镜像上面添加了一个读写层.镜像一般储存在 /var/lib/docker/image/. 多个容器是引用的同一个 镜像,容器不会更改镜像的内容,而是创建一个可写层,并将数据保存在 /var/lib/docker/containers 中. Docker 镜像加速 当我们在使用 Docker

.Net Core(完) 创建Docker镜像

使用Docker可以在操作系统上分出多个独立的区域(容器/Container),各个容器之间基本隔离,且可以有自己单独的系统配置.软件等,各个容器之间的软件基本不会互相干扰.Docker上配置好的容器可以随意移动到其它计算机中运行.Docker可以很好得保证应用之间的互相隔离,同时Docker的进程跑在原生操作系统上,不会像虚拟机哪样性能差.Docker还能更好地满足网站对于可伸缩性的要求,可以按需自动扩容,同时docker还具有"即抛"的特性,访问高峰过去后也可以减少容器的数量. 一

Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较

1.概述 创建Docker镜像的方式有三种 docker commit命令:由容器生成镜像: Dockerfile文件+docker build命令: 从本地文件系统导入:OpenVZ的模板. 关于这三种方式的大致说明请参考yeasy/docker_practice的创建镜像. 最近学习了Dockerfile文件的相关配置,这里做一下简单的总结,并对之前一直感到有些迷惑的CMD和ENTRYPOINT指令做个差异对比. 2.Dockerfile文件总结 Dockerfile 由一行行命令语句组成,

如何交互式地创建一个Docker镜像

今天我们来学习如何使用一个docker镜像交互式地创建一个Docker镜像.当我们从镜像中启动一个Docker进程,Docker就会获取该镜像及其父镜像,并重复这个过程,直到到达基础镜像.然后联合文件系统(UFS)会在其顶层添加一个读写层.读写层被称之为容器,它包含了一些关于父镜像信息及一些其他的信息,如唯一ID,网络配置和资源限制等.容器是有状态的,其状态可以从 运行态 切换到 退出态.一个处于 运行态的容器包含了在CPU上面运行的进程树,于其它在该主机上运行的进程相隔离,而退出态是指文件系统

docker镜像的创建

获得更多资料欢迎进入我的网站或者 csdn或者博客园 昨天讲解了docker的安装与基本使用,今天给大家讲解下docker镜像的创建的方法,以及push到Docker Hub docker安装请点击右边:ubuntu15.04下安装docker 修改已有镜像 启动已下载镜像 peace@peace:~$ sudo docker run -t -i ubuntu:12.04 /bin/bash root@909634e032f9:/# cd /home #进入home目录建立文件夹 1.c roo

创建超小的Golang docker 镜像

原文: http://colobu.com/2015/10/12/create-minimal-golang-docker-images/ 本文对于创建超小的镜像非常有用 Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源.正如DockerPool在免费Docker电子书Docker -- 从入门到实践中这样提到的: 作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具