create docker image 创建自己的镜像
之前的教程都是在学习如何使用已有的docker镜像创建容器,今天我们学习一下,使用docker创建自己的镜像容器。
我们可以把已经开发好的应用,添加到已有的镜像文件,打包为自己的镜像文件方便使用,到快速安装部署的目的。
首先我们可以从这里下载需要用来测试打包的应用
down load Zip
这是一个待办事项的nodejs应用程序,你不必了解nodejs。这只是作为一个例子.
- 利用 Dockerfile 来创建镜像 *
使用 docker commit 来扩展一个镜像比较简单,但是不方便在一个团队中分享。我们可以使用 docker build 来创建一个新的镜像。
为此,首先解压缩app.zip后 copy app文件夹到 E:\code目录下。然后重命名为dockerapp并且在这个文件夹中创建一个名为Dockerfile的文件,
这个文件中包含一些如何创建镜像的指令。
E:\code>ren app dockerapp
E:\code>cd dockerapp
1. 在dockerapp中创建一个文件
Dockerfile
是一个没有后缀名的文件,名称就是dockerfile的文本文件, 文件中每一条指令都创建镜像的一层,例如:
# This is a comment
FROM node:12-alpine
MAINTAINER Docker dangkei <dangkei@163.com>
RUN apk add --no-cache python g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
2. 保存完毕后,dockerfile当前所在的目录使用docker build命令创建镜像
E:\code\dockerapp>docker build -t dockerapp .
执行后可以看到运行结果
[+] Building 34.4s (11/11) FINISHED
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 251B 0.0s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/node:12-alpine 5.9s
=> [auth] library/node:pull token for registry-1.docker.io
.
.
.
=> => exporting layers 1.2s
=> => writing image sha256:c8f742b494bcee74a08ac4dc93ce9b2824a68e09d693977d3969bdddd82c1095 0.0s
=> => naming to docker.io/library/dockerapp 0.0s
此命令使用 Dockerfile 构建新的容器镜像。您可能已经注意到下载了很多“层”。
-
因为我们指示构建器我们要从使用node:12-alpine镜像开始。但是,由于我们的机器上没有该镜像,因此需要下载该镜像。
-
下载镜像后,我们复制到我们的应用程序中并用yarn安装我们应用程序的依赖项。该CMD指令指定从该映像启动容器时要运行的默认命令。
-
最后,-t标志标记我们的镜像。将此简单地视为最终镜像的人类可读名称。由于我们将镜像命名为dockerapp,因此我们可以在运行容器时引用该镜像。
-
最后一个. 表示当前目录是为了告诉docker build命令Dockerfile文件所在的位置。
3. 现在运行docker images
可以看到我们自己新创建的镜像了
E:\code\dockerapp>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockerapp latest c8f742b494bc 22 minutes ago 294MB
4. 使用自己创建的镜像创建容器
E:\code\dockerapp>docker run -dp 3000:3000 dockerapp
b6704592a1a6cff48fb30de95bb76af63b376ab855f3ae1dc25b289c7437697e
打开浏览器访问 http://localhost:3000端口测试一下结果
学习愉快!