0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

兩小時(shí)輕松快速入門Docker

馬哥Linux運(yùn)維 ? 來源:fqj ? 2019-04-26 10:51 ? 次閱讀

1、引言

1.1Docker是什么

Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國期間發(fā)起的一個(gè)公司內(nèi)部項(xiàng)目,于 2013 年 3 月以 Apache 2.0 授權(quán)協(xié)議開源,主要項(xiàng)目代碼在 GitHub 上進(jìn)行維護(hù)。

Docker 使用 Google 公司推出的 Go 語言 進(jìn)行開發(fā)實(shí)現(xiàn)。

docker是linux容器的一種封裝,提供簡單易用的容器使用接口。它是最流行的Linux容器解決方案。

docker的接口相當(dāng)簡單,用戶可以方便的創(chuàng)建、銷毀容器。

docker將應(yīng)用程序與程序的依賴,打包在一個(gè)文件里面。運(yùn)行這個(gè)文件就會(huì)生成一個(gè)虛擬容器。

程序運(yùn)行在虛擬容器里,如同在真實(shí)物理機(jī)上運(yùn)行一樣,有了docker,就不用擔(dān)心環(huán)境問題了。

1.2 應(yīng)用場景

web應(yīng)用的自動(dòng)化打包和發(fā)布

自動(dòng)化測試和持續(xù)集成、發(fā)布

在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫或其他應(yīng)用

1.3 區(qū)別

1、物理機(jī)

2、虛擬機(jī)

3、docker容器

1.4 Docker的三大概念及優(yōu)勢

鏡像image

容器container

倉庫repository

docker容器的優(yōu)勢

# 1、更高效的利用系統(tǒng)資源

由于容器不需要進(jìn)行硬件虛擬以及運(yùn)行完整操作系統(tǒng)等額外開銷,Docker 對(duì)系統(tǒng) 資源的利用率更高。

無論是應(yīng)用執(zhí)行速度、內(nèi)存損耗或者文件存儲(chǔ)速度,都要比傳 統(tǒng)虛擬機(jī)技術(shù)更高效。因此,相比虛擬機(jī)技術(shù),一個(gè)相同配置的主機(jī),往往可以運(yùn) 行更多數(shù)量的應(yīng)用。

# 2、更快速的啟動(dòng)時(shí)間

傳統(tǒng)的虛擬機(jī)技術(shù)啟動(dòng)應(yīng)用服務(wù)往往需要數(shù)分鐘,而 Docker 容器應(yīng)用,由于直接 運(yùn)行于宿主內(nèi)核,無需啟動(dòng)完整的操作系統(tǒng),因此可以做到秒級(jí)、甚至毫秒級(jí)的啟 動(dòng)時(shí)間。大大的節(jié)約了開發(fā)、測試、部署的時(shí)間。

# 3、一致的運(yùn)行環(huán)境

開發(fā)過程中一個(gè)常見的問題是環(huán)境一致性問題。由于開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán) 境不一致,導(dǎo)致有些 bug 并未在開發(fā)過程中被發(fā)現(xiàn)。

而 Docker 的鏡像提供了除內(nèi) 核外完整的運(yùn)行時(shí)環(huán)境,確保了應(yīng)用運(yùn)行環(huán)境一致性,從而不會(huì)再出現(xiàn) “這段代碼 在我機(jī)器上沒問題啊” 這類問題。

# 4、持續(xù)交付和部署

對(duì)開發(fā)和運(yùn)維(DevOps)人員來說,最希望的就是一次創(chuàng)建或配置,可以在任意 地方正常運(yùn)行。

使用 Docker 可以通過定制應(yīng)用鏡像來實(shí)現(xiàn)持續(xù)集成、持續(xù)交付、部署。開發(fā)人員 可以通過 Dockerfile 來進(jìn)行鏡像構(gòu)建,并結(jié)合持續(xù)集成(Continuous Integration) 系 統(tǒng)進(jìn)行集成測試,而運(yùn)維人員則可以直接在生產(chǎn)環(huán)境中快速部署該鏡像,甚至結(jié)合 持續(xù)部署(Continuous Delivery/Deployment) 系統(tǒng)進(jìn)行自動(dòng)部署。

