创建一个NodeJS程序
1
2
3
4
5
6
7
8
9
10
|
http.createServer(function (request, response) {
// 发送 HTTP 头部
// HTTP 状态值: 200 : OK
// 内容类型: text/plain
response.writeHead(200, {'Content-Type': 'text/plain'});
// 发送响应数据 "Hello World"
response.end('Hello World\n');
}).listen(8080);
|
修改Docker文件映射
修改/etc/docker/daemon.json
1
2
3
|
{
"data-root":"/root/data/docker-data"
}
|
重启docker systemctl restart docker
,在/root/data/
目录下会自动生成如下文件
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
|
docker-data
|-- buildkit
| |-- cache.db
| |-- containerdmeta.db
| |-- content
| | `-- ingest
| |-- executor
| |-- metadata_v2.db
| `-- snapshots.db
|-- containers
|-- image
| `-- overlay2
| |-- distribution
| |-- imagedb
| | |-- content
| | | `-- sha256
| | `-- metadata
| | `-- sha256
| |-- layerdb
| `-- repositories.json
|-- network
| `-- files
| `-- local-kv.db
|-- overlay2
| `-- l
|-- plugins
| |-- storage
| | `-- ingest
| `-- tmp
|-- runtimes
|-- swarm
|-- tmp
|-- trust
`-- volumes
|-- backingFsBlockDev
`-- metadata.db
|
创建Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
FROM node:12
# 创建一个工作环境目录
WORKDIR /usr/src/app
# 复制package.json
COPY package*.json ./
# 安装依赖
RUN npm install
# If you are building your code for production
# RUN npm ci --only=production
# 复制源码到docker的工作目录
COPY . .
EXPOSE 8080
# 运行程序
CMD [ "node", "server.js" ]
|
创建.dockerignore
1
2
|
node_modules
npm-debug.log
|
构建你的镜像
-t
给docker 打tag
1
|
docker build . -t hello
|
查看构建成功的镜像
运行镜像
使用 -d
模式运行镜像将以分离模式运行 Docker 容器,使得容器在后台自助运行
1
|
docker run -p 49160:8080 -d hello
|
查看运行中镜像
结果:
1
2
3
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
59cfd31c454a hello "docker-entrypoint.s…" 12 minutes ago Up 12 minutes 0.0.0.0:49160->8888/tcp interesting_feynman
affb2d1fbf8c vesoft/nebula-graphd:v3.0.0 "/usr/local/nebula/b…" 10 days ago Up 3 days (healthy) 0.0.0.0:9669->9669/tcp, 0.0.0.0:52140->19669/tcp, 0.0.0.0:52141->19670/tcp nebula-docker-compose_graphd_1
|
停止镜像
1
2
|
# 59cfd31c454a为镜像Id
docker stop 59cfd31c454a
|
复制文件到容器
1
|
docker cp test.txt <container id>:test.txt
|
进入容器
1
|
docker exec -it <container id> /bin/bash
|
结果:
1
2
|
root@59cfd31c454a:/usr/src/app# ls
Dockerfile hello.js package-lock.json package.json
|
查看所有容器
1
|
docker container list -a
|
结果:
1
2
3
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
59cfd31c454a hello "docker-entrypoint.s…" 19 minutes ago Exited (137) 9 seconds ago interesting_feynman
dcf5f511b71b 22c664b382c0 "docker-entrypoint.s…" 23 minutes ago Exited (137) 21 minutes ago dazzling_banz
|
启动已经停止的容器
1
|
docker run <CONTAINER_ID>
|
删除容器
1
2
3
4
|
# 先停止
docker stop <CONTAINER_ID>
# 删除容器
docker container rm
|
删除镜像
1
|
docker image rm <IMAGE_ID>
|
原创:https://nodejs.org/zh-cn/docs/guides/nodejs-docker-webapp/