制作自己的 Docker 容器

????????軟件開發最大的麻煩事之一,就是環境配置。用戶必須保證操作系統的設置,各種庫和組件的安裝,只有它們都正確,軟件才能運行。docker從根本上解決問題,軟件安裝的時候,把原始環境一模一樣地復制過來。

????????以?koa-demos?項目為例,介紹怎么寫 Dockerfile 文件,實現讓用戶在 Docker 容器里面運行 Koa 框架。準備工作,下載源碼:git clone https://github.com/ruanyf/koa-demos.git cd koa-demos

1、編寫 Dockerfile 文件

????????首先,在項目的根目錄下,新建一個文本文件.dockerignore,寫入下面的內容。

.git node_modules npm-debug.log

????????上面代碼表示,這三個路徑要排除,不要打包進入image文件。如果你沒有路徑要排除,這個文件可以不新建。

????????然后,在項目的根目錄下,新建一個文本文件 Dockerfile,寫入下面的內容。

FROM node:8.4 
COPY . /app WORKDIR /app 
RUN npm install --registry=https://registry.npm.taobao.org 
EXPOSE 3000

????????上面代碼一共五行,含義如下。

????????FROM node:8.4:該 image 文件繼承官方的 node image,冒號表示標簽,這里標簽是8.4,即8.4版本的 node。

????????COPY . /app:將當前目錄下的所有文件(除了.dockerignore排除的路徑),都拷貝進入 image 文件的/app目錄。

????????WORKDIR /app:指定接下來的工作路徑為/app。

????????RUN npm install:在/app目錄下,運行npm install命令安裝依賴。注意,安裝后所有的依賴,都將打包進入 image 文件。

????????EXPOSE 3000:將容器 3000 端口暴露出來, 允許外部連接這個端口。

2、創建 image 文件

????????有了 Dockerfile 文件以后,就可以使用docker image build命令創建 image 文件了。

docker image build -t koa-demo . 
# 或者 
docker image build -t koa-demo:0.0.1 .

????????終端打印執行過程:

????????上面代碼中,-t參數用來指定 image 文件的名字,后面還可以用冒號指定標簽。如果不指定,默認的標簽就是latest。最后的那個點表示 Dockerfile 文件所在的路徑,上例是當前路徑,所以是一個點。

????????如果運行成功,就可以看到新生成的 image 文件koa-demo了。

docker image ls

3、生成容器

????????docker container run命令會從 image 文件生成容器。

docker container run -p 8000:3000 -it koa-demo /bin/bash 
# 或者 
docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash

????????如果一切正常,運行上面的命令以后,就會返回一個命令行提示符。

root@66d80f4aaf1e:/app#

????????這表示你已經在容器里面了,返回的提示符就是容器內部的 Shell 提示符。執行下面的命令。

root@66d80f4aaf1e:/app# node demos/01.js

????????這時,Koa 框架已經運行起來了。打開本機的瀏覽器,訪問 http://127.0.0.1:8000,網頁顯示"Not Found",這是因為這個?demo?沒有寫路由。

4、CMD 命令

????????上一節的例子里面,容器啟動以后,需要手動輸入命令node demos/01.js。我們可以把這個命令寫在 Dockerfile 里面,這樣容器啟動以后,這個命令就已經執行了,不用再手動輸入了。

FROM node:8.4 
COPY . /app WORKDIR /app 
RUN npm install --registry=https://registry.npm.taobao.org 
EXPOSE 3000 
CMD node demos/01.js # 容器啟動后執行命令,一個容器只能有一個CMD命令.

????????上面的 Dockerfile 里面,多了最后一行CMD node demos/01.js,它表示容器啟動后自動執行node demos/01.js。

????????注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否則它會覆蓋CMD命令。現在,啟動容器可以使用下面的命令。

docker container run --rm -p 8000:3000 -it koa-demo:0.0.1

5、測試demo

????????在ubuntu 21.04最小系統上,運行hello.sh文件,運行方式./hello.sh,文件內容:

#hello.sh 
echo "hello docker"????????

????????Dockerfile基本結構:

FROM ubuntu:21.04 
ADD hello.sh / 
CMD ["./hello.sh"]

????????鏡像的構建,-t:tag指定鏡像名稱和版本:

docker image build -t hello.sh:1.0 .

????????構建過程截圖:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533341.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533341.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533341.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