而且使用 Dockerfile 使鏡像構(gòu)建透明化,不僅僅開發(fā)團(tuán)隊(duì)可以理解應(yīng)用運(yùn)行環(huán) 境,也方便運(yùn)維團(tuán)隊(duì)理解應(yīng)用運(yùn)行所需條件,幫助更好的生產(chǎn)環(huán)境中部署該鏡像。

# 5、更輕松的遷移

由于 Docker 確保了執(zhí)行環(huán)境的一致性,使得應(yīng)用的遷移更加容易。Docker 可以在 很多平臺(tái)上運(yùn)行,無論是物理機(jī)、虛擬機(jī)、公有云、私有云,甚至是筆記本,其運(yùn) 行結(jié)果是一致的。

因此用戶可以很輕易的將在一個(gè)平臺(tái)上運(yùn)行的應(yīng)用,遷移到另一 個(gè)平臺(tái)上,而不用擔(dān)心運(yùn)行環(huán)境的變化導(dǎo)致應(yīng)用無法正常運(yùn)行的情況。

2、0Docker安裝

系統(tǒng)環(huán)境:docker最低支持centos7且在64位平臺(tái)上,內(nèi)核版本在3.10以上

版本:社區(qū)版,企業(yè)版(包含了一些收費(fèi)服務(wù))

官方版安裝教程(英文)

https://docs.docker.com/install/linux/docker-ce/centos/#upgrade-docker-after-using-the-convenience-script

博主版安裝教程:

#安裝dockeryuminstalldocker#啟動(dòng)dockersystemctlstart/statusdocker#查看docker啟動(dòng)狀態(tài)dockerversion

配置加速器

簡介:DaoCloud 加速器 是廣受歡迎的 Docker 工具,解決了國內(nèi)用戶訪問 Docker Hub 緩慢的問題。DaoCloud 加速器結(jié)合國內(nèi)的 CDN 服務(wù)與協(xié)議層優(yōu)化,成倍的提升了下載速度。

DaoCloud官網(wǎng):

https://www.daocloud.io/mirror#accelerator-doc

#一條命令加速(記得重啟docker)curl-sSLhttps://get.daocloud.io/daotools/set_mirror.sh|sh-shttp://95822026.m.daocloud.io

3、0Docker基礎(chǔ)命令

docker --help(中文注解)

