<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          好文推薦:兩小時快速入門 Docker!

          共 13006字,需瀏覽 27分鐘

           ·

          2021-10-11 18:56

          你知道的越多,不知道的就越多,業(yè)余的像一棵小草!

          你來,我們一起精進(jìn)!你不來,我和你的競爭對手一起精進(jìn)!

          編輯:業(yè)余草

          cnblogs.com/peng104/p/10296717.html

          推薦:https://www.xttblog.com/?p=5277

          引言

          Docker是什么

          Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國期間發(fā)起的一個公司內(nèi)部項目,于 2013 年 3 月以 Apache 2.0 授權(quán)協(xié)議開源,主要項目代碼在 GitHub 上進(jìn)行維護(hù)。Docker 使用 Google 公司推出的 Go 語言 進(jìn)行開發(fā)實現(xiàn)。docker 是 linux 容器的一種封裝,提供簡單易用的容器使用接口。它是最流行的 Linux 容器解決方案。

          docker 的接口相當(dāng)簡單,用戶可以方便的創(chuàng)建、銷毀容器。docker 將應(yīng)用程序與程序的依賴,打包在一個文件里面。運行這個文件就會生成一個虛擬容器。程序運行在虛擬容器里,如同在真實物理機(jī)上運行一樣,有了 docker,就不用擔(dān)心環(huán)境問題了。

          應(yīng)用場景

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

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

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

          區(qū)別

          1、物理機(jī)

          物理機(jī)

          2、虛擬機(jī)

          虛擬機(jī)

          3、docker容器

          docker容器

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

          • 鏡像 image
          • 容器 container
          • 倉庫 repository

          「docker容器的優(yōu)勢」

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

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

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

          「2、更快速的啟動時間」

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

          「3、一致的運行環(huán)境」

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

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

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

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

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

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

          「5、更輕松的遷移」

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

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

          Docker安裝

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

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

          官方版安裝教程(英文)

          ?

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

          ?

          博主版安裝教程:

          #?安裝docker??
          yum?install?docker??
          #?啟動docker??
          systemctl?start/status?docker??
          #?查看docker啟動狀態(tài)??
          docker?version

          「配置加速器」

          簡介: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?-sSL?https://get.daocloud.io/daotools/set_mirror.sh?|?sh?-s?http://95822026.m.daocloud.io

          Docker基礎(chǔ)命令

          docker --help(中文注解)

          Usage:  
          docker \[OPTIONS\] COMMAND \[arg...\]
          ???????docker daemon \[ --help | ... \]
          ???????docker \[ --help | -v | --version \]
          A
          self-sufficient runtime for?containers.

          Options:
          ??--config=~/.docker Location of?client config files #客戶端配置文件的位置
          ??-D, --debug=false???????????????Enable debug mode #啟用Debug調(diào)試模式
          ??-H, --host=\[\] Daemon socket(s) to connect to #守護(hù)進(jìn)程的套接字(Socket)連接
          ??-h, --help=false????????????????Print usage #打印使用
          ??-l, --log-level=info Set the logging level #設(shè)置日志級別
          ??--tls=false?????????????????????Use TLS; implied by\--tlsverify #
          ??--tlscacert=~/.docker/ca.pem Trust certs signed only by?this?CA #信任證書簽名CA
          ??--tlscert=~/.docker/cert.pem Path to TLS certificate file #TLS證書文件路徑
          ??--tlskey=~/.docker/key.pem Path to TLS key file #TLS密鑰文件路徑
          ??--tlsverify=false???????????????Use TLS and?verify the remote #使用TLS驗證遠(yuǎn)程
          ??-v, --version=false?????????????Print version information and?quit #打印版本信息并退出

          Commands:
          ????attach Attach to a running container #當(dāng)前shell下attach連接指定運行鏡像
          ????build Build an image from?a Dockerfile #通過Dockerfile定制鏡像
          ????commit Create a new?image from?a container's changes #提交當(dāng)前容器為新的鏡像
          ????cp Copy files/folders from a container to a HOSTDIR or to STDOUT #從容器中拷貝指定文件或者目錄到宿主機(jī)中
          ????create Create a new container #創(chuàng)建一個新的容器,同run 但不啟動容器
          ????diff Inspect changes on a container's filesystem #查看docker容器變化
          ????events Get real time events from?the server#從docker服務(wù)獲取容器實時事件
          ????exec Run a command in?a running container#在已存在的容器上運行命令
          ????export????Export a container's filesystem as a tar archive #導(dǎo)出容器的內(nèi)容流作為一個tar歸檔文件(對應(yīng)import)
          ????history Show the history of an image #展示一個鏡像形成歷史
          ????images List images #列出系統(tǒng)當(dāng)前鏡像
          ????import Import the contents from a tarball to create a filesystem image #從tar包中的內(nèi)容創(chuàng)建一個新的文件系統(tǒng)映像(對應(yīng)export)
          ????info Display system-wide information #顯示系統(tǒng)相關(guān)信息
          ????inspect Return low-level information on a container or image #查看容器詳細(xì)信息
          ????kill Kill a running container #kill指定docker容器
          ????load Load an image from a tar archive or STDIN #從一個tar包中加載一個鏡像(對應(yīng)save)
          ????login Register or log in to a Docker registry#注冊或者登陸一個docker源服務(wù)器
          ????logout Log out from a Docker registry #從當(dāng)前Docker registry退出
          ????logs Fetch the logs of a container #輸出當(dāng)前容器日志信息
          ????pause Pause all processes within a container#暫停容器
          ????port List port mappings or a specific mapping for the CONTAINER #查看映射端口對應(yīng)的容器內(nèi)部源端口
          ????ps List containers #列出容器列表
          ????pull Pull an image or a repository from a registry #從docker鏡像源服務(wù)器拉取指定鏡像或者庫鏡像
          ????push Push an image or a repository to a registry #推送指定鏡像或者庫鏡像至docker源服務(wù)器
          ????rename Rename a container #重命名容器
          ????restart Restart a running container #重啟運行的容器
          ????rm Remove one or more containers #移除一個或者多個容器
          ????rmi Remove one or more images #移除一個或多個鏡像(無容器使用該鏡像才可以刪除,否則需要刪除相關(guān)容器才可以繼續(xù)或者-f強(qiáng)制刪除)
          ????run Run a command in a new container #創(chuàng)建一個新的容器并運行一個命令
          ????save Save an image(s) to a tar archive#保存一個鏡像為一個tar包(對應(yīng)load)
          ????search Search the Docker Hub for images #在docker
          hub中搜索鏡像
          ????start Start one or more stopped containers#啟動容器
          ????stats Display a live stream of container(s) resource usage statistics #統(tǒng)計容器使用資源
          ????stop Stop a running container #停止容器
          ????tag Tag an image into a repository #給源中鏡像打標(biāo)簽
          ????top Display the running processes of a container #查看容器中運行的進(jìn)程信息
          ????unpause Unpause all processes within a container #取消暫停容器
          ????version Show the Docker version information#查看容器版本號
          ????wait Block until a container stops, then print its exit code #截取容器停止時的退出狀態(tài)值

          Run '

          docker COMMAND --help' for more information on a command. #運行docker命令在幫助可以獲取更多信息
          docker search hello-docker # 搜索hello-docker的鏡像
          docker search centos # 搜索centos鏡像
          docker pull hello-docker # 獲取centos鏡像
          docker run hello-world #運行一個docker鏡像,產(chǎn)生一個容器實例(也可以通過鏡像id前三位運行)
          docker image ls # 查看本地所有鏡像
          docker images # 查看docker鏡像
          docker image rmi hello-docker # 刪除centos鏡像
          docker ps #列出正在運行的容器(如果創(chuàng)建容器中沒有進(jìn)程正在運行,容器就會立即停止)
          docker ps -a # 列出所有運行過的容器記錄
          docker save centos > /opt/centos.tar.gz # 導(dǎo)出docker鏡像至本地
          docker load < /opt/centos.tar.gz #導(dǎo)入本地鏡像到docker鏡像庫
          docker stop \`docker ps -aq\` # 停止所有正在運行的容器
          docker rm \`docker ps -aq\` # 一次性刪除所有容器記錄
          docker rmi \`docker images -aq\` # 一次性刪除所有本地的鏡像記錄

          啟動容器的兩種方式

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

          1、基于鏡像新建一個容器并啟動

          #?1.?后臺運行一個docker
          docker?run?-d?centos?/bin/sh?-c?"while?true;do?echo?正在運行;?sleep?1;done"
          ????#?-d?后臺運行容器
          ????#?/bin/sh?指定使用centos的bash解釋器
          ????#?-c?運行一段shell命令
          ????#?"while?true;do?echo?正在運行;?sleep?1;done"??在linux后臺,每秒中打印一次正在運行
          docker?ps?#?檢查容器進(jìn)程
          docker?logs?-f?容器id/名稱?#?不間斷打印容器的日志信息
          docker?stop?centos?#?停止容器

          #
          ?2.?啟動一個bash終端,允許用戶進(jìn)行交互
          docker?run?--name?mydocker?-it?centos?/bin/bash
          ????#?--name?給容器定義一個名稱
          ????#?-i?讓容器的標(biāo)準(zhǔn)輸入保持打開
          ????#?-t?讓Docker分配一個偽終端,并綁定到容器的標(biāo)準(zhǔn)輸入上
          ????#?/bin/bash?指定docker容器,用shell解釋器交互

          當(dāng)利用docker run來創(chuàng)建容器時,Docker在后臺運行的步驟如下:

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

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

          [root@localhost?~]#?docker?ps?-a?#?先查詢記錄
          CONTAINER?ID?IMAGE?COMMAND?CREATED?STATUS?PORTS?NAMES
          ee92fcf6f32d?centos?"/bin/bash"??????????????4?days?ago?Exited?(137)?3?days?ago?kickass_raman

          [root@localhost?~]#?docker?start?ee9?#?再啟動這個容器
          ee9

          [root@localhost?~]#?docker?exec?-it?ee9?/bin/bash?#?進(jìn)入容器交互式界面
          [root@ee92fcf6f32d?/]#?#?注意看用戶名,已經(jīng)變成容器用戶名

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

          #?1.我們進(jìn)入交互式的centos容器中,發(fā)現(xiàn)沒有vim命令
          ????docker?run?-it?centos
          #?2.在當(dāng)前容器中,安裝一個vim
          ????yum?install?-y?vim
          #?3.安裝好vim之后,exit退出容器
          ????exit
          #?4.查看剛才安裝好vim的容器記錄
          ????docker?container?ls?-a
          #?5.提交這個容器,創(chuàng)建新的image
          ????docker?commit?059fdea031ba?chaoyu/centos-vim
          #?6.查看鏡像文件
          ????docker?images
          REPOSITORY?TAG?IMAGE?ID?CREATED?SIZE
          chaoyu/centos-vim?latest?fd2685ae25fe?5?minutes?ago

          外部訪問容器

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

          docker?run?-d?-P?training/webapp?python?app.py
          ??#?-P?參數(shù)會隨機(jī)映射端口到容器開放的網(wǎng)絡(luò)端口

          #
          ?檢查映射的端口
          docker?ps?-l
          CONTAINER?ID?IMAGE?COMMAND?CREATED?STATUS?PORTS?NAMES
          cfd632821d7a?training/webapp?"python?app.py"?21?seconds?ago?Up?20?seconds?0.0.0.0:32768->5000/tcp?brave_fermi
          #宿主機(jī)ip:32768?映射容器的5000端口

          #
          ?查看容器日志信息
          docker?logs?-f?cfd?#?#不間斷顯示log

          #
          ?也可以通過-p參數(shù)指定映射端口
          docker?run?-d?-p?9000:5000?training/webapp?python?app.py

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

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

          利用 dockerfile 定制鏡像

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

          ?

          鏡像的定制就是定制每一層所添加的配置、文件。如果可以吧每一層修改、安裝、構(gòu)建、操作的命令都寫入到一個腳本,用腳本來構(gòu)建、定制鏡像,這個腳本就是 dockerfile。

          Dockerfile 是一個文本文件,其內(nèi)包含了一條條的指令(Instruction),每一條指令 構(gòu)建一層,因此每一條指令的內(nèi)容,就是描述該層應(yīng)當(dāng)如何構(gòu)建。

          ?

          參數(shù)詳解

          FROM scratch #制作base image 基礎(chǔ)鏡像,盡量使用官方的image作為base image
          FROM centos #使用base image
          FROM ubuntu:14.04 #帶有tag的base image

          LABEL version=“1.0” #容器元信息,幫助信息,Metadata,類似于代碼注釋
          LABEL maintainer=“[email protected]"

          #對于復(fù)雜的RUN命令,避免無用的分層,多條命令用反斜線換行,合成一條命令!
          RUN yum update && yum install -y vim
          Python-dev #反斜線換行
          RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME”

          WORKDIR /root #相當(dāng)于linux的cd命令,改變目錄,盡量使用絕對路徑!!!不要用RUN cd
          WORKDIR /test # 如果沒有就自動創(chuàng)建
          WORKDIR demo # 再進(jìn)入demo文件夾
          RUN pwd # 打印結(jié)果應(yīng)該是/test/demo

          ADD and COPY
          ADD hello / # 把本地文件添加到鏡像中,吧本地的hello可執(zhí)行文件拷貝到鏡像的/目錄
          ADD test.tar.gz / # 添加到根目錄并解壓

          WORKDIR /root
          ADD hello test/ # 進(jìn)入/root/ 添加hello可執(zhí)行命令到test目錄下,也就是/root/test/hello 一個絕對路徑
          COPY hello test/ # 等同于上述ADD效果

          ADD與COPY
          - 優(yōu)先使用COPY命令
          -ADD除了COPY功能還有解壓功能
          添加遠(yuǎn)程文件/目錄使用curl或wget

          ENV # 環(huán)境變量,盡可能使用ENV增加可維護(hù)性
          ENV MYSQL_VERSION 5.6 # 設(shè)置一個mysql常量
          RUN yum install -y mysql-server=“${MYSQL_VERSION}”

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

          VOLUME and EXPOSE
          存儲和網(wǎng)絡(luò)

          RUN and CMD and ENTRYPOINT
          RUN:執(zhí)行命令并創(chuàng)建新的Image Layer
          CMD:設(shè)置容器啟動后默認(rèn)執(zhí)行的命令和參數(shù)
          ENTRYPOINT:設(shè)置容器啟動時運行的命令

          Shell格式和Exec格式
          RUN yum install -y vim
          CMD echo ”hello docker”
          ENTRYPOINT echo “hello docker”

          Exec格式
          RUN [“apt-get”,”install”,”-y”,”vim”]
          CMD [“/bin/echo”,”hello docker”]
          ENTRYPOINT [“/bin/echo”,”hello docker”]


          通過shell格式去運行命令,會讀取$name指令,而exec格式是僅僅的執(zhí)行一個命令,而不是shell指令
          cat Dockerfile
          FROM centos
          ENV name Docker
          ENTRYPOINT [“/bin/echo”,”hello $name”]#這個僅僅是執(zhí)行echo命令,讀取不了shell變量
          ENTRYPOINT [“/bin/bash”,”-c”,”echo hello $name"]

          CMD
          容器啟動時默認(rèn)執(zhí)行的命令
          如果docker run指定了其他命令(docker run -it [image] /bin/bash ),CMD命令被忽略
          如果定義多個CMD,只有最后一個執(zhí)行

          ENTRYPOINT
          讓容器以應(yīng)用程序或服務(wù)形式運行
          不會被忽略,一定會執(zhí)行
          最佳實踐:寫一個shell腳本作為entrypoint
          COPY docker-entrypoint.sh /usr/local/bin
          ENTRYPOINT [“docker-entrypoint.sh]
          EXPOSE 27017
          CMD [“mongod”]

          [root@master home]# more Dockerfile
          FROm centos
          ENV name Docker
          #CMD ["/bin/bash","-c","echo hello $name"]
          ENTRYPOINT ["/bin/bash","-c","echo hello $name”]

          5、發(fā)布到倉庫

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

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

          ?

          https://hub.docker.com/

          ?
          # 注冊docker id后,在linux中登錄dockerhub
          docker login

          # 注意要保證image的tag是賬戶名,如果鏡像名字不對,需要改一下tag
          docker tag chaoyu/centos-vim peng104/centos-vim
          # 語法是:docker tag 倉庫名 peng104/倉庫名

          # 推送docker image到dockerhub
          docker push peng104/centps-cmd-exec:latest

          # 去dockerhub中檢查鏡像
          # 先刪除本地鏡像,然后再測試下載pull 鏡像文件
          docker pull peng104/centos-entrypoint-exec

          私有倉庫

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

          用法詳解:

          ?

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

          ?
          # 1.下載一個docker官方私有倉庫鏡像
          docker pull registry
          # 2.運行一個docker私有容器倉庫
          docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
          -d 后臺運行
          -p 端口映射 宿主機(jī)的5000:容器內(nèi)的5000
          -v 數(shù)據(jù)卷掛載 宿主機(jī)的 /opt/data/registry :/var/lib/registry
          registry 鏡像名
          /var/lib/registry 存放私有倉庫位置
          # Docker 默認(rèn)不允許非 HTTPS 方式推送鏡像。我們可以通過 Docker 的配置選項來取消這個限制
          # 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ù)
          systemctl daemon-reload
          # 6.重啟docker服務(wù)
          systemctl restart docker
          # 注意:重啟docker服務(wù),所有的容器都會掛掉

          # 7.修改本地鏡像的tag標(biāo)記,往自己的私有倉庫推送
          docker tag docker.io/peng104/hello-world-docker 192.168.11.37:5000/peng-hello
          # 瀏覽器訪問http://192.168.119.10:5000/v2/_catalog查看倉庫
          # 8.下載私有倉庫的鏡像
          docker pull 192.168.11.37:5000/peng-hello

          實例演示

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

          確保 app.py 和 dockerfile 在同一個目錄!

          # 1.準(zhǔn)備好app.py的flask程序
          [root@localhost ~]# cat app.py
          from flask import Flask
          app=Flask(__name__)
          @app.route('/')
          def hello():
          return "hello docker"
          if __name__=="__main__":
          app.run(host='0.0.0.0',port=8080)
          [root@master home]# ls
          app.py Dockerfile

          # 2.編寫dockerfile
          [root@localhost ~]# cat Dockerfile
          FROM python:2.7
          LABEL maintainer="溫而新"
          RUN pip install flask
          COPY app.py /app/
          WORKDIR /app
          EXPOSE 8080
          CMD ["python","app.py"]

          # 3.構(gòu)建鏡像image,找到當(dāng)前目錄的Dockerfile,開始構(gòu)建
          docker build -t peng104/flask-hello-docker .

          # 4.查看創(chuàng)建好的images
          docker image ls

          # 5.啟動此flask-hello-docker容器,映射一個端口供外部訪問
          docker run -d -p 8080:8080 peng104/flask-hello-docker

          # 6.檢查運行的容器
          docker container ls

          # 7.推送這個鏡像到私有倉庫
          docker tag peng104/flask-hello-docker 192.168.11.37:5000/peng-flaskweb
          docker push 192.168.11.37:5000/peng-flaskweb

          如果看到這里,說明你喜歡這篇文章,請 轉(zhuǎn)發(fā)、點贊。

          瀏覽 62
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色片免费视频 | 激情婷婷丁香五月天 | 污污污污污www网站免费观看 | 日韩无日韩欧美 | 骚逼综合|