如何创建一个 Docker 镜像

原创 2018年04月15日 07:02:06

在 前面的文章 中,我们学习了在 Linux、macOS、以及 Windows 上如何使用 Docker 的基础知识。在这篇文章中,我们将学习创建 Docker 镜像的基本知识。我们可以在 DockerHub 上得到可用于你自己的项目的预构建镜像,并且也可以将你自己的镜像发布到这里。

我们使用预构建镜像得到一个基本的 Linux 子系统,因为,从头开始构建需要大量的工作。你可以使用 Alpine( Docker 版使用的官方版本)、Ubuntu、BusyBox、或者 scratch。在我们的示例中,我将使用 Ubuntu。

在我们开始构建镜像之前,让我们先“容器化”它们!我的意思是,为你的所有 Docker 镜像创建目录,这样你就可以维护不同的项目和阶段,并保持它们彼此隔离。

$ mkdir dockerprojects
cd dockerprojects

现在,在 dockerprojects 目录中,你可以使用自己喜欢的文本编辑器去创建一个 Dockerfile 文件;我喜欢使用 nano,它对新手来说很容易上手。

$ nano Dockerfile

然后添加这样的一行内容:

FROM Ubuntu

图0:如何创建一个 Docker 镜像

使用 Ctrl+Exit 然后选择 Y 去保存它。

现在开始创建你的新镜像,然后给它起一个名字(在刚才的目录中运行如下的命令):

$ docker build -t dockp .

(注意命令后面的圆点)这样就创建成功了,因此,你将看到如下内容:

Sending build context to Docker daemon  2.048kB
Step 1/1 : FROM ubuntu
---> 2a4cca5ac898
Successfully built 2a4cca5ac898
Successfully tagged dockp:latest

现在去运行和测试一下你的镜像:

$ docker run -it Ubuntu

你将看到 root 提示符:

root@c06fcd6af0e8:/#

这意味着在 Linux、Windows、或者 macOS 中你可以运行一个最小的 Ubuntu 了。你可以运行所有的 Ubuntu 原生命令或者 CLI 实用程序。

图1:如何创建一个 Docker 镜像

我们来查看一下在你的目录下你拥有的所有 Docker 镜像:

$docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
dockp latest 2a4cca5ac898 1 hour ago 111MB
ubuntu latest 2a4cca5ac898 1 hour ago 111MB
hello-world latest f2a91732366c 8 weeks ago 1.85kB

你可以看到共有三个镜像:dockpUbuntu、和 hello-worldhello-world 是我在几周前创建的,这一系列的前面的文章就是在它下面工作的。构建一个完整的 LAMP 栈可能是一个挑战,因此,我们使用 Dockerfile 去创建一个简单的 Apache 服务器镜像。

从本质上说,Dockerfile 是安装所有需要的包、配置、以及拷贝文件的一套指令。在这个案例中,它是安装配置 Apache 和 Nginx。

你也可以在 DockerHub 上去创建一个帐户,然后在构建镜像之前登入到你的帐户,在这个案例中,你需要从 DockerHub 上拉取一些东西。从命令行中登入 DockerHub,运行如下所求的命令:

$ docker login

在登入时输入你的用户名和密码。

接下来,为这个 Docker 项目,在目录中创建一个 Apache 目录:

$ mkdir apache

在 Apache 目录中创建 Dockerfile 文件:

$ nano Dockerfile

然后,粘贴下列内容:

