摘要:通过能获得很多别人定制好的但是如果自己想制作一个自己容器该怎么弄呢用就像一个脚本文件告诉如何创建一个新的下面举例来用来制作一个服务器的指令刚才提到了社区已经有很多很好用的那我们要构建自己的的话就可以在这些的基础上来做我们要做一个基于的服务器
通过 docker hub 能获得很多别人定制好的image, 但是如果自己想制作一个自己容器该怎么弄呢?
用 DockerfileDockerfile 就像一个脚本文件, 告诉 docker 如何创建一个新的 Image.
下面举例来用 node.js 来制作一个 http 服务器的 image.
刚才提到了社区已经有很多很好用的 docker images, 那我们要构建自己的 iamge 的话就可以在这些 image 的基础上来做. 我们要做一个基于 node.js 的 http 服务器, 那首先就是找一个已经安装好 node.js 的 image, docker hub 已经有了 node.js 官方 images 了, 直接利用这些资源就可以了. 利用的方式就是使用 FROM 指令.
// Dockerfile FROM node:8.5
通过 FROM 来指定 node.js 的版本和拉取 image 的格式一样. 如果你需要依赖的 image 是社区版本的话,要写上对应的 namespace 名字.
COPY 指令有了 node.js 之后我们要写一个 http 服务器. 直接新建一个 index.js 文件, 使用 node.js 官方 hello world 的例子.
// index.js // ref https://nodejs.org/en/about/ const http = require("http"); const hostname = "127.0.0.1"; const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader("Content-Type", "text/plain"); res.end("Hello World "); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });
有了这个服务器代码之后, 就要将这个 index.js 文件从我们的主机上用 COPY 指令拷贝到容器中.这个语法和我们平时使用cp的格式非常类似,要注意的是容器中的地址采用绝对地址.
// Dockerfile FROM node:8.5 COPY index.js /root/index.jsCMD 指令
为了让我们的http 服务器启动起来就用 CMD 在容器中执行的命令.
// Dockerfile FROM node:8.5 COPY index.js /root/index.js CMD node /root/index.js
在容易中执行 node /root/index.js 这样我们的 http 服务就在容器中启动了
EXPOSE 指令虽然启动了服务, 也只是在容器内部自 high; 为了能让服务能在容易意外被使用,就要将服务端口暴露出去.
// Dockerfile FROM node:8.5 COPY index.js /root/index.js EXPOSE 3000 CMD node /root/index.js
这里需要注意的是, 要把 EXPOSE 放在服务启动之前. 不然端口的暴露就会有问题. 别问我为什么会知道,说多了都是泪.
最后一步构建到这里我们的 Dockefile 就完成了,但是我们 image 文件在哪里啊.当让是要通过 docker 的 build 命令构建出来咯.这里的-t 选项告诉 docker 这生成出来的 image 的 tag 是什么. 我们自己的做的 image 属于是社区的 image 记得在 image 名字前面加上自己的 namespace.
docker build . -t pshu/helloWorld:1.0.0
docker 就会先去 docker hub 拉取 node.js 的镜像, 然后按照 Dockerfile 中的
Step 1/4 : FROM node:8.5 8.5: Pulling from library/node aa18ad1a0d33: Pull complete 15a33158a136: Pull complete f67323742a64: Pull complete c4b45e832c38: Pull complete f83e14495c19: Pull complete 41fea39113bf: Pull complete f28b27a3711e: Pull complete 2079c2e3f89a: Pull complete Digest: sha256:27e459456c552642c520a36f934b0e1646043d43877a5e018e9bb3f251d2ef76 Status: Downloaded newer image for node:8.5 ---> de1099630c13 Step 2/4 : COPY index.js /root/index.js ---> 947429cca879 Removing intermediate container 1f813f1cbf71 Step 3/4 : CMD node index.js ---> Running in 17425d436856 ---> c720248bb068 Removing intermediate container 17425d436856 Step 4/4 : EXPOSE 3000 ---> Running in d1b924412684 ---> 969f16cac45d Removing intermediate container d1b924412684 Successfully built 969f16cac45d Successfully tagged pshu/helloworld:1.0.0
docker build 完成就能看见自己的 image 了.
$docker images REPOSITORY TAG IMAGE ID CREATED SIZE pshu/helloworld 1.0.0 969f16cac45d 31 seconds ago 673MB
接着我们之只要用 docker run 命令就能把这个 image 跑起来了.
docker run --rm -i -p 3000:3000 pshu/helloworld:1.0.0
本地的3000端口就能访问到这个 hello world 的 http 服务了.
完希望大家喜欢.
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/27081.html
摘要:在程序员英语娱乐主题节目的直播中介绍了下在网站学习的视频由于时间仓促只学习了一部分最近因为的公司的原因也没有时间继续搞直播所以想写一篇分享下自己的的学习经验想学习简短有效的风格所以就将文章题目定为速成班准备本地已经安装好了现在各个操作系统上 在程序员英语娱乐主题节目http://www.douyu.com/aftercode的直播中介绍了下在 egghead 网站学习 docker 的...
摘要:本来想在一篇里面就写完所有的内容的但是考虑考虑到文章太长会和风格相背离所以就按连载的形式来容器是物质基础有了这个才能让能运行起来运行起来的称之为容器它使用中的一等公民直接启动使用启动一个容器如果你没有下载过的话会自动下载一个的指定方法和删除 本来想在一篇 blog 里面就写完所有的内容的,但是考虑考虑到文章太长会和 egghead 风格相背离,所以就按连载的形式来. 容器 contai...
摘要:通过的我们可以将多个有机的组合起来构建出自己需要的服务但是这里有几个小问题就是不利于分享步骤麻烦需要自己创建指定使用那如何解决上面的两个问题呢第节例子中的服务可以通过创建一个这样的文件来解决通过下面的命令就能将所有需要的启动起来 通过docker 的 network我们可以将多个 container 有机的组合起来构建出自己需要的服务. 但是这里有几个小问题就是 不利于分享. 步骤麻...
摘要:到现在为止我们会从拉取自己需要的文件并执行起来还会基于已有的来制作自己特殊需要的但是如果我们完成一个功能需要多个组合起来使用该怎么办呢虽然可以通过来制作一个这样的但是如果所有的功能都做在一个中如果有一个模块需呀改变的话就需要重新构建整个作为 到现在为止,我们会从 docker hub 拉取自己需要的 image 文件并执行起来. 还会基于已有的 image 来制作自己特殊需要的 ima...
摘要:由于公司没有运维又需要监控服务器的一些数据信息想尽快的启动一个数值监控系统技术评估了下打算的方式来建设是一个时间数列数据库并且自带一些简单图形展示功能虽然展示方面不是很完美但是在收集时间数据上非常的方便和简单根据官网的例子只需要一个连接就能 由于公司没有运维, 又需要监控服务器的一些数据信息, 想尽快的启动一个数值监控系统. 技术评估了下打算 graphite + grafana 的...
阅读 2796·2023-04-25 23:08
阅读 1582·2021-11-23 09:51
阅读 1561·2021-10-27 14:18
阅读 3114·2019-08-29 13:25
阅读 2830·2019-08-29 13:14
阅读 2894·2019-08-26 18:36
阅读 2192·2019-08-26 12:11
阅读 810·2019-08-26 11:29