【容器】搭建第一个docker环境

初始化一个NodeJs程序

以下操作必须已经安装了了NodeJS。
首先创建一个空文件夹。并创建以下⽂文件:

  • 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写⼊入

1
2
3
4
5
6
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"
}
}

测试程序。控制台输⼊

1
npm start

浏览器打开本地测试,如果如图所示。表示demo创建成功。请继续往下。

本地测试

创建dockerfile文件

Dockerfile是由一系列命令和参数构成的脚本,一个Dockerfile⾥里里⾯面包含了构建整个image的完整命令。Docker通过docker build执行Dockerfile中的一系列列命令自动构建image. 在.dockerignore文件里面写入代码。表示过滤该类型的文件。类似git的.gitignore

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
# 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-alpine
#声明作者
MAINTAINER evilboy
#移动当前⽬目录下⾯面的⽂文件到app⽬目录下
ADD . /app/
#进⼊入到app⽬目录下⾯面,类似cd
WORKDIR /app
#安装依赖
RUN npm install
#对外暴暴露露的端⼝口
EXPOSE 3000
#程序启动脚本
CMD ["npm", "start"]

构建镜像

使用build命令构造镜像,注意后⾯面那个“.”不不能少。

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
[root@Sandbox-N ~]# docker build -t docker_demo .
Sending build context to Docker daemon 39.94kB
Step 1/7 : FROM node:8.9-alpine
---> 406f227b21f5
Step 2/7 : MAINTAINER robin
---> Using cache
---> 78d6cdbcfee2
Step 3/7 : ADD . /app/
---> 2cb30678612d
Step 4/7 : WORKDIR /app
Removing intermediate container e51377081039
---> c2b7d0f37d2d
Step 5/7 : RUN npm install
---> Running in da0c3946ca8d
npm notice created a lockfile as package-lock.json. You should commit
this file.
added 38 packages in 3.323s
Removing intermediate container da0c3946ca8d
---> eecee87f10e2
Step 6/7 : EXPOSE 3000
---> Running in f3973cc168a4
Removing intermediate container f3973cc168a4
---> 2671a4c6deb4
Step 7/7 : CMD ["npm", "start"]
---> Running in dec529f754aa
Removing intermediate container dec529f754aa
---> 6ec73793d353
Successfully built 6ec73793d353
Successfully tagged docker_demo:latest

等待镜像构造完成。然后使用 images命令查看镜像。

查看镜像

此时可以看到images已经构造完成。现在开始启动images,并测试。

1
2
3
4
5
#启动镜像 -d表示后台执⾏行行,-p 9000:3000表示指定本地的9000端⼝口隐射到容器器内的3000端⼝口,
docker_demo为镜像名称
docker run -d -p 9000:3000 docker_demo
#查看容器器
docker ps

查看容器

此时浏览器打开http://localhost:9000/,如果如图所示。表示容器运行正常。

正常情况

如果此时本地无法打开。可以使用log命令查看日志。根据日志修改对应出现的对方。

你的支持将鼓励我继续创作