Usage:docker[OPTIONS]COMMAND[arg...]
dockerdaemon[--help|...]
docker[--help|-v|--version]Aself-sufficientruntimeforcontainers.Options:--config=~/.docker
Locationofclientconfigfiles#客戶端配置文件的位置-D,--debug=false
Enabledebugmode#啟用Debug調(diào)試模式-H,--host=[]
Daemonsocket(s)toconnectto#守護(hù)進(jìn)程的套接字(Socket)連接-h,--help=false
Printusage#打印使用-l,--log-level=info
Setthelogginglevel#設(shè)置日志級(jí)別--tls=false
UseTLS;impliedby--tlsverify#--tlscacert=~/.docker/ca.pemTrustcertssignedonlybythisCA#信任證書簽名CA--tlscert=~/.docker/cert.pemPathtoTLScertificatefile#TLS證書文件路徑--tlskey=~/.docker/key.pemPathtoTLSkeyfile#TLS密鑰文件路徑--tlsverify=false
UseTLSandverifytheremote#使用TLS驗(yàn)證遠(yuǎn)程-v,--version=false
Printversioninformationandquit#打印版本信息并退出Commands:attachAttachtoarunningcontainer#當(dāng)前shell下attach連接指定運(yùn)行鏡像buildBuildanimagefromaDockerfile#通過Dockerfile定制鏡像commitCreateanewimagefromacontainer'schanges#提交當(dāng)前容器為新的鏡像cpCopyfiles/foldersfromacontainertoaHOSTDIRortoSTDOUT#從容器中拷貝指定文件或者目錄到宿主機(jī)中createCreateanewcontainer#創(chuàng)建一個(gè)新的容器,同run但不啟動(dòng)容器diffInspectchangesonacontainer'sfilesystem#查看docker容器變化eventsGetrealtimeeventsfromtheserver#從docker服務(wù)獲取容器實(shí)時(shí)事件execRunacommandinarunningcontainer#在已存在的容器上運(yùn)行命令exportExportacontainer'sfilesystemasatararchive#導(dǎo)出容器的內(nèi)容流作為一個(gè)tar歸檔文件(對(duì)應(yīng)import)historyShowthehistoryofanimage#展示一個(gè)鏡像形成歷史imagesListimages#列出系統(tǒng)當(dāng)前鏡像importImportthecontentsfromatarballtocreateafilesystemimage#從tar包中的內(nèi)容創(chuàng)建一個(gè)新的文件系統(tǒng)映像(對(duì)應(yīng)export)infoDisplaysystem-wideinformation#顯示系統(tǒng)相關(guān)信息inspectReturnlow-levelinformationonacontainerorimage#查看容器詳細(xì)信息killKillarunningcontainer#kill指定docker容器loadLoadanimagefromatararchiveorSTDIN#從一個(gè)tar包中加載一個(gè)鏡像(對(duì)應(yīng)save)loginRegisterorlogintoaDockerregistry#注冊(cè)或者登陸一個(gè)docker源服務(wù)器logoutLogoutfromaDockerregistry#從當(dāng)前Dockerregistry退出logsFetchthelogsofacontainer#輸出當(dāng)前容器日志信息pausePauseallprocesseswithinacontainer#暫停容器portListportmappingsoraspecificmappingfortheCONTAINER#查看映射端口對(duì)應(yīng)的容器內(nèi)部源端口psListcontainers#列出容器列表pullPullanimageorarepositoryfromaregistry#從docker鏡像源服務(wù)器拉取指定鏡像或者庫鏡像pushPushanimageorarepositorytoaregistry#推送指定鏡像或者庫鏡像至docker源服務(wù)器renameRenameacontainer#重命名容器restartRestartarunningcontainer#重啟運(yùn)行的容器rmRemoveoneormorecontainers#移除一個(gè)或者多個(gè)容器rmiRemoveoneormoreimages#移除一個(gè)或多個(gè)鏡像(無容器使用該鏡像才可以刪除,否則需要?jiǎng)h除相關(guān)容器才可以繼續(xù)或者-f強(qiáng)制刪除)runRunacommandinanewcontainer#創(chuàng)建一個(gè)新的容器并運(yùn)行一個(gè)命令saveSaveanimage(s)toatararchive#保存一個(gè)鏡像為一個(gè)tar包(對(duì)應(yīng)load)searchSearchtheDockerHubforimages#在dockerhub中搜索鏡像startStartoneormorestoppedcontainers#啟動(dòng)容器statsDisplayalivestreamofcontainer(s)resourceusagestatistics#統(tǒng)計(jì)容器使用資源stopStoparunningcontainer#停止容器tagTaganimageintoarepository#給源中鏡像打標(biāo)簽topDisplaytherunningprocessesofacontainer#查看容器中運(yùn)行的進(jìn)程信息unpauseUnpauseallprocesseswithinacontainer#取消暫停容器versionShowtheDockerversioninformation#查看容器版本號(hào)waitBlockuntilacontainerstops,thenprintitsexitcode#截取容器停止時(shí)的退出狀態(tài)值Run'dockerCOMMAND--help'formoreinformationonacommand.#運(yùn)行docker命令在幫助可以獲取更多信息dockersearchhello-docker#搜索hello-docker的鏡像dockersearchcentos#搜索centos鏡像dockerpullhello-docker#獲取centos鏡像dockerrunhello-world#運(yùn)行一個(gè)docker鏡像,產(chǎn)生一個(gè)容器實(shí)例(也可以通過鏡像id前三位運(yùn)行)dockerimagels#查看本地所有鏡像dockerimages#查看docker鏡像dockerimagermihello-docker#刪除centos鏡像dockerps#列出正在運(yùn)行的容器(如果創(chuàng)建容器中沒有進(jìn)程正在運(yùn)行,容器就會(huì)立即停止)dockerps-a#列出所有運(yùn)行過的容器記錄dockersavecentos>/opt/centos.tar.gz#導(dǎo)出docker鏡像至本地dockerload

