如何创建一个 Docker 镜像
创始人
2024-03-01 22:37:45
0

前面的文章 中,我们学习了在 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

使用 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 实用程序。

我们来查看一下在你的目录下你拥有的所有 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

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

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

想学习更多内容,你可以打开你的浏览器,然后找到更多的关于如何构建像 LAMP 栈这样的完整的 Docker 镜像的文档。这里有一个帮你实现它的 Dockerfile 文件。在下一篇文章中,我将演示如何推送一个镜像到 DockerHub。

你可以通过来自 Linux 基金会和 edX 的 “介绍 Linux” 免费课程来学习更多的知识。


via: https://www.linux.com/blog/learn/intro-to-linux/2018/1/how-create-docker-image

作者:SWAPNIL BHARTIYA 译者:qhwdw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

外媒初探Win11 WSL...
IT之家 7 月 2 日消息,科技媒体 Windows Lates...
2026-07-17 23:36:40
Fedora 44 不只是...
Fedora 44 已发布,带来内核 6.19.10、工具链升级与...
2026-05-15 22:19:06
摩尔线程发布AI算力笔记本...
钛媒体App 12月20日消息,摩尔线程创始人、董事长兼CEO张建...
2025-12-20 17:46:02
英特尔,下一个 AI 时代...
找一张三年前的照片,需要多久?你需要翻遍混乱的相册,还是依赖飘忽的...
2025-12-16 16:45:37
梯度科技申请基于Kuber...
国家知识产权局信息显示,梯度科技(北京)有限公司申请一项名为“基于...
2025-12-06 21:16:54
破解算力资源利用难题,华为...
近日,华为数据存储产品线发布了AI容器技术——Flex:ai,同时...
2025-11-24 11:45:25

热门资讯

“Linux 中国” 开源社区... 这是一个艰难的决定 —— 这不是调侃,而是当你真正做出改变了你十几年生活轨迹的决定时,你就会明白这个...
硬核观察 #1263 德国铁路... #1 德国铁路公司招聘 Windows for Workgroups 3.11 管理员该职位要求了解...
人工智能教程(七):Sciki... 在本系列的 上一篇文章 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Kera...
关闭 WSL 中正在运行的 L... 以下是使用 WSL 关闭在 Windows 内运行的 Linux 系统的不同方法。你使用 WSL 在...
MX Linux 23.2 “... 最新的 MX Linux 23.2 小版本更新带来了基本的改进和新增功能。MX Linux 推出了 ...
硬核观察 #1262 网络上最... #1 网络上最古老的软件存档库之一即将关闭美国新墨西哥州立大学(NMSU)最近宣布,即将于 2024...
如何在 RHEL 上通过绑定配... 在 Linux 中,你可以根据自己的需要创建高级网络设置,如 网络绑定 Network Bondin...
Linux Matrix 消息... Matrix 用户可以升级 Fractal 6 了!Fractal 是目前 最好的 Matrix 客...
如何通过 VLC 使用字幕 使用 VLC 媒体播放器播放和管理字幕的新手指南。我是一个超级动漫迷,如果你想观看最新的剧集,那么你...
硬核观察 #1261 X 计划... #1 X 计划在奥斯汀建立内容审核总部据报道,该部门将招聘 100 名全职员工,将主要关注 CSE ...