4.2 开发视角
容器即应用!
在本节中,会分析一份应用代码中的Dockerfile并将其容器化,最终以容器的方式运行。相关代码可从本书配套资源或我的Github主页中获取。
本节接下来的内容会基于 Linux 示例进行演示。但其实两个示例中都容器化了相同的Web 应用代码,所以步骤也是一样的。
进入到仓库文件目录之下,查看其内容。
$ cd psweb
$ ls -l
total 28
-rw-rw-r-- 1 ubuntu ubuntu 341 Sep 29 12:15 app.js
-rw-rw-r-- 1 ubuntu ubuntu 216 Sep 29 12:15 circle.yml
-rw-rw-r-- 1 ubuntu ubuntu 338 Sep 29 12:15 Dockerfile
-rw-rw-r-- 1 ubuntu ubuntu 421 Sep 29 12:15 package.json
-rw-rw-r-- 1 ubuntu ubuntu 370 Sep 29 12:15 README.md
drwxrwxr-x 2 ubuntu ubuntu 4096 Sep 29 12:15 test
drwxrwxr-x 2 ubuntu ubuntu 4096 Sep 29 12:15 views
对于Windows示例,读者需要 cd
到 dotnet-docker-samples\aspnetapp
目录当中。
Linux的示例是一个简单的Node.js Web应用。Windows示例是一个简单的ASP.NET Web应用。
每个仓库中都包含一个名为 Dockerfile
的文件。Dockerfile是一个纯文本文件,其中描述了如何将应用构建到Docker镜像当中。
查看Dockerfile的全部内容。
$ cat Dockerfile
FROM alpine
LABEL maintainer="nigelpoulton@hotmail.com"
RUN apk add --update nodejs nodejs-npm
COPY . /src
WORKDIR /src
RUN npm install
EXPOSE 8080
ENTRYPOINT ["node", "./app.js"]
Windows示例中的Dockerfile内容会有所不同。但是,这些区别在现阶段并不重要。关于Dockerfile的更多细节本书会在接下来的章节中进行详细介绍。现在,只需要知道Dockerfile的每一行都代表一个用于构建镜像的指令即可。
使用 docker image build
命令,根据Dockerfile中的指令来创建新的镜像。示例中新建的Docker镜像名为 test:latest
。
一定要在包含应用代码和Dockerfile的目录下执行这些命令。
$ docker image build -t test:latest .
Sending build context to Docker daemon 74.75kB
Step 1/8 : FROM alpine
latest: Pulling from library/alpine
88286f41530e: Pull complete
Digest: sha256:f006ecbb824...0c103f4820a417d
Status: Downloaded newer image for alpine:latest
---> 76da55c8019d
<Snip>
Successfully built f154cb3ddbd4
Successfully tagged test:latest
注:
Windows示例构建可能花费比较长的时间。构建时间长短是由构建过程中要拉取的镜像大小和复杂度决定的。
一旦构建完成,就可以确认主机上是否存在 test:latest
镜像。
$ docker image ls
REPO TAG IMAGE ID CREATED SIZE
Test latest f154cb3ddbd4 1 minute ago 55.6MB
...
读者现在已经拥有一个新的Docker镜像,其中包含了应用程序。
从镜像启动容器,并测试应用。
Linux代码如下。
$ docker container run -d \
--name web1 \
--publish 8080:8080 \
test:latest
打开Web浏览器,在地址栏中输入容器运行所在的Docker主机的DNS名称或者IP地址,并在后面加上端口号 8080
。然后就能看到图4.1的Web页面。
如果读者使用的是Windows示例或者Mac版Docker,则需要将地址替换为 localhost:8080
或者 127.0.0.1:8080
;如果读者使用的是Play with Docker,需要单击终端界面上的 8080
超链接。
Windows代码如下。
> docker container run -d \
--name web1 \
--publish 8080:80 \
test:latest
打开Web浏览器,在地址栏中输入容器运行所在的Docker主机的DNS名称或者IP地址,并在后面加上端口号 8080
,然后就能看到图4.2的Web页面。
如果读者使用的是Windows示例或者Mac版Docker,则可参考上面的规则。
读者已经成功将应用代码构建到了Docker镜像当中,然后以容器的方式启动该镜像,这个过程叫作“应用容器化”。