3.1 啟動(dòng)容器的兩種方式

容器是運(yùn)行應(yīng)用程序的,所以必須得先有一個(gè)操作系統(tǒng)為基礎(chǔ)

1、基于鏡像新建一個(gè)容器并啟動(dòng)

#1.后臺(tái)運(yùn)行一個(gè)dockerdockerrun-dcentos/bin/sh-c"whiletrue;doecho正在運(yùn)行;sleep1;done"#-d后臺(tái)運(yùn)行容器#/bin/sh指定使用centos的bash解釋器#-c運(yùn)行一段shell命令#"whiletrue;doecho正在運(yùn)行;sleep1;done"在linux后臺(tái),每秒中打印一次正在運(yùn)行dockerps#檢查容器進(jìn)程dockerlogs-f容器id/名稱#不間斷打印容器的日志信息dockerstopcentos#停止容器#2.啟動(dòng)一個(gè)bash終端,允許用戶進(jìn)行交互dockerrun--namemydocker-itcentos/bin/bash#--name給容器定義一個(gè)名稱#-i讓容器的標(biāo)準(zhǔn)輸入保持打開#-t讓Docker分配一個(gè)偽終端,并綁定到容器的標(biāo)準(zhǔn)輸入上#/bin/bash指定docker容器,用shell解釋器交互

當(dāng)利用docker run來創(chuàng)建容器時(shí),Docker在后臺(tái)運(yùn)行的步驟如下:

#1.檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載#2.利用鏡像創(chuàng)建并啟動(dòng)一個(gè)容器#3.分配一個(gè)文件系統(tǒng),并在只讀的鏡像層外面掛在一層可讀寫層#4.從宿主主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口到容器中去#5.從地址池配置一個(gè)ip地址給容器#6.執(zhí)行用戶指定的應(yīng)用程序#7.執(zhí)行完畢后容器被終止

2、將一個(gè)終止?fàn)顟B(tài)(stopped)的容器重新啟動(dòng)

[root@localhost~]#dockerps-a#先查詢記錄CONTAINERID
IMAGE
COMMAND
CREATED
STATUS
PORTS
NAMESee92fcf6f32d
centos"/bin/bash"
4daysagoExited(137)3daysago
kickass_raman[root@localhost~]#dockerstartee9#再啟動(dòng)這個(gè)容器ee9[root@localhost~]#dockerexec-itee9/bin/bash#進(jìn)入容器交互式界面[root@ee92fcf6f32d/]##注意看用戶名,已經(jīng)變成容器用戶名

3.2 提交創(chuàng)建自定義鏡像

#1.我們進(jìn)入交互式的centos容器中,發(fā)現(xiàn)沒有vim命令dockerrun-itcentos#2.在當(dāng)前容器中,安裝一個(gè)vimyuminstall-yvim#3.安裝好vim之后,exit退出容器exit#4.查看剛才安裝好vim的容器記錄dockercontainerls-a#5.提交這個(gè)容器,創(chuàng)建新的imagedockercommit059fdea031bachaoyu/centos-vim#6.查看鏡像文件dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEchaoyu/centos-vimlatestfd2685ae25fe5minutesago348MB

3.3 外部訪問容器

容器中可以運(yùn)行網(wǎng)絡(luò)應(yīng)用,但是要讓外部也可以訪問這些應(yīng)用,可以通過-p或-P參數(shù)指定端口映射。

dockerrun-d-Ptraining/webapppythonapp.py#-P參數(shù)會(huì)隨機(jī)映射端口到容器開放的網(wǎng)絡(luò)端口#檢查映射的端口dockerps-lCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMEScfd632821d7atraining/webapp"pythonapp.py"21secondsagoUp20seconds0.0.0.0:32768->5000/tcpbrave_fermi#宿主機(jī)ip:32768映射容器的5000端口#查看容器日志信息dockerlogs-fcfd##不間斷顯示log#也可以通過-p參數(shù)指定映射端口dockerrun-d-p9000:5000training/webapppythonapp.py

