BHOL302 - 应用的容器化开发全流程实践

本节实验中我们将完成一个应用的编码开发,容器化打包,上传镜像仓库,并在目标环境使用进行部署的全过程。

01 - 创建应用代码

使用以下命令创建代码目录并用vscode打开

  1. mkdir docker-demo
  2. cd docker-demo
  3. code .

使用vscode分别创建以下文件

  • index.js
  • Dockerfile
  • package.json

BHOL302 - 应用的容器化开发全流程实践 - 图1

将以下内容分别复制到对应的文件中

index.js - 这是我们的应用入口,其功能就是在网页中直接输出 Hello Boathouse!的字样

  1. var express = require('express');
  2. var app = express();
  3. app.get('/', function (req, res) {
  4. res.send('Hello Boathouse!');
  5. });
  6. var server = app.listen(3000, function () {
  7. var host = server.address().address;
  8. var port = server.address().port;
  9. console.log('Example app listening at http://%s:%s', host, port);
  10. });

package.json - 这是 node.js 项目的配置文件,描述了本项目的依赖以及入口

  1. {
  2. "name": "myapp",
  3. "version": "0.0.1",
  4. "private": true,
  5. "scripts": {
  6. "start": "node index.js"
  7. },
  8. "engines": {
  9. "node": "^4.6.1"
  10. },
  11. "dependencies": {
  12. "express": "^4.14.0",
  13. "http-errors": "^1.7.0",
  14. "mysql": "^2.10.2"
  15. },
  16. "devDependencies": {
  17. "inherits": "^2.0.3",
  18. "mocha": "^5.2.0",
  19. "ms": "^2.1.1"
  20. }
  21. }

Dockerfile - 用于 docker build 的打包脚本文件,我们基于node:12基础镜像,将应用代码复制到 /app 目录后执行 npm install,然后执行 package.json 中定义的应用入口 npm start 启动应用。

  1. FROM node:12
  2. WORKDIR /app
  3. ADD . /app
  4. RUN npm install
  5. EXPOSE 3000
  6. CMD npm start

02 - 使用 docker build 完成应用构建和打包

在vscode中通过菜单 Terminal | New Terminal 打开命令行,并执行以下命令

  1. docker build .

输出如下

BHOL302 - 应用的容器化开发全流程实践 - 图2

现在我们已经完成了应用构建和打包,可以运行这个镜像了

  1. ## 使用 docker images 查看本地镜像列表
  2. docker images
  3. REPOSITORY TAG IMAGE ID CREATED SIZE
  4. <none> <none> a5c7bc22560b About a minute ago 926MB
  5. ## 使用 docker run 命令启动我们的容器,并绑定在3000端口上
  6. docker run -itd -p 3000:3000 {IMAGE ID}
  7. a102499e3d5fab2ffdba3319439aa7179b323630c12378129de5da518de8f25d

打开浏览器访问 http://localhost:3000,即可看到如下界面

BHOL302 - 应用的容器化开发全流程实践 - 图3

03 - 注册 Docker Hub 或者 阿里云 账号获取个人镜像仓库

Docker Hub 账号

备注:Docker Hub 在国内访问可能不稳定

通过浏览器打开 https://hub.docker.com 并完成新账号注册

BHOL302 - 应用的容器化开发全流程实践 - 图4

注册成功并登录后,进入 Repositories 仓库列表界面

https://hub.docker.com/repositories

注意记录你自己的 {DockerID},我们后续会用到这个ID

BHOL302 - 应用的容器化开发全流程实践 - 图5

阿里云账号

通过浏览器打开 https://www.aliyun.com/ 并完成新账号注册,注册完成后进入 【容器镜像服务】首页

https://cr.console.aliyun.com/

点击创建 【个人版实例】

BHOL302 - 应用的容器化开发全流程实践 - 图6

按照提示 【设置Registry登录秘密】

BHOL302 - 应用的容器化开发全流程实践 - 图7

创建 【命名空间】

BHOL302 - 应用的容器化开发全流程实践 - 图8

注意保持新创建的命名空间的【自动创建仓库】保持开启状态,并记录你自己的命名空间名字

BHOL302 - 应用的容器化开发全流程实践 - 图9

点击访问凭证,获取你的登录命令

BHOL302 - 应用的容器化开发全流程实践 - 图10

04 - 推送镜像到个人镜像仓库

注意:以下使用阿里云个人版镜像仓库为例

  1. ## 用你自己的 dockerID 登录
  2. docker login --username={你的阿里云用户名} registry.cn-hangzhou.aliyuncs.com
  3. ## 将镜像tag成指向个人镜像仓库的名称
  4. docker tag {IMAGE ID} registry.cn-hangzhou.aliyuncs.com/{命名空间}/docker-demo
  5. ## 推送镜像
  6. docker push registry.cn-hangzhou.aliyuncs.com/{命名空间}/docker-demo

推送效果如下

BHOL302 - 应用的容器化开发全流程实践 - 图11

推送完成后即可在个人镜像列表中看到镜像

BHOL302 - 应用的容器化开发全流程实践 - 图12

05 - 在DevOpsBox中运行docker-demo

进入 DevOpsBox 中运行以下命令完成 docker-demo 镜像的拉取和启动

  1. ## 登录 DevOpsBox
  2. ssh localadmin@192.168.99.102
  3. ## 用你自己的 dockerID 登录
  4. docker login --username={你的阿里云用户名} registry.cn-hangzhou.aliyuncs.com
  5. ## 运行 docker-demo
  6. docker run -itd -p 3000:3000 registry.cn-hangzhou.aliyuncs.com/{命名空间}/docker-demo

运行效果如下

BHOL302 - 应用的容器化开发全流程实践 - 图13

以上命令成功后,打开浏览器 http://192.168.99.102:3000

BHOL302 - 应用的容器化开发全流程实践 - 图14

最后,按照 BHOL01 里面的停止和清理容器方式,将docker-demo从 DevOpsBox 中清除

小结

本节实验中,我们完成了一个典型的应用开发,编译打包,上传镜像仓库并在另外一个环境中用容器方式启动。这个过程是容器化开发的基本流程。