我的第一个docker 应用容器

本文介绍我的第一个doccker 应用容器的建立过程

主要参考学习 官方的教程 示例应用,当中也碰到困惑的问题,通过网络查找获得答案的,但官方教程里没有提。

安装docker

我是在windows 10 上安装的docker:。不知看的哪个教程,先安装boot2doker,结果运行不起来。 后来看那是过时的方法,直接安装就好。官方教程在docker 学习里有个

链接

或者直接下载windows 10 的版本,有个说法windows 版本只能是windows pro 版本,其他版本要另外,这里没看到这个说法,不过我是windows pro 版本。

样例应用的样子

在本地浏览器上输入 localhost:8080 有如下的应用:

Add Item 里输入内容,然后按钮,就在下面加一行内容,行中右边红点一点就删除

 这个应用用的是 node.js,原文说不懂也没关系,我就不懂。

获取应用

下载代码压缩文件 这样得到一个app.zip 的文件,再解压,得到一个app 的目录。

app 的内容是 :app 下有2个文件,还有2个目录。

原文中说可以用自己喜欢的ide 打开编辑,其实这个部分只要编辑一个文本文件就好。

下面是用Visual Studio Code 打开看到的情况,其中打开了package.json

看看目录结构用dir 或者文件管理器都可以。看不看也没关系。

建立应用的容器Image

为了构建应用程序,需要使用Dockerfile。 Dockerfile只是用于创建容器映像的基于文本的指令脚本。 

建立一个 Dokerfile 的文件,注意后面不能有扩展名,如果用记事本编辑会给你加一个txt的扩展名,万一这样,ren 改名去掉扩展名。

文件的内容是:

 FROM node:12-alpine
 WORKDIR /app
 COPY . .
 RUN yarn install --production
 CMD ["node", "src/index.js"]

建立好Dockerfile 文件后,就可以编辑建立容器image 了。其命令是:

 docker build -t getting-started .

此命令使用Dockerfile构建新的容器Image。 可能已经注意到下载了许多“图层”。 这是因为我们指示构建器要从node:12-alpine映像开始。 但是,由于我们的计算机上没有该Image,因此需要下载该Image。

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

最后,-t 标记我们的Image 名。 可以简单地将其视为最终Image的易于理解的名称。 由于我们将图像命名为starting-starting,因此我们可以在运行容器时引用该Image。

注意命令行后面的 . 是当前目录的意思。 docker build命令末尾的内容告诉Docker应该在当前目录中查找Dockerfile。

启动应用容器

用下面命令执行启动应用容器:

 docker run -dp 3000:3000 getting-started

记得-d和-p标志吗? 我们正在“detached”模式下(在后台)运行新容器,并在主机的端口3000到容器的端口3000之间创建映射。如果没有端口映射,我们将无法访问该应用程序。 

我用这个命令就出现问题了,错误信息如下:

C:\download\dockerapp> docker run -dp 3000:3000 getting-started
a13defcc0b4f65ddfb8290ee0493ef5c59a7530cf11f75fb8349313069acc4bc
docker: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:3000: bind: An attempt was made to access a socket in a way forbidden by its access permissions.


后来在网上查找解决的办法,困在这有2天,看到一个人说,查看本地port 被禁的信息:

netsh interface ipv4 show excludedportrange protocol=tcp

我的信息是:

C:\download\dockerapp>netsh interface ipv4 show excludedportrange protocol=tcp

协议 tcp 端口排除范围

开始端口    结束端口
----------    --------
      1692        1791
      1792        1891
      1892        1991
      1992        2091
      2180        2279
      2480        2579
      2580        2679
      2790        2889
      2890        2989
      2990        3089
      3090        3189
      3190        3289
      3490        3589
      3590        3689
      4014        4113
      4114        4213
      4363        4462
      4499        4598
      5275        5374
      5375        5474
     50000       50059     *

* - 管理的端口排除。

确实,端口被禁了,既然是端口被禁了,那就改用一个没有被禁的口。

我这么想,就用了下面命令;

 docker run -dp 8080:3000 getting-started

这回没有错误信息了,你看命令和信息如下:

C:\download\dockerapp> docker run -dp 8080:3000 getting-started
b461fd95b2211a463baabd89faba93ab9e0fe31b91d336f972f36e2f9c589dc8

我再在浏览器里输入:

localhost:8080

得到了开始那个应用的结果。

:前面是本地端口号,后面是容器的端口号,这样实现端口映像的。

猜你喜欢

转载自blog.csdn.net/leon_zeng0/article/details/113832779