专栏首页VVcblogDocker 快速入门(二)- 构建并运行您的镜像

Docker 快速入门(二)- 构建并运行您的镜像

前提条件

完成第一部分的情况介绍和安装

介绍

现在您已经安装了开发环境,可以开始开发容器化的应用程序了。一般来说,开发工作流是这样的:

  1. 首先创建 Docker 镜像,为应用程序的每个组件创建和测试单独的容器。
  2. 将容器和支持基础设施(supporting infrastructure)组装成一个完整的应用程序。
  3. 测试、共享并部署完整的容器化应用程序。

在本教程的这一阶段,让我们集中讨论此工作流的第一步:创建容器将基于的镜像。请记住,Docker 镜像捕获您的容器化进程将在其中运行的私有文件系统;您需要创建一个镜像,其中仅包含应用程序运行所需的内容。

配置

让我们下载 node-bulletin-board 示例项目。这是一个用 Node.js 写的简单的公告栏应用程序。

§Git

如果您使用的是 Git,您可以从GitHub克隆示例项目:

git clone https://github.com/dockersamples/node-bulletin-board
cd node-bulletin-board/bulletin-board-app

§Windows (没有 Git)

如果你使用的是 Windows 机器,喜欢下载示例项目而不安装 Git,在 PowerShell 运行以下命令:

curl.exe -LO https://github.com/dockersamples/node-bulletin-board/archive/master.zip
tar.exe xf master.zip
cd node-bulletin-board-master\bulletin-board-app

§Mac 或 Linux (没有 Git)

如果您使用的是 Mac 或 Linux 机器,并且喜欢下载示例项目而不安装 Git,请在终端运行以下命令:

curl -LO https://github.com/dockersamples/node-bulletin-board/archive/master.zip
unzip master.zip
cd node-bulletin-board-master/bulletin-board-app

用 Dockerfile 定义一个容器

下载项目后,查看公告栏应用程序中名为 Dockerfile 的文件。Dockerfiles 描述了如何为容器组装私有文件系统,还可以包含描述如何基于此镜像运行容器的一些元数据。

有关公告栏应用程序中使用的 Dockerfile 的更多信息,请参阅 Dockerfile 示例

构建并测试您的镜像

现在您已经有了一些源代码和 Dockerfile,是时候构建您的第一个镜像了,并确保从镜像中启动的容器按预期工作。

在终端或者 PowerShell 中使用命令 cd 确保您在 node-bulletin-board/bulletin-board-app 目录中。运行以下命令来构建您的公告栏镜像:

docker build --tag bulletinboard:1.0 .

您将看到 Docker 一步步完成 Dockerfile 中的每条指令,并在此过程中构建您的镜像。如果成功,构建过程应该以一条消息 Successfully tagged bulletinboard:1.0 结束。

Windows 用户: 本例使用 Linux 容器。右键单击系统托盘中的 Docker 图标,然后单击 Switch to Linux containers,确保您的环境正在运行 Linux 容器。不必担心——本教程中的所有命令对于 Windows 容器工作方式完全一样。 在运行镜像后,您可能会收到一条标题为“安全警告”的消息,提示正在为添加到镜像中的文件设置读、写和执行权限。在本示例中,我们不处理任何敏感信息,因此可以忽略本示例中的警告。

将镜像作为容器运行

  1. 运行以下的命令来启动基于新镜像的一个容器: docker run --publish 8000:8080 --detach --name bb bulletinboard:1.0 这里有几个常见的标记:
    • --publish 要求 Docker 将主机端口8000上传入的流量转发到容器端口8080。容器有自己的私有端口集,因此如果您希望从网络访问一个端口,就必须以这种方式将流量转发给它。否则,作为默认的安全情形,防火墙规则将阻止所有网络流量到达您的容器。
    • --detach 要求 Docker 在后台运行此容器。
    • --name 指定可以在后续命令中引用你的容器的名称,在本例中是 bb
  2. 在浏览器中访问您的应用程序,地址是 localhost:8000。您应该会看到您的公告栏应用程序启动并运行了。在此步骤中,您通常会尽一切可能确保容器按照预期的方式工作;例如,现在是运行单元测试的时候了。
  3. 一旦您确信您的公告栏容器工作正常,您可以删除它:
docker rm --force bb

--force 选项会停止正在运行的容器,因此可以将其删除。 如果您先用 docker stop bb 停止运行的容器,那么您不需要使用 --force 来删除它。

结论

此时,您已经成功地构建了一个镜像,执行了一个应用程序的简单容器化,并确认了您的应用程序在其容器中成功运行。下一步是在 Docker Hub 上分享您的镜像,以便它们可以被轻松地下载和运行在任意目标机器上。

Dockerfile 示例

编写 Dockerfile 是容器化一个应用程序的第一步。您可以将这些 Dockerfile 命令看作是如何构建镜像的逐步配方。公告栏应用程序中的 Dockerfile 是这样的:

# 使用官方镜像作为父镜像。
FROM node:current-slim

# 设置工作目录。
WORKDIR /usr/src/app

# 将文件从主机复制到当前位置。
COPY package.json .

# 在镜像文件系统中运行该命令。
RUN npm install

# 通知 Docker 容器在运行时监听指定的端口。
EXPOSE 8080

# 在容器中运行指定的命令。
CMD [ "npm", "start" ]

# 将应用程序的其余源代码从主机复制到镜像文件系统。
COPY . .