打開瀏覽器訪問服務(wù)器的9000端口, 內(nèi)容顯示 Hello world!表示正常啟動(dòng)

(如果訪問失敗的話,檢查自己的防火墻,以及云服務(wù)器的安全組)

4、利用dockerfile定制鏡像

鏡像是容器的基礎(chǔ),每次執(zhí)行docker run的時(shí)候都會(huì)指定哪個(gè)鏡像作為容器運(yùn)行的基礎(chǔ)。我們之前的例子都是使用來自docker hub的鏡像,直接使用這些鏡像只能滿足一定的需求,當(dāng)鏡像無法滿足我們的需求時(shí),就得自定制這些鏡像。

# 鏡像的定制就是定制每一層所添加的配置、文件。如果可以吧每一層修改、安裝、構(gòu)建、操作的命令都寫入到一個(gè)腳本,用腳本來構(gòu)建、定制鏡像,這個(gè)腳本就是dockerfile。# Dockerfile 是一個(gè)文本文件,其內(nèi)包含了一條條的指令(Instruction),每一條指令 構(gòu)建一層,因此每一條指令的內(nèi)容,就是描述該層應(yīng)當(dāng)如何構(gòu)建。

參數(shù)詳解

FROMscratch#制作baseimage基礎(chǔ)鏡像,盡量使用官方的image作為baseimageFROMcentos#使用baseimageFROMubuntu:14.04#帶有tag的baseimageLABELversion=“1.0”#容器元信息,幫助信息,Metadata,類似于代碼注釋LABELmaintainer=“yc_uuu@163.com"#對(duì)于復(fù)雜的RUN命令,避免無用的分層,多條命令用反斜線換行,合成一條命令!RUNyumupdate&&yuminstall-yvimPython-dev#反斜線換行RUN/bin/bash-c"source$HOME/.bashrc;echo$HOME”WORKDIR/root#相當(dāng)于linux的cd命令,改變目錄,盡量使用絕對(duì)路徑?。?!不要用RUN cdWORKDIR/test#如果沒有就自動(dòng)創(chuàng)建WORKDIRdemo#再進(jìn)入demo文件夾RUNpwd#打印結(jié)果應(yīng)該是/test/demoADDandCOPYADDhello/#把本地文件添加到鏡像中,吧本地的hello可執(zhí)行文件拷貝到鏡像的/目錄ADDtest.tar.gz/#添加到根目錄并解壓WORKDIR/rootADDhellotest/#進(jìn)入/root/添加hello可執(zhí)行命令到test目錄下,也就是/root/test/hello一個(gè)絕對(duì)路徑COPYhellotest/#等同于上述ADD效果ADD與COPY-優(yōu)先使用COPY命令-ADD除了COPY功能還有解壓功能添加遠(yuǎn)程文件/目錄使用curl或wgetENV#環(huán)境變量,盡可能使用ENV增加可維護(hù)性ENVMYSQL_VERSION5.6#設(shè)置一個(gè)mysql常量RUNyuminstall-ymysql-server=“${MYSQL_VERSION}”

進(jìn)階知識(shí)(了解)

