docker学习(2)

docker部署node js应用

其实是创建一个node js项目的镜像,在镜像之上运行容器。
创建一个空文件夹,里面包含如下文件。
server.js package.json Dockerfile .dockerignore
命令如下

1
2
3
4
5
6
mkdir docker_demo
cd docker_demo
touch server.js
touch package.json
touch Dockerfile
touch .dockerignore

server.js是koa的主程序。写入如下代码。

1
2
3
4
5
6
7
8
const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
ctx.body = 'Hello docker';
});

app.listen(3000);

package.json是依赖项目文件。有以下配置。

1
2
3
4
5
6
7
8
9
10
11
{
"name": "docker_demo",
"version": "0.1.0",
"private": true,
"scripts": {
"start": "node server.js"
},
"dependencies": {
"koa": "^2.5.0"
}
}

通过npm install和npm start便可在本地运行
dockerfile是由一系列命令和参数构成的脚本,一个dockerfile里面包含了构建整个image的完整命令,docker通过docker build来执行dockerfile中的一系列命令来创建image,在.dockerignore中写入如下代码,表示在构建的时候忽略这些文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Logs
logs
*.log
npm-debug.log*

# Runtime data
pids
*.pid
*.seed

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage

# nyc test coverage
.nyc_output

# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# node-waf configuration
.lock-wscript

# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules
jspm_packages

# Optional npm cache directory
.npm

# Optional REPL history
.node_repl_history
.idea
.node_modules
node_modules
.vscode

在dockerfile中写入如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#制定node镜像的版本
FROM node:8.9.0-alpine
#声明作者
MAINTAINER robin
#移动当前目录下面的文件到app目录下
ADD . /app/
#进入到app目录下面,类似cd
WORKDIR /app
#安装依赖
RUN npm install
#对外暴露的端口
EXPOSE 3000
#程序启动脚本
CMD ["npm", "start"]

使用build命令构建镜像。注意后面那个.不能少。
是在当前docker_demo的文件夹下面

1
docker build -t docker_demo .

便可以创建镜像。
通过

1
docker riun -d -p 9000:3000 docker_demo

来基于该node镜像创建容器。
查看容器

1
docker ps

便可以通过访问本地端口9000来访问docker node容器。
参考博客

docker镜像迁移

在开发中,不免要进行镜像迁移。本机mac上的迁移到ubuntu或者windows上等。
首先打包镜像.

1
docker save  docker_demo | gzip > docker_demo-latest.tar.gz

表示打包形式为压缩包形式,名字为docker_demo-latest.tar.gz文件。
随后在装好了docker的其余主机上。加载镜像即可。

1
docker load -i docker_demo-latest.tar.gz

这样即可。在其余主机上创建镜像。并且以此镜像为基础创建容器。
参考博客
ubuntu上安装docker过程