當前位置:編程學習大全網 - 源碼下載 - DockerHub裏的鏡子太多了。如何選擇?

DockerHub裏的鏡子太多了。如何選擇?

創建映像的目的是說DockerHub或者其他壹些映像倉庫已經提供了足夠多的映像,有最低版本,壹些安裝了mysql、nginx、apache等第三方軟件的版本可以直接使用。雖然夠用,但是在某些情況下無法滿足我們的需求,比如我們需要安裝壹些很少使用的第三方軟件。這時候我們只能用公有倉庫裏的鏡像啟動容器,然後根據我們的需要在容器裏安裝軟件,修改配置等等,然後提交鏡像。這些操作在以前的文章中介紹過。這個操作完成後,可以通過以下兩種方式達到定制圖像的目的:1。通過保存和導出的方式將圖像保存為壹個tar包,然後在需要時導入tar圖像包。2.將配置好的鏡像推送到我們的私有倉庫(docker創建私有倉庫)或者註冊的* * *倉庫,需要時直接拉取。兩種方法都可以,但是自動化程度低。在這種情況下,我們來談談更自動化的創建方法。Dockerfile結構Dockerfile由四部分信息組成:基本鏡像信息、維護者信息、鏡像操作指令和容器啟動執行指令。12345678910112131415161718 # thistockerfileusestheubuntuimage # version 2-edition 1 #作者:docker _ user #..#Baseimagetouse,thismutbesetasthefirstlinefromubuntu # Maintainer:docker _ user(@ docker _ user)Maintainer docker _ user docker _ user @ email . com # CommandstoupdatetheimageRUNecho " deb/Ubuntu/raringmainuniverse " & gt;& gt/etc/apt/sources . listrunapt-get update & amp;& ampapt-getinstall-ynginxRUNecho " \ ndaemonoff;"& gt& gt/etc/nginx/nginx . conf # commands whenchuanganewcontainercmd/usr/sbin/nginx其中#表註釋可以用壹些說明性的文字標註。FROM關鍵字指定圖像的來源,默認情況下是DockerHub。還可以編寫私有倉庫的映像,例如localhost: 5000/centos: 6.7。如果指定的圖像名稱已經在本地存在,它將直接從本地緩存中獲得。維護人員指定圖像的作者,然後執行運行、添加等操作。對於圖像操作,最後是容器啟動時啟動的指令。Dockerfile中的指令FROM:以FROM或FROM:的形式指定圖像名稱,例如FROMubuntu或FROM Ubuntu:12.04 maintainer:圖像作者,以MAINTAINERRUN:以RUN或run ["executable "," param 1 "," param2"]的形式。前者會在shell終端運行命令,即/bin/sh-c;後者是使用exec執行的。指定使用其他終端可以通過第二種方式實現,比如run ["/bin/bash ",-c "," echo hello"]。每個運行指令將基於當前映像執行指定的命令,並將其作為新映像提交。當命令很長時,可以使用\換行。CMD:三種格式1。cmd ["executable "," param1 "," param2"]支持由exec執行,推薦使用;2.CMDcommandparam1param2在/bin/sh中執行,提供給需要交互的應用;3.CMD["param1 "," param2"]為ENTRYPOINT提供默認參數;指定容器啟動時要執行的命令,每個Dockerfile只能有壹個CMD命令。如果指定了多個命令,將只執行最後壹個命令。如果用戶在啟動容器時指定了運行命令,則CMD指定的命令將被覆蓋。EXPOSE:格式是EXPOSE[]。告訴Docker互連系統的服務器容器暴露的端口號。啟動容器時需要傳遞-P,Docker主機會自動分配壹個端口轉發到指定端口。ENV:格式是ENV。指定壹個環境變量,該變量將由後續運行指令使用,並在容器運行時維護。這對應於編程語言中的變量定義,需要時可以引用。例如:1234 env pg _ major 9.3 env pg _ version 9.3 . 4 run curl-sl/postgres-$ pg _ version . tar . xz | tar-xjc/usr/src/postgres &;& amp...env path/usr/local/postgres-$ pg _ major/bin:$ pathADD:格式為ADD。此命令將指定的復制到容器中的。其中可以是Dockerfile所在目錄的相對路徑;也可以是URL;它也可以是壹個tar文件(自動提取到壹個目錄中)。復制:格式為復制。將本地主機的(Dockerfile所在目錄的相對路徑)復制到容器中的。當使用本地目錄作為源目錄時,建議使用COPY。復制和添加的區別在於,添加有自動解壓和支持URL路徑的功能。ENTRYPOINT:兩種格式:entrypoint ["executable "," param 1 "," param 2 "]entry point command param 1 param 2(在shell中執行)。配置容器啟動後要執行的命令,它不能被dockerrun提供的參數覆蓋。每個docker文件中只能有壹個入口點。當指定多個條目時,只有最後壹個條目生效。CMD和ENTRYPOINT的比較:兩個命令都只能用壹次,都是在執行dockerrun指令的時候運行。如果有多個命令,則只執行最後壹個。兩者的區別在於參數傳遞的方式。如果在Dockerfile中定義了以下指令1CMDechohello或1 entrypoint ["echo "," hello"],則在運行dockerruncontainerIdechohello命令時,CMD的輸入結果被指定為world。可以看到Dockerfile中指定的命令被覆蓋,而當指定ENTRYPOINT時,輸出結果是helloechoworld,所以可以看到指定的命令被用作ENTRYPOINT指定的指令的參數。卷:格式為卷["/數據"]。創建壹個可以從本地主機或其他容器裝載的裝載點,它通常用於存儲要維護的數據庫和數據。但是,在Dockerfile中指定這個屬性是沒有意義的,因為沒有辦法指定本地主機的目錄。如果需要指定掛載點,可以指定:65438+docker run-it-v/home/鄭風/FTP/:/data 859666d 51c6d/bin/bash user:格式為USERdaemon。運行容器時指定用戶名或UID,後續運行也將使用指定的用戶。當服務不需要管理員權限時,您可以通過此命令指定運行用戶。而且妳可以在之前創建需要的用戶,比如:RUNgroupadd-rpostgres & amp;& ampuseradd-r-gpostgrespostgres .要臨時獲得管理員權限,可以使用gosu而不是sudo。工作目錄:格式為工作目錄/路徑/到/工作目錄。為後續的RUN、CMD、ENTRYPOINT指令配置工作目錄。您可以使用多個WORKDIR命令,如果後續命令的參數是相對路徑,它將基於前壹個命令指定的路徑。例如1234 workdir/aworkdircronpwd的最終路徑為/a/b/c. ONBUILD:格式為ONBUILD[指令]。配置當創建的圖像用作其他新創建的圖像的基礎圖像時要執行的操作指令。例如,Dockerfile用以下內容創建了壹個鏡像-A。1234[]onbuildaddd。/app/srconbuildrun/usr/local/bin/python-build-dir/app/src[]如果基於image-A創建了壹個新的映像,當FROMimage-A用於指定新Dockerfile中的基本映像時,會自動執行onbuild指令的內容,相當於在後面加了兩條指令。12345來自image-a #添加後自動運行。/app/srcrrun/usr/local/bin/python-build-dir/app/src使用ONBUILD指令的鏡像,建議在標簽中註明,例如ruby:1.9-onbuild。基於CentOS6.7和源代碼安裝nginx,首先準備好安裝包nginx-1.9.9.tar.gz和CentOS 6-base-163 . repo(163 source),將兩個文件放在同壹個目錄下,在這個目錄下創建壹個名為Dockerfile的文件。之後的源碼替換,nginx編譯安裝,以及壹些依賴包的安裝都是在這個文件中實現的。Dockerfile的內容如下:1234567891121314151616161665438。0 # thisiasatestubu 12.04 image docker file #作者:鄭風# baseimage,thismusbestesthefirstline # localhost:5000/centos:6.7是我私人倉庫的鏡像。可替換為centos:6.7(Docker Hub中的鏡像)來自localhost: 5000/centos: 6.7維護者鄭風# commands toupdatetheimagerunmkdir/usr/nginx 1 . 9 . 9 addnginx-1 . 9 . 9 . tar . gz/usr/nginx 1 . 9 . 9/# run yum-yinstalltar # RUNtar-zxvf/usr/nginx 65438+& ampmvCentOS-Base . repocentos-Base . repo . bakaddcentos 6-Base-163 . repo/etc/yum . repos . d/RUNcd/etc/yum . repos . d/& amp;& ampmvCentOS6-Base-163。& ampyumcleanall & amp& ampyummakecache \ & amp& amp百勝餐飲集團\ & amp& ampyum-yinstallyuminstall-ypcre-devel \ & amp;& ampyum-yinstallzlibzlib-devel \ & amp;& ampyum-yinstallopensslopenssl-devel \ & amp;& ampCD/usr/nginx 1 . 9 . 9/nginx-1 . 9 . 9/& amp;& amp。/configure & amp;& amp制造和銷售。& ampMakeinstall#如果設置了daemonoffNginx無法啟動# RUNecho " \ ndaemonoff"& gt& gt/etc/nginx/nginx.conf #命令whenchuanganewcontainer #要啟動nginx,需要轉到/usr/local/nginx/sbin執行。/configureCMD/bin/bash,最後執行命令“dockerbuild-tnginx-centos:6.7。”,哪裏。意味著在當前目錄中搜索Dockerfile。
  • 上一篇:stf源代碼目錄分析
  • 下一篇:FLASH修改器怎麽修改"二戰前線2"小遊戲?
  • copyright 2024編程學習大全網