本例中定义的 dockerfile 执行以下步骤:

  • FROM 预先存在的 node:current-slim 镜像开始。这是一个官方镜像,由 node.js 供应商构建,经过 Docker 验证是一个高质量的镜像,包含了 Node.js 的长期支持(LTS)解释器和基本依赖项。
  • 使用 WORKDIR 指定所有后续操作都应该从镜像文件系统中的目录 /usr/src/app 执行(永远不要从主机的文件系统执行)。
  • 从您的主机复制(COPY) 文件 package.json 到镜像中的当前位置 (.) (在本示例中, 是到 /usr/src/app/package.json)。
  • 在镜像文件系统中运行(RUN) 命令 npm install(它将读取 package.json 确定应用程序的节点依赖项并安装它们)。
  • 将应用程序的其余源代码从主机复制(COPY) 到镜像文件系统。

您可以看到,这些步骤与您在主机上设置和安装应用程序时所采取的步骤基本相同。但是,将这些捕获为 Dockerfile,允许您在一个可移植的、独立的 Docker 镜像中做同样的事情。

上面的步骤构建了镜像的文件系统,但是 Dockerfile 中还有其他行。

CMD 指令是在镜像中指定一些元数据的第一个示例,这些元数据描述如何基于此镜像运行容器。在本例中,它表示此镜像要支持的容器化进程是 npm start

EXPOSE 8080 通知 Docker 容器在运行时监听端口 8080。

上面的内容是组织一个简单 Dockerfile 的好方法;始终从 FROM 命令开始,按照它的步骤构建您的私有文件系统,并以任何元数据指定结束。还有更多的 Dockerfile 指令,而不仅仅是您在上面看到几个。有关完整列表,请参阅 Dockerfile 参考

原文链接:https://www.cnblogs.com/ittranslator/p/13202933.html

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker 快速入门(一)- 情况介绍和安装

    Docker 是一个供开发人员和系统管理员构建、运行和与容器共享应用程序的平台。使用容器部署应用程序称为容器化。容器并不是新事物,但它们用于轻松部署应用程序却是...

    用户8803964
  • ASP.NET Core使用Docker进行容器化托管和部署

    跟着阿笨一起玩NET
  • Docker入门:简化Devops

    如果您喜欢鲸鱼,或者您只需要快速,无痛地连续将您的软件交付给生产,那么我邀请您阅读本介绍的Docker教程。一切似乎都表明,软件容器是IT的未来,让我们快速地和...

    WindCoder
  • Dockerfile 之最小化 Java 镜像的常用技巧

    随着容器技术的普及,越来越多的应用被容器化。人们使用容器的频率越来越高,但常常忽略一个基本但又非常重要的问题 - 容器镜像的体积。本文将介绍精简容器镜像的必要性...

    kubernetes中文社区
  • 可能是最详细的部署:Docker Registry企业级私有镜像仓库Harbor管理WEB UI

    上一篇文章搭建了一个具有基础功能,权限认证、TLS 的私有仓库,但是Docker Registry 作为镜像仓库,连管理界面都没有,甚至连一些运维必备的功能都是...

    搜云库
  • 腾讯云CIS入门——Kubernetes部署

    容器实例服务(Container Instance Service , CIS)可以帮您在云上快捷、灵活的部署容器,让您专注于构建程序和使用容器而非管理设备上。...

    林岑影
  • 【云+社区年度征文】Docker教程(1)—Docker简介与安装

    我们开发一个项目的时候通常会有两个环境,本地测试环境和线上环境。项目开发上线的时候,我们通常会把项目打成一个jar包或war包上传到线上的服务器,此时为了让项目...

    AlbertYang
  • docker安装及原理 (转载非原创)

    转载来源:https://www.cnblogs.com/ITPower/p/15329057.html

    xlj
  • Centos7安装Docker私服Harbor

        Harbor是由供职在VMWARE的几个中国人合伙研发,市面上已经存在众多Docker私服,为啥还会出现Harbor?因为Harbor的重心不同于其他,...

    尚浩宇
  • Docker 基础知识 - Docker 概述

    Docker 是一个开发、发布和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分离,以便快速交付软件。有了 Docker,你可以像管理应用程序...

    用户8803964
  • 5分钟配置好你的AI开发环境

    无论是第一次设置TensorFlow的新手数据科学爱好者,还是使用TB级数据的经验丰富的AI工程师,安装库、软件包或者框架总是一个困难又繁琐的过程。但是像Doc...

    磐创AI
  • Docker从入门到干活,看这一篇足矣 [建议收藏]

    Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。

    码农编程进阶笔记
  • Java为Hyperledger Fabric(超级账本)开发区块链链代码智能合约之环境部署

    您或许听说过区块链,但可能不确定它对 Java™ 开发人员有何用。本教程将帮助大家解惑。我将分步展示如何使用 Hyperledger Fabric v0.6 来...

    笔阁
  • 5步实现规模化的Kubernetes CI/CD 流水线

    在近几年,Kubernetes迅速成为了容器编排的事实上的开源标准。与虚拟机不同,Kubernetes在抽象化基础架构的同时可靠地大规模编排容器,这可以帮助开发...

    JFrog杰蛙科技
  • CentOS Docker 安装

    Docker 是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。

    子润先生
  • Docker最全教程——从理论到实战(六)

    托管到腾讯云容器服务,我们的公众号“magiccodes”已经发布了相关的录屏教程,大家可以结合本篇教程一起查阅。

    心莱科技雪雁
  • 可视化Docker快速安装部署教程

    [Docker]是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与...

    w9
  • 构建远程缓存系统

    上个月,我们的工程团队发布了一个大的更新,关于在使用我们的Docker平台Jet时Docker镜像是如何被缓存和存储的。在本文中,我们将讨论更新的动机,特性的设...

    树华子
  • DockerFile简介与实例

    Dockerfile是自动构建docker镜像的配置文件,Dockerfile中的命令非常类似linux shell下的命令

    字母哥博客

扫码关注云+社区

领取腾讯云代金券