容器化运维操作(五)——制作Docker镜像之Koa应用、docker images-查看本地镜像列表
制作Docker镜像(重点)
Dockerfile 是一个由一堆命令+参数构成的脚本,使用 docker build
即可执行脚本构建镜像,自动的去做一些事,主要用于进行持续集成。
一般,Dockerfile 共包括四部分:
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行指令
当Node.js遇见Docker,下面介绍Docker在前端中的应用:
一个简单的Koa应用:
const Koa = require('koa');
const app = new Koa();
// response
app.use(ctx => {
ctx.body = 'Hello Koa!!';
});
app.listen(3000);
Dockerfile示例:
FROM node:10
LABEL maintainer=itheima@itcast.cn
# 创建 app 目录
WORKDIR /app
# 把 package.json,package-lock.json(npm@5+) 或 yarn.lock 复制到工作目录(相对路径)
COPY ["package.json","*.lock","./"]
# 打包 app 源码
# 特别注意:要指定工作目录中的文件名
COPY src ./src
# 使用.dockerignore文件,上面两个COPY合并成一个
# COPY . .
# 使用Yarn安装 app 依赖
# 如果你需要构建生产环境下的代码,请使用:
# --prod参数
RUN yarn --prod --registry=https://registry.npm.taobao.org
# 对外暴露端口 -p 4000:3000
EXPOSE 3000
CMD [ "node", "src/index.js" ]
使用docker build
打包:
docker build -t ${your_name}/${image_name}:${tag} .
这里的your_name
代表的是远程仓库中的用户名,或者仓库地址; image_name
为镜像名称,tag
是给镜像打的标签,用于版本控制。例如:
docker build -t itheima/node-demo:1.0 .
# 查看本地镜像列表创建情况
docker images
打包过程:
$ docker build -t itheima/node-demo:1.0 .
Sending build context to Docker daemon 17.92kB
Step 1/8 : FROM node:10
---> 5a401340b79f
Step 2/8 : LABEL maintainer=itheima@itcast.cn
---> Using cache
---> dd01419f30d5
Step 3/8 : WORKDIR /app
---> Using cache
---> bb9a44851ec9
Step 4/8 : COPY . .
---> Using cache
---> b08ff37c5456
Step 5/8 : RUN ls -la /app
---> Using cache
---> 4e0e57e807a1
Step 6/8 : RUN yarn --prod --registry=https://registry.npm.taobao.org
---> Using cache
---> 96ab842b4766
Step 7/8 : EXPOSE 3000
---> Using cache
---> 505dda4e680f
Step 8/8 : CMD [ "node", "src/index.js" ]
---> Using cache
---> f60e25a577de
Successfully built f60e25a577de
Successfully tagged itheima/node-demo:1.0
回顾前面的知识:
如何使用?
还记得docker run
命令吗?
docker run -d --name nodedemo -p 3000:3000 itheima/node-demo:1.0
然后使用docker ps
来看运行状态
$ docker run -d --name nodedemo -p 3000:3000 itheima/node-demo:1.0
c863da9afea1558593843233aec08989184d8dafbb0f8443830d1e523104ab00
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c863da9afea1 itheima/node-demo:1.0 "node src/index.js" 2 seconds ago Up 1 second 0.0.0.0:3000->3000/tcp nodedemo