VOLUMEandEXPOSE存儲(chǔ)和網(wǎng)絡(luò)RUNandCMDandENTRYPOINTRUN:執(zhí)行命令并創(chuàng)建新的Image LayerCMD:設(shè)置容器啟動(dòng)后默認(rèn)執(zhí)行的命令和參數(shù)ENTRYPOINT:設(shè)置容器啟動(dòng)時(shí)運(yùn)行的命令Shell格式和Exec格式RUNyuminstall-yvimCMDecho”hellodocker”ENTRYPOINTecho“hellodocker”Exec格式RUN[“apt-get”,”install”,”-y”,”vim”]CMD[“/bin/echo”,”hellodocker”]ENTRYPOINT[“/bin/echo”,”hellodocker”]通過shell格式去運(yùn)行命令,會(huì)讀取$name指令,而exec格式是僅僅的執(zhí)行一個(gè)命令,而不是shell指令catDockerfileFROMcentosENVnameDockerENTRYPOINT[“/bin/echo”,”hello$name”]#這個(gè)僅僅是執(zhí)行echo命令,讀取不了shell變量ENTRYPOINT[“/bin/bash”,”-c”,”echohello$name"]CMD容器啟動(dòng)時(shí)默認(rèn)執(zhí)行的命令如果dockerrun指定了其他命令(dockerrun-it[image]/bin/bash),CMD命令被忽略如果定義多個(gè)CMD,只有最后一個(gè)執(zhí)行ENTRYPOINT讓容器以應(yīng)用程序或服務(wù)形式運(yùn)行不會(huì)被忽略,一定會(huì)執(zhí)行最佳實(shí)踐:寫一個(gè)shell腳本作為entrypointCOPYdocker-entrypoint.sh/usr/local/binENTRYPOINT[“docker-entrypoint.sh]EXPOSE27017CMD[“mongod”][root@masterhome]#moreDockerfileFROmcentosENVnameDocker#CMD["/bin/bash","-c","echohello$name"]ENTRYPOINT["/bin/bash","-c","echohello$name”]

5、發(fā)布到倉庫

5.1 docker hub共有鏡像發(fā)布

docker提供了一個(gè)類似于github的倉庫docker hub,官方網(wǎng)站(需注冊(cè)使用)

https://hub.docker.com/

#注冊(cè)dockerid后,在linux中登錄dockerhubdockerlogin#注意要保證image的tag是賬戶名,如果鏡像名字不對(duì),需要改一下tagdockertagchaoyu/centos-vimpeng104/centos-vim# 語法是:docker tag 倉庫名 peng104/倉庫名#推送dockerimage到dockerhubdockerpushpeng104/centps-cmd-exec:latest#去dockerhub中檢查鏡像#先刪除本地鏡像,然后再測試下載pull鏡像文件dockerpullpeng104/centos-entrypoint-exec

5.2 私有倉庫

docker hub 是公開的,其他人也是可以下載,并不安全,因此還可以使用docker registry官方提供的私有倉庫

用法詳解:

https://yeasy.gitbooks.io/docker_practice/repository/registry.html

#1.下載一個(gè)docker官方私有倉庫鏡像dockerpullregistry#2.運(yùn)行一個(gè)docker私有容器倉庫dockerrun-d-p5000:5000-v/opt/data/registry:/var/lib/registryregistry-d后臺(tái)運(yùn)行-p端口映射宿主機(jī)的5000:容器內(nèi)的5000-v數(shù)據(jù)卷掛載宿主機(jī)的/opt/data/registry:/var/lib/registryregistry鏡像名/var/lib/registry存放私有倉庫位置# Docker 默認(rèn)不允許非 HTTPS 方式推送鏡像。我們可以通過 Docker 的配置選項(xiàng)來取消這個(gè)限制#3.修改docker的配置文件,讓他支持http方式,上傳私有鏡像vim/etc/docker/daemon.json#寫入如下內(nèi)容
{"registry-mirrors":["http://f1361db2.m.daocloud.io"],"insecure-registries":["192.168.11.37:5000"]}#4.修改docker的服務(wù)配置文件vim/lib/systemd/system/docker.service#找到[service]這一代碼區(qū)域塊,寫入如下參數(shù)[Service]EnvironmentFile=-/etc/docker/daemon.json#5.重新加載docker服務(wù)systemctldaemon-reload#6.重啟docker服務(wù)systemctlrestartdocker#注意:重啟docker服務(wù),所有的容器都會(huì)掛掉#7.修改本地鏡像的tag標(biāo)記,往自己的私有倉庫推送dockertagdocker.io/peng104/hello-world-docker192.168.11.37:5000/peng-hello#瀏覽器訪問http://192.168.119.10:5000/v2/_catalog查看倉庫#8.下載私有倉庫的鏡像dockerpull192.168.11.37:5000/peng-hello

6、實(shí)例演示

編寫dockerfile,構(gòu)建自己的鏡像,運(yùn)行flask程序。

確保app.py和dockerfile在同一個(gè)目錄!

