在此刻, 码头工人 需要一点介绍。 在容器中运行应用程序现在风靡一时,而且 Fedora 项目一直在努力确保它易于使用 Fedora 运行容器并运行 Fedora 里面 一个容器。 为了使它更容易,该项目有一组 Dockerfile,可让您立即开始使用容器化应用程序进行构建。
该项目的 Dockerfile 定义了 20 多个应用程序——从 Ansible 到 WordPress。 如果您以前没有使用过 Dockerfiles,让我们来看看如何使用 Dockerfiles 以及如何从它们构建映像并运行您的应用程序。
获取 Dockerfile
这 Fedora Dockerfiles 可以作为一个包使用,或者你可以直接获取它们 在 GitHub 上.
如果您想抢包,请查找
fedora-dockerfiles
包(那里没有令人震惊的,是吧?)。 它们将安装在
/usr/share/fedora-dockerfiles
.
不过,一般来说,我建议直接从 GitHub 获取 Dockerfile。 这些可能是最新的,您可以只获取一个文件或继续克隆整个存储库并跟踪您可能进行的任何更改。 当然,您也可以将更改提交回项目。 如果您发现错误、进行有趣的更改或创建新的有趣的 Dockerfile,请随时提交拉取请求。
要克隆整个 repo,请执行以下操作:
git clone [email protected]:fedora-cloud/Fedora-Dockerfiles.git
当然,您需要安装 git。 如果没有,请安装
混帐
包(例如
sudo dnf 安装 git
)。
从 Dockerfile 创建映像
假设你已经抓住了 Fedora-来自 GitHub 的 Dockerfiles 存储库。 让我们看一下 Nginx Dockerfile,然后构建它。
读取 Dockerfile
Dockerfile 实际上很短,只有 11 行:
FROM fedora MAINTAINER scollier <[email protected]> RUN yum -y update && yum clean all RUN yum -y install nginx && yum clean all RUN echo "daemon off;" >> /etc/nginx/nginx.conf RUN echo "nginx on Fedora" > /usr/share/nginx/html/index.html EXPOSE 80 CMD [ "/usr/sbin/nginx" ]
如果您一直在使用,其中一些可能看起来非常熟悉 Fedora 一阵子。 如您所见,有几行正在使用
百胜
更新包缓存,然后安装
nginx
打包,然后运行
百胜清洁
. 请注意,您可以这样做(以及额外的
回声
命令)交互。 但是,将它放在 Dockerfile 中会更有效。
我们为什么要做
百胜清洁
每一次? 它删除缓存并使图像更小。 (您可以通过构建没有
百胜清洁所有
并查看图像有多大。)请注意,如果有人执行,您在构建中使用的步骤将显示
码头工人历史
在图像上,甚至可以使用
码头运行
运行图像的单个层。
这
暴露
指令将容器的 80 端口暴露给主机。 默认情况下,如果您不包含此指令,则容器在运行时不会侦听端口 80。 请注意,您仍然可以使用
-p
指令在运行时公开一个端口,但这节省了一些打字……
最后,
命令
指令告诉 Docker 在容器启动时运行它。
总结一下:这个 Dockerfile 会告诉你
码头工人建造
从 fedora 镜像构建一个容器,运行
百胜
更新包缓存然后安装
nginx
,更新 Nginx 配置并创建默认登录页面(index.html)。
请注意,它没有指定的版本 Fedora 应该使用。 如果要指定,请务必像这样添加版本:
FROM fedora:21
现在我们准备好继续启动容器了。
图像与容器
这似乎是一个非常微妙的区别,但是当你第一次构建 Dockerfile 时,你有一个 图片. 当你实际上 跑 图片,你有一个 容器.
为什么这很重要? 简单的版本:图像是不可变的,容器是图像加上在它们运行和(可能)修改后分层的变化。 即使容器处于静止(停止)状态,它仍然是一个容器,并且在下次启动时会保留网络端口和资源限制等内容。
来吧!
确保你在
nginx
您签出的存储库的目录,我们将继续构建映像,如下所示:
sudo docker build -t username/imagename .
该命令将告诉 Docker 执行以下操作:
- 读取当前目录中的 Dockerfile(.
在命令的末尾)。
- 建造 使用 Dockerfile 中的说明生成图像。
- 标签 ( -t
) 带有您指定的“用户名/图像名”的图像。
所以这是我使用的命令,请注意我通常会使用
jzb
代替
宗克
,但用户名必须至少为四个字符。
sudo docker build -t zonker/nginx .
这将拉下 Fedora 基础镜像(如果它不存在),然后运行 Dockerfile 中的命令。 完成后,您可以从映像启动容器。
运行容器
现在我们准备从图像启动一个容器。 让我们继续启动 Nginx 并将其指向 localhost 上的端口 8080 —— 换句话说,到达在端口 8080 上运行 Docker 的主机的请求将重定向到 Nginx 容器(在端口 80 上)。
sudo docker run -d --name f21nginx -p 8080:80 zonker/nginx
当然,图像的名称(zonker/nginx)对您来说会有所不同,因此请替换您在此处选择的任何名称/标签。
现在,当您在端口 8080(例如 https://localhost:8080)上发出请求时,它将重定向到在端口 80 上运行在容器中的 Nginx 进程。因此,您将看到 Nginx 正在提供的任何内容,在这种情况下只是测试页。
提交修复和新的 Dockerfile
有修复或想要提交新的 Dockerfile? 随时提交拉取请求(PR) 在 GitHub 上.
我们也欢迎想要测试的人 Fedora Dockerfiles,尤其是当我们正在向 Fedora 22. 如果您对 Dockerfiles 有任何问题或意见,请随时通过 [email protected] 提问。