notepad php源碼,GitHub - CharlesKiki/Web-Notepad: 這是一個仿制有道云筆記的原生PHP小玩具。...

What is this?一個仿制筆記的Web應用。但是重點在于“重構”的樂趣。特點簡言之,不使用框架就以原生的語言來開發一個網站,最大的好處就是最實現方法的理解會加深。但是不適用框架也意味著重復和冗余,這也導致了項目閱讀時的閱讀思路。設計稿…

matlab機械手ikine函數,關于Mtalab-robotics工具箱中的fkine和ikine兩個函數的問題討論!...

clear;clc;L1 Link([-pi/2 0 0 0 0],standard);L2 Link([0 10 0 -pi/2 0],standard);L3 Link([0 9.5 0 0 0],standard);L4 Link([-pi/2 3.2 -pi/2 0 0],standard);L5 Link([0 0 0 14.5 0],standard);r SerialLink([L1 L2 L3 L4 L5]);%r.name 5R工業機械臂-上電姿態;q […

matlab差分算子的灰度圖像邊緣檢測,常用圖像邊緣檢測方法及MATLAB研究

論文2 1年 2月 I 01 5日現代電子技術M o e n El c r i sT e h qu d r e ton c c ni e第3 4卷第 4期Fe .2 11 b 0 Vo1 3 . . 4 NO 4常用圖像邊緣檢測方法及 Malb研究 t a韋煒(安文理學院,陜西西安西 706 ) 1 0 5({№噸~一~一一一三一一垂”. ; _堇;~~ _一…

mysql客戶端重置密碼是多少,mysql重置root密碼

你可以按照以下簡單的五步來重置/etc/init.d/mysql stop輸出:Stopping MySQL database server: mysqld./usr/bin/mysqld_safe --skip-grant-tables &輸出:[1] 5988Starting mysqld daemon with databases from /var/lib/mysqlmysqld_safe[6025]: sta…

go為什么比php性能好,剛學 GO,擼了個支付寶發券的程序,為什么性能還比不上 PHP ?...

下面是主程代碼,這是詳細代碼func main() {//解析參數filePath : flag.String("f", "", "文件路徑")tplId : flag.String("t", "", "模版 ID")flag.Parse()//解析密鑰pk, err : ParsePrivateKey()chec…

php %3c%3c%3cxml 報錯,代碼審計| APPCMS SQL-XSS-CSRF-SHELL

0x01 背景由若水師傅提供的一個素材,想要復現CNVD上披露的一個APPCMS的漏洞,由CNVD上的描述可以知道存在漏洞的地方是comment.php這個文件,然后就沒有詳細的漏洞信息了,所以就需要分析相應的源碼文件找出存在漏洞的點。借這個素材…

php二進制保存到本地,C# 將二進制字符串保存到本地

C# 將二進制字符串保存到本地#region 將文件保存到本地/// /// 將文件保存到本地/// /// 文件的二進制數據字符串/// 文件名稱,必須帶后綴private void SaveFile(string psContent, string psFileName){byte[] accessory Convert.FromBase64String(psContent);//Sy…

suse 安裝oracle11,Suse11安裝Oracle11gR2

注:以下采用終端XmanagerEnterprise 4中的Xshell連接1、安裝前參數修改vi /etc/security/limits.conf --末尾添加如下oracle soft nproc 2047oracle hard nproc 16384oracle soft nofile 1024oracle hard nofile 65536vi /etc/sysctl.conf --末尾添加如…

oracle安裝缺少,安裝oracle11g R2 缺少依賴包

最近我在RHEL6.1上安裝oracle11gR2時總是碰見如題說示的錯誤,在網上查了很多資料但都未能解決。網上都說是gcc版本問題或者gcc的包沒有裝全,但沒有給出正確的gcc安裝方法。這里轉載別人的安裝gcc的rpm包的順序及方法,供各位參考:轉…

PHP7數字三角形代碼,倒數字三角

摘要&#xff1a;描述 Description以下的數字倒直角三角形是由二個數確定的&#xff1a;一個數是行數R&#xff0c;1<R<39&#xff0c;另一個是種子數S,1<S<9。S放在左上角&#xff0c;照著樣例輸出文件的樣子&#xff0c;寫一個程序&#xff0c;根據輸入的二個數打…

oracle 超市管理系統,SuperManager 超市賬單管理系統 JSP + Servlet + Oracle Jsp/ 240萬源代碼下載- www.pudn.com...

文件名稱: SuperManager下載 收藏√ [5 4 3 2 1 ]開發工具: Java文件大小: 2144 KB上傳時間: 2015-07-07下載次數: 0詳細說明&#xff1a;超市賬單管理系統JSP Servlet Oracle-超市賬單管理系統JSP Servlet Oracle文件列表(點擊判斷是否您需要的文件&#xff0c;如果是…

oracle組合數據類型,oracle復合數據類型-相關方法

oracle提供了一些內置的函數和方法來操作復合數據類型。一、count 返回集合中的元素的個數declaretype ename_table_type is table of varchar2(20) index by binary_integer ;ename_table ename_table_type ;beginfor i in 1..5 loopename_table(i):a||i ;end loop ;dbms_outp…

hibernate native oracle,hibernate native 主鍵生成策略

前一次做個系統用的oracle數據庫&#xff0c;使用hibernate生成主鍵的策略是SEQUENCE,當時覺得很累&#xff0c;因為不知道怎么的&#xff0c;oraclesequencetrigger怎么也取不到新增數據時的主鍵值。這次就把重點放這里了&#xff0c;同時還有兩個新的問題&#xff0c;1。到底…

export Oracle_sid =asm,單實例下oracle數據庫從文件系統遷移到ASM上

第一步&#xff1a;啟動ASM實例(ASM)[oracleoracle ~]$ export ORACLE_SIDASM[oracleoracle ~]$ sqlplus / as sysdbaSQL*Plus: Release 10.2.0.5.0 - Production on Tue Jan 18 13:25:46 2011Copyright (c) 1982, 2010, Oracle. All Rights Reserved.Connected to:Oracle Dat…

linux命令行的操作符,如何在Linux命令行中進行基本的數學運算

原標題&#xff1a;如何在Linux命令行中進行基本的數學運算Linux bash或命令行允許您執行基本和復雜的算術和布爾運算。像expr&#xff0c;jot&#xff0c;bc和factor等命令可以幫助您找到復雜問題的最優數學解決方案。在本文中&#xff0c;我們將描述這些命令并提供示例&#…

在linux關閉的命令,關于關閉Linux計算機的命令操作

關于關閉Linux計算機的命令操作shutdown -h now 立即關機shutdown -r now 立即重啟Linux命令&#xff1a;shutdown功能說明&#xff1a;系統關機指令。語法&#xff1a;shutdown [-efFhknr][-t 秒數][時間][警告信息]補充說明&#xff1a;shutdown指令可以關閉所有程序&#xf…

linux什么用戶什么任務,linux任務里的1 和2是什么意思

輸出學過代碼的小伙伴應該知道STDIN、STDOUT、STDERR通常都是指定輸出通道的&#xff0c;perl里又稱之為句柄那么1代表的就是STDOUT、2代表的是STDERR、jimmy在視頻中會翻譯成1代表的是正確輸出&#xff0c;2代表的是錯誤輸出。其實嚴格上不能這樣去固有化去理解每一個軟件的定…

linux 命令 查詢丟包率,linux測試丟包率的命令 linux查看丟包率命令

關于用ping命令測網絡延遲和丟包率&#xff1f;在工作中&#xff0c;ping命令用于測試網絡是否可以連接。其次是網絡連接的穩定性&#xff0c;也就是所謂的丟包率。延時參數可手動設定&#xff0c;影響因素較多。輸入windows dos并輸入Ping/all以查看所有參數分析和單個示例。L…

linux http連接超時時間設置,Linux 下 HTTP連接超時

將項目部署到現場環境&#xff0c;HTTP請求莫名奇妙的連接超時&#xff0c;通過抓包定位了問題&#xff0c;是請求的IP被禁止掉。其中用到了抓包&#xff0c;將記錄記錄于此。tcpdump host 120.197.89.51 -i any -vvv::06.241085 IP (tos 0x0, ttl , id , offset , flags [DF],…

linux 庫的頭文件安裝在,“找不到jpeg的頭文件或庫文件”在Alpine Linux上安裝枕頭...

我試圖在基于python:alpine的Docker容器中運行Python的Scrapy。它以前是有效的&#xff0c;但現在我想使用Scrapy的Image Pipeline這需要我安裝枕頭。作為一個簡單的例子&#xff0c;我嘗試了以下Dockerfile&#xff1a;FROM python:alpineRUN apk --update add libxml2-dev li…