#1.準(zhǔn)備好app.py的flask程序[root@localhost~]#catapp.pyfromflaskimportFlaskapp=Flask(__name__)@app.route('/')defhello():return"hellodocker"if__name__=="__main__":app.run(host='0.0.0.0',port=8080)[root@masterhome]#lsapp.pyDockerfile#2.編寫dockerfile[root@localhost~]#catDockerfileFROMpython:2.7LABELmaintainer="溫而新"RUNpipinstallflaskCOPYapp.py/app/WORKDIR/appEXPOSE8080CMD["python","app.py"]#3.構(gòu)建鏡像image,找到當(dāng)前目錄的Dockerfile,開始構(gòu)建dockerbuild-tpeng104/flask-hello-docker.#4.查看創(chuàng)建好的imagesdockerimagels#5.啟動(dòng)此flask-hello-docker容器,映射一個(gè)端口供外部訪問dockerrun-d-p8080:8080peng104/flask-hello-docker#6.檢查運(yùn)行的容器dockercontainerls#7.推送這個(gè)鏡像到私有倉庫dockertagpeng104/flask-hello-docker192.168.11.37:5000/peng-flaskwebdockerpush192.168.11.37:5000/peng-flaskweb

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11171

    瀏覽量

    208474
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    446

    瀏覽量

    11774

