docker快速启动之二:创建和运行你的镜像

前言

上一边我们已经介绍如何安装和设置docker,本篇我们再参考官方手册继续深入学习docker镜像的创建和运行,官方文档见docker官方原文

1. 介绍(Introduction)

现在我们已经设置环境,基于Docker Desktop,你现在可以开发容器应用。总的来说,开发流程如下:

  1. 通过创建Docker images,为你的应用每个组件创建和测试独立容器。
  2. 组合你的容器和支持设施成一个完整应用。
  3. 测试,分享和发布你的完整容器应用。
    首先我们关注工作流程的步骤1:创建容器所需镜像,记住,一个Docker镜像包含你的容器进程将需运行的私有文件系统。你必须创建一个映像,它包含你的应用运行所需的资源。
    容器化开发环境比传统的开发环境更容易设置,一旦你学会我们将讨论的如何创建映像。这是因为一个容器开发环境在Docker 映像中,会隔离应用所需要的所有依赖。你除了在你的仪器安装docker外,不需要安装任何东西。这样,你就可以轻松的为不同的系统开发应用,不需要更改开发仪器上的任何东西。

2. 设置(Set up)

我们用git从github上下载一个例程,命令如下:
git clone https://github.com/dockersamples/node-bulletin-board
cd node-bulletin-board/bulletin-board-app
node-bulletin-board工程是一个简单的公告板应用,使用Node.js编写,在这个例程中,可以想象是你编写的这个APP,而且你尝试把它容器化。

3. 使用Dockerfile定义容器(Define a container with Dockerfile)

我们先了解下bulletin board应用中的这个所谓的Dockerfile。Dockerfile描述了如何为一个容器组织私有文件系统,而且还包含描述容器如何基于此映像运行的元数据。bulletin board app的Dockerfile如下:

# Use the official image as a parent image
FROM node:current-slim
# Set the working directory
WORKDIR /usr/src/app
# Copy the file from your host to your current location
COPY package.json .
# Run the command inside your image filesystem
RUN npm install
# Inform Docker that the container is listening on the specified port at runtime.
EXPOSE 8080
# Run the specified command within the container.
CMD [ "npm", "start" ]
# Copy the rest of your app's source code from your host to your image filesystem.
COPY . .

写一个Dockerfile第一步就是容器化一个应用。你可以思考Docker file命令当成如何建立你的映像的手把手教程。这个主意有如下步骤:

  1. 从 “FROM”这个已有镜像 node:current-slim 。这是一个官方映像,由Node.js先驱编译并且经由docker验证,是一个高质量的映像,它包含Node.js长期支持解释器和基本的依赖。
  2. 使用 WORKDIR 来指定所有接下来的操作都是从镜像文件系统中的 目录 /usr/src/app 开始。
  3. COPY the file package.json 从你的主机 到镜像的当前目录(.),就是/usr/src/app/package.json。
  4. RUN 你镜像中的命令 npm install(它读取package.json 来决定你应用的依赖)。
  5. COPY 拷贝你主机上的剩下源码到你的镜像文件系统。
    你可以看到这些基本上是你设置安装app到你主机的不周。但是,获取这些成一个dockerfile,可以使得你可以在一个可以移植,隔离的Docker映像中。

上面的编译镜像文件系统的步骤,但也有其他的行在Dockerfile.
CMD 标识符是第一例子来指定你精细的一些元数据,描述如何在容器运行这个镜像。它意思说这个支持这个镜像的容器进程支持npm start。
EXPOSE 8080 标识docker 容器运行时监听8080端口。
以上你所看到的是组织一个简单的Dockerfile 的好方方法; 总是以 FROM 命令开始,接着是创建你文件系统的步骤,已经包含任何书籍规格。还有更多的Dockerfile标识,详情请见Dockerfile reference。

4. 创建和测试你的镜像(Build and test your image)

现在既然你已经有一些源码和一个Dockfile,是时候来创建你自己的第一个镜像,并确保容器如我们期望的启动工作。
确认你已经位于目录: node-bulletin-board/bulletin-board-ap,我们来开始编译bulletin board 镜像,终端输入命令:
docker image build -t bulletinboard:1.0 .
你可以看到Docker执行Dockefile中的每条指令,创建你自己的镜像。如果成功,编译进程会提示 Successfully tagged bulletinboard:1.0
在这里插入图片描述

5. 运行你的镜像(Run your image as a container)

  1. 使用你的镜像启动一个容器
docker container run --publish 8000:8080 --detach --name bb bulletinboard:1.0

这有一些通用的标识:
–publish 要求将主机的端口8000映射到容器的9080端口。 容器拥有自己多了的私有端口组,如果你想从网络访问,你必须像这样进行映射。否则,防护墙规则会组织网络到达你的容器。
–detach: 要求你的容器运行在后头。
–name: 指定你的容器在随后命令的缩写,这里是bb。
同样注意到,你不能指定你容器运行的进程,你也不用这么做,因为你在创建Dockerfile时使用了CMD, 正因为如此,Docker会自动运行npm start当容器启动时。
2. 使用你的浏览器访问: localhost:8000. 你看以看到你的bulletin board application已上线运行。到此,你已经做了所有确保你容器工作所有事情; 现在你可以运行单元测试。
3. 一旦你满意你的bulletin board 容器工作正确,你可以删除它,使用:

docker container rm --force bb

6.总结

到此,你已经成功的编译一个镜像,执行一次简单应用的容器化,还确认你的应用在容器成功运行。下一步就是要在Docker Hub上分享你的镜像,这样他就可以从任何目标机上下载或运行。

7.我的公众号

关注我的公众号,分享嵌入开发,android开发,linux运维的原创文章。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值