摘要:通過能獲得很多別人定制好的但是如果自己想制作一個自己容器該怎么弄呢用就像一個腳本文件告訴如何創建一個新的下面舉例來用來制作一個服務器的指令剛才提到了社區已經有很多很好用的那我們要構建自己的的話就可以在這些的基礎上來做我們要做一個基于的服務器
通過 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 服務了.
完希望大家喜歡.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/27081.html
摘要:在程序員英語娛樂主題節目的直播中介紹了下在網站學習的視頻由于時間倉促只學習了一部分最近因為的公司的原因也沒有時間繼續搞直播所以想寫一篇分享下自己的的學習經驗想學習簡短有效的風格所以就將文章題目定為速成班準備本地已經安裝好了現在各個操作系統上 在程序員英語娛樂主題節目http://www.douyu.com/aftercode的直播中介紹了下在 egghead 網站學習 docker 的...
摘要:本來想在一篇里面就寫完所有的內容的但是考慮考慮到文章太長會和風格相背離所以就按連載的形式來容器是物質基礎有了這個才能讓能運行起來運行起來的稱之為容器它使用中的一等公民直接啟動使用啟動一個容器如果你沒有下載過的話會自動下載一個的指定方法和刪除 本來想在一篇 blog 里面就寫完所有的內容的,但是考慮考慮到文章太長會和 egghead 風格相背離,所以就按連載的形式來. 容器 contai...
摘要:通過的我們可以將多個有機的組合起來構建出自己需要的服務但是這里有幾個小問題就是不利于分享步驟麻煩需要自己創建指定使用那如何解決上面的兩個問題呢第節例子中的服務可以通過創建一個這樣的文件來解決通過下面的命令就能將所有需要的啟動起來 通過docker 的 network我們可以將多個 container 有機的組合起來構建出自己需要的服務. 但是這里有幾個小問題就是 不利于分享. 步驟麻...
摘要:到現在為止我們會從拉取自己需要的文件并執行起來還會基于已有的來制作自己特殊需要的但是如果我們完成一個功能需要多個組合起來使用該怎么辦呢雖然可以通過來制作一個這樣的但是如果所有的功能都做在一個中如果有一個模塊需呀改變的話就需要重新構建整個作為 到現在為止,我們會從 docker hub 拉取自己需要的 image 文件并執行起來. 還會基于已有的 image 來制作自己特殊需要的 ima...
摘要:由于公司沒有運維又需要監控服務器的一些數據信息想盡快的啟動一個數值監控系統技術評估了下打算的方式來建設是一個時間數列數據庫并且自帶一些簡單圖形展示功能雖然展示方面不是很完美但是在收集時間數據上非常的方便和簡單根據官網的例子只需要一個連接就能 由于公司沒有運維, 又需要監控服務器的一些數據信息, 想盡快的啟動一個數值監控系統. 技術評估了下打算 graphite + grafana 的...
閱讀 2805·2023-04-25 23:08
閱讀 1594·2021-11-23 09:51
閱讀 1575·2021-10-27 14:18
閱讀 3125·2019-08-29 13:25
閱讀 2839·2019-08-29 13:14
閱讀 2913·2019-08-26 18:36
閱讀 2200·2019-08-26 12:11
閱讀 821·2019-08-26 11:29