原文標(biāo)題:兩小時(shí)入門 Docker

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    寫給DSP初學(xué)者:輕松入門,快速精通

    寫給DSP初學(xué)者:輕松入門,快速精通
    發(fā)表于 08-17 14:25

    【W(wǎng)orkshop】智能桌上足球轟趴,兩小時(shí)帶你開發(fā)iot產(chǎn)品

    32期wordshop免費(fèi)公開課開始啦周四的晚上約嗎?只需兩小時(shí),聽Gokit大咖剖析智能桌上足球的事兒,帶你熟悉iot產(chǎn)品開發(fā)流程;還有開源資料隨你拿,十城創(chuàng)客空間助你改造桌上足球。時(shí)間:8月25
    發(fā)表于 08-24 21:27

    知識(shí)賦能第二期(入門兩小時(shí)玩轉(zhuǎn)git和gitee

    只是賦能第二期(入門兩小時(shí)玩轉(zhuǎn)git和gitee
    發(fā)表于 12-03 11:09

    Docker入門指南

    本指南介紹了如何使用Docker簡化嵌入式設(shè)備和服務(wù)器上的多體系結(jié)構(gòu)應(yīng)用程序部署。 快速擴(kuò)展軟件環(huán)境可能是一項(xiàng)既困難又耗時(shí)的任務(wù)。在本指南中,我們將向您展示Docker如何抽象操作系統(tǒng)和硬件細(xì)節(jié),使
    發(fā)表于 08-02 06:09

    兩小時(shí)DIY速成 罐頭盒制作斯特林發(fā)動(dòng)機(jī)

    兩小時(shí)DIY速成 罐頭盒制作斯特林發(fā)動(dòng)機(jī),現(xiàn)在,我將使用廢棄不用的破銅爛鐵制備一個(gè)小功率引擎
    發(fā)表于 07-23 14:44 ?4.6w次閱讀
    <b class='flag-5'>兩小時(shí)</b>DIY速成 罐頭盒制作斯特林發(fā)動(dòng)機(jī)

    S7A驅(qū)動(dòng)的兩小時(shí)破解工具_(dá)源程序

    三菱PLC(可編程邏輯控制器)編程實(shí)例項(xiàng)目例程——S7A驅(qū)動(dòng)的兩小時(shí)破解工具,可以方便的破解西門子以太網(wǎng)驅(qū)動(dòng)
    發(fā)表于 11-08 17:32 ?108次下載

    蘋果你這是在玩我們呢?AirPods 開售兩小時(shí)售罄

    蘋果低調(diào)上架 AirPods 了,兩小時(shí)內(nèi)被搶購一空,蘋果于 9 月份發(fā)布了重新定義的無線耳機(jī) AirPods 目前已經(jīng)開放購買,其售價(jià)為 1288 元人民幣。蘋果官方網(wǎng)站上顯示,AirPods 最晚將于 12 月 22 日送達(dá)用戶手中。
    發(fā)表于 12-14 15:43 ?856次閱讀

    視頻監(jiān)控2小時(shí)快速入門

    視頻監(jiān)控2小時(shí)快速入門V2.0_z
    發(fā)表于 12-25 00:15 ?0次下載

    Docker最初的兩小時(shí)--從入門入門

    比如我們?cè)诂F(xiàn)實(shí)生活里面是個(gè)屌絲,但是在虛擬人生的游戲里面,我們可以是王思聰++,集美貌智慧財(cái)富正義于一生。虛擬人生的游戲,構(gòu)建一個(gè)整個(gè)的新世界,這個(gè)世界,人人有房住,天下沒有賊。那么這個(gè)就是硬件都變了,你的內(nèi)核都變了。這個(gè)是Virtualbox,KVM這種虛擬出一個(gè)新世界的思路。
    的頭像 發(fā)表于 07-11 15:43 ?3650次閱讀

    大眾推出EBGUIDE工具鏈 能夠輕松快速地設(shè)計(jì)復(fù)雜人機(jī)界面

    Elektrobit (EB) 為大眾新一代電動(dòng)汽車的數(shù)字儀表和信息娛樂設(shè)備提供開發(fā)平臺(tái)。EB GUIDE 工具鏈讓大眾的開發(fā)人員能夠輕松快速地設(shè)計(jì)復(fù)雜的人機(jī)界面 (HMI)。EB GUIDE 包含
    的頭像 發(fā)表于 05-16 13:59 ?4989次閱讀

    比利時(shí)研究機(jī)構(gòu)研發(fā)400Wh/L固態(tài)電池,兩小時(shí)內(nèi)充滿電!

    比利時(shí)研究開發(fā)出一種能量密度為400Wh/L的固態(tài)電池,可在兩小時(shí)內(nèi)充滿電。
    的頭像 發(fā)表于 06-26 16:50 ?3409次閱讀

    電瓶修復(fù)技術(shù)—兩小時(shí)充滿電池可能嗎

    的效果,也就是2小時(shí)安全充電? 答:鉛酸蓄電池想要在2小時(shí)內(nèi)完全充滿,除非使用高恒壓值大電流,這樣會(huì)導(dǎo)致大量失水。 一般大功率脈沖充電保證失水在可接受的程度下可以在2小時(shí)內(nèi)充到95%,但余下的5%需要
    發(fā)表于 03-29 14:23 ?1898次閱讀

    docker技術(shù)入門與實(shí)戰(zhàn)

    入門docker的首本書,系統(tǒng)化掌握容器技術(shù)棧
    發(fā)表于 06-09 14:38 ?0次下載

    程序運(yùn)行在STM32H750的外擴(kuò)FLASH上兩小時(shí)后死機(jī)該如何處理

    程序運(yùn)行在 STM32H750 的外擴(kuò) FLASH 上兩小時(shí)后死機(jī)
    的頭像 發(fā)表于 10-24 15:20 ?2620次閱讀
    程序運(yùn)行在STM32H750的外擴(kuò)FLASH上<b class='flag-5'>兩小時(shí)</b>后死機(jī)該如何處理

    Modbus轉(zhuǎn)Profinet不會(huì)編程也能用 輕松快上手

    Modbus轉(zhuǎn)Profinet是一種協(xié)議轉(zhuǎn)換器,可將Modbus協(xié)議轉(zhuǎn)換為Profinet協(xié)議,實(shí)現(xiàn)設(shè)備間的數(shù)據(jù)交換與通信。即使不會(huì)編程的人也可以輕松快速上手使用Modbus轉(zhuǎn)Profinet!通過Modbus轉(zhuǎn)Profinet網(wǎng)關(guān)(XD-MDPN100/2000),設(shè)備之間的通信變得更加靈活和可靠。
    的頭像 發(fā)表于 12-30 16:10 ?937次閱讀
    Modbus轉(zhuǎn)Profinet不會(huì)編程也能用 <b class='flag-5'>輕松快</b>上手