FROM ubuntu
MAINTAINER Kimbro Staken version: 0.1
RUN apt-get update && apt-get install -y apache2 && apt-get clean && rm -rf /var/lib/apt/lists/*

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

然后,构建镜像:

docker build -t apache .

(注意命令尾部的空格和圆点)

这将花费一些时间,然后你将看到如下的构建成功的消息:

Successfully built e7083fd898c7
Successfully tagged ng:latest
Swapnil:apache swapnil$

现在,我们来运行一下这个服务器:

$ docker run -d apache
a189a4db0f7c245dd6c934ef7164f3ddde09e1f3018b5b90350df8be85c8dc98

发现了吗,你的容器镜像已经运行了。可以运行如下的命令来检查所有运行的容器:

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED
a189a4db0f7 apache "/usr/sbin/apache2ctl" 10 seconds ago

你可以使用 docker kill 命令来杀死容器:

$docker kill a189a4db0f7

正如你所见,这个 “镜像” 它已经永久存在于你的目录中了,而不论运行与否。现在你可以根据你的需要创建很多的镜像,并且可以从这些镜像中繁衍出来更多的镜像。

这就是如何去创建镜像和运行容器。

DirectX5.0最新游戏编程指南 DirectDraw篇 三、DirectDraw的要素(四)

5、调色板(Palette)    调色表面需要有调色板才能正确地显示出来。一个调色表面(既颜色索引标)是一些数字的简单集合,其中每个每个数字都表征了一个像素。数字的值是一个颜色表的索引,它告诉Dir...
  • holyfire
  • holyfire
  • 2001-04-14 12:59:00
  • 1440

docker创建centos镜像

docker这个东西刚开始坑太多,而且理念跟之前不大一样,所以开始入手比较麻烦,现在记录一下从头创建镜像到运行docker的过程 第一步:做操作系统镜像 安装:   yum -y instal...
  • songxiuliang
  • songxiuliang
  • 2017-03-29 10:42:01
  • 1060

docker镜像创建与基本使用

查看镜像 在docker环境安装完成之后,对docker的使用主要集中在docker镜像的管理与使用。首先是docker镜像的管理,查看本地有哪些镜像可以使用命令: docker images 运...
  • five3
  • five3
  • 2017-07-21 18:32:57
  • 5247

Docker实战(二):容器使用和镜像制作

运行容器安装好之后,我们就可以来开始Docker之旅了,我们现在的Docker还是一个”裸”Docker,上面没有容器,等一下,什么式容器?所谓容器就是Docker中用来运行应用的,Docker的容器...
  • u011851478
  • u011851478
  • 2016-08-06 15:07:23
  • 3898

怎样用Docker创建我们自己的镜像

官方文档Docker创建镜像总共有两种方法: 1.用别人的镜像创建。 1.1、先下载一个容器 命令: docker pull training/sinatra ...
  • shiqiangdexin
  • shiqiangdexin
  • 2016-09-08 15:42:42
  • 18646

Docker学习记录(二)-Dockerfile创建镜像

Docker学习记录(二)-Dockerfile创建镜像标签(空格分隔): docker 个人独立博客: http://mrdear.cn 本文学习Dcokerfile的基本命令,并且创建一个支持...
  • u012706811
  • u012706811
  • 2017-04-02 10:11:29
  • 1174

利用Dockerfile创建镜像并生成容器

创建Dockerfile(以mysql 5.7为例) 可以从Docker Hub上下载官方Dockerfile,以及docker-entrypoint.sh Dockerfile内容如下:FROM...
  • Care_sQueendom
  • Care_sQueendom
  • 2016-12-21 23:44:18
  • 4130

如何创建一个安全的Docker基础镜像

想创建安全,体积小的Docker镜像,看文章内容您就知道了!
  • sisiy2015
  • sisiy2015
  • 2016-03-17 14:57:55
  • 4722

docker学习-进入的container及创建本地镜像

场景:由于无线网断开,SSH连接断开了,需要重新进入原来docker的container里。 解决:我一开始重新docker run image(错误的方法,是重新启动了一个container),...
  • a515983690
  • a515983690
  • 2016-06-02 10:44:54
  • 2752

docker commit 创建镜像

上一篇写了用docker build和Dockerfile来创建我们的镜像,这次将介绍我们如何用docker commit指令来创建我们的镜像 说明:docker commit 指令是把一个已经...
  • smallpizza
  • smallpizza
  • 2016-12-08 17:03:12
  • 1883
收藏助手
不良信息举报
您举报文章:如何创建一个 Docker 镜像
举报原因:
原因补充:

(最多只允许输入30个字)