[Docker]Docker官方起步指南学习笔记④——实例之基于Alpine的nodejs服务器

文章目录

  • 本次目标
  • 开始实战
    • 编写服务器应用
    • 创建nodejs环境的Alpine容器
    • 将容器打包为映像
  • 映像的再次使用
    • 保存映像
    • 载入映像


本次目标

本次的目标是基于前三次课的知识,利用Alpine的最小环境,搭建node.js环境,并创建Hello world网页应用;最后将该容器打包成映像,发布到DockerHub上。

Tips:事实上,使用docker search node就可以找到node_alpine的官方仓库。此次我们将尝试自己搭建。


开始实战

编写服务器应用

// server.js
var http = require('http');

http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
}).listen(1234);

console.log('Server running at http://localhost:1234/');

在本机测试node server.js,访问http://localhost:1234/可见Hello World字样的输出。

创建nodejs环境的Alpine容器

  1. 基于>上一节<的知识,把存有server.js脚本的文件挂载到容器实例上,并将端口映射为1234(宿主机)->1234(容器).
docker run -dit --name=test -p 1234:1234 -v I:\js_server\:/js_server alpine

其中,I:\js_server\是宿主机中server.js的存放地址;/js_server是容器的数据卷挂载地址。I盘已经被设为Shared Drives

  1. 为alpine服务器安装nodejs环境:
apk add nodejs

输出如下:

fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/7) Installing ca-certificates (20190108-r0)
(2/7) Installing c-ares (1.15.0-r0)
(3/7) Installing libgcc (8.2.0-r2)
(4/7) Installing http-parser (2.8.1-r0)
(5/7) Installing libstdc++ (8.2.0-r2)
(6/7) Installing libuv (1.23.2-r0)
(7/7) Installing nodejs (10.14.2-r0)
Executing busybox-1.29.3-r10.trigger
Executing ca-certificates-20190108-r0.trigger
OK: 31 MiB in 21 packages

测试node版本:node --version,输出v10.14.2,可见node环境已经安装完毕。

  1. 执行server.js脚本:
cp /js_server/server.js /home/server.js
node /home/server.js

在本机(Windows10)的浏览器打开http://localhost:1234/,得到网页输出:
[Docker]Docker官方起步指南学习笔记④——实例之基于Alpine的nodejs服务器_第1张图片
按下Ctrl+C或直接关闭终端可以关闭服务器。但在此之前,我们将把该容器打包为一个映像。使用Ctrl+P+Ctrl+Q返回到宿主机的Shell界面。

将容器打包为映像

docker commit -a shenpibaopao -m pack test hello_node_alpine:v1.0

docker commit指令会将当前容器打包成一个镜像,常用可选配置项有:

  • -a 添加作者的信息
  • -c 修改Dockerfile的一些指令
  • -m 提交时的修改备注,类似于git commit -m的作用
  • -p 暂停正在commit的操作

查看当前镜像docker images
新的映像
可以看到新的映像已经出现了。

如果已经登陆DockerHub,使用docker push指令即可直接发布到DockerHub,否则请使用docker login指令进行登陆。

Tips:如果出现 denied: requested access to the resource is denied 的错误,需要使用 docker tag 指令为映像重新命名:
docker tag hello_node_alpine:v1.0 你的DockerHub ID/hello_node_alpine:v1.0

此时将会看到有两层映像被push上去,其中一个自然是原生的alpine,另一个则是我们在此之上做的修改。
两层


映像的再次使用

保存映像

使用命令:

docker save 你的DockerHub ID/hello_node_alpine:v1.0 -o I:/test.tar

将可以把该映像导出为test.tart

注意:使用 docker save image > file 在Win10下可能导致Error processing tar file(exit status 1): archive/tar: invalid tar header错误!

载入映像

使用命令:

docker load -i I:\test.tar 

你可能感兴趣的:(项目管理,版本控制,软件测试)