how to use docker (4) - build your image

how to create docker image

之前的教程都是在学习如何使用已有的docker镜像创建容器,今天我们学习一下,使用docker创建自己的镜像容器。
我们可以把已经开发好的应用,添加到已有的镜像文件,打包为自己的镜像文件方便使用,到快速安装部署的目的。
首先我们可以从这里下载需要用来测试打包的应用
down load Zip
这是一个待办事项的nodejs应用程序,你不必了解nodejs。这只是作为一个例子.

  • 利用 Dockerfile 来创建镜像 *

    使用 docker commit 来扩展一个镜像比较简单,但是不方便在一个团队中分享。我们可以使用 docker build 来创建一个新的镜像。
    为此,首先解压缩app.zip后 copy app文件夹到 E:\code目录下。然后重命名为dockerapp并且在这个文件夹中创建一个名为Dockerfile的文件,
    这个文件中包含一些如何创建镜像的指令。

    1
    2
    E:\code>ren app dockerapp
    E:\code>cd dockerapp

1. 在dockerapp中创建一个文件

Dockerfile是一个没有后缀名的文件,名称就是dockerfile的文本文件, 文件中每一条指令都创建镜像的一层,例如:

1
2
3
4
5
6
7
8
# 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命令创建镜像

1
E:\code\dockerapp>docker build -t dockerapp .

执行后可以看到运行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
[+] 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 构建新的容器镜像。您可能已经注意到下载了很多“层”。

  1. 因为我们指示构建器我们要从使用node:12-alpine镜像开始。但是,由于我们的机器上没有该镜像,因此需要下载该镜像。

  2. 下载镜像后,我们复制到我们的应用程序中并用yarn安装我们应用程序的依赖项。该CMD指令指定从该映像启动容器时要运行的默认命令。

  3. 最后,-t标志标记我们的镜像。将此简单地视为最终镜像的人类可读名称。由于我们将镜像命名为dockerapp,因此我们可以在运行容器时引用该镜像。
    
  4. 最后一个. 表示当前目录是为了告诉docker build命令Dockerfile文件所在的位置。
    

3. 现在运行docker images可以看到我们自己新创建的镜像了

1
2
3
E:\code\dockerapp>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockerapp latest c8f742b494bc 22 minutes ago 294MB

4. 使用自己创建的镜像创建容器

1
2
E:\code\dockerapp>docker run -dp 3000:3000 dockerapp
b6704592a1a6cff48fb30de95bb76af63b376ab855f3ae1dc25b289c7437697e

打开浏览器访问 http://localhost:3000端口测试一下结果

学习愉快!