您好,登錄后才能下訂單哦!
今天小編給大家分享一下Docker如何安裝與應用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
在mac下安裝docker
打開docker下載網址下載穩定版本,并安裝和運行docker。頂部狀態欄中的鯨魚指示docker正在運行,并可以從終端訪問。
點擊頂部狀態欄中的鯨魚,選擇about docker
以驗證是否有最新版本。
運行這些命令來測試docker、docker-ompose、docker-machine版本是否是最新的,并且和docker.app兼容。
$ docker --version $ docker-compose --version $ docker-machine --version
打開一個命令行終端,你可以運行一些docker命令來驗證docker是否正常工作。比如使用docker version
來檢查你是否安裝了最新版本,使用docker ps
來列出正在運行的容器,使用docker run hello-world
運行示例程序。
使用docker run
命令可以啟動一個新容器,這種單一的命令將觸發安裝運行序列:先在本機尋找該鏡像,如果本機找不到就去docker hub下載這個鏡像,并把鏡像加載到容器中,然后啟動該程序,這樣容器就運行起來了。其他系統可以參考安裝。
docker示例項目
現在開始使用docker構建應用程序,從docker應用程序的層次結構底部開始,應用程序是一個容器,在這個層次上面是一個服務,它定義了容器在運行時的行為方式,最后,在頂層是堆棧,定義了所有服務的交互。
在過去,如果要開始編寫一個python應用程序,第一步就是在機器上安裝一個python運行庫,但是,這會造成應用程序只能在您的機器運行。使用docker可以將一個可移植的python運行時環境作為一個鏡像來獲取,無需安裝。然后構建可以將基礎python鏡像與應用程序代碼一起包括在內,確保您的應用程序、依賴項和運行時環境都一起移動。
這些可移植的鏡像是由一個叫做dockerfile
的東西來定義的。
用dockerfile定義容器
dockerfile
將定義容器內的環境中發生了什么,訪問像網絡接口和磁盤驅動器這樣的資源是在這個環境中虛擬化的,這個環境與系統的其他部分是隔離的,所以必須將端口映射到外部世界,并具體說明想復制哪些文件到那個環境。完成這些工作后,這個dockerfile
中定義的應用程序在任何地方運行都將有完全相同的表現。
創建一個新的目錄,在新目錄下創建一個名為dockerfile
的文件,將以下內容復制并粘貼到該文件中保存。
# 使用官方的python運行時環境作為父鏡像 from python:2.7-slim # 將工作目錄設置為“/app” workdir /app # 將當前目錄內容復制到“/app”的容器中 add . /app # 安裝requirements.txt中指定的所有需要的軟件包 run pip install --trusted-host pypi.python.org -r requirements.txt # 將端口80映射到外部世界 expose 80 # 定義環境變量 env name world # 容器啟動時運行app.py cmd ["python", "app.py"]
創建并編輯應用程序
創建requirements.txt文件,并放在與dockerfile
相同的目錄下。
flask redis
創建app.py文件,并放在與dockerfile
相同的目錄下。
from flask import flask from redis import redis, rediserror import os import socket # 連接到redis redis = redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2) app = flask(__name__) @app.route("/") def hello(): try: visits = redis.incr("counter") except rediserror: visits = "<i>cannot connect to redis, counter disabled</i>" html = "<h3>hello {name}!</h3>" \ "<b>hostname:</b> {hostname}<br/>" \ "<b>visits:</b> {visits}" return html.format(name=os.getenv("name", "world"), hostname=socket.gethostname(), visits=visits) if __name__ == "__main__": app.run(host='0.0.0.0', port=80)
很簡單的就完成了應用程序部分,當dockerfile
被內置到鏡像中時,由于dockerfile
的add
命令,app.py和requirements.txt將會出現,并且app.py的輸出將可以通過http訪問,這要歸功于expose
命令。
構建應用程序
打開一個命令行終端,確保仍然在新目錄的頂層,運行構建命令,這會創建一個docker鏡像。
$ docker build -t friendlyhello .
構建的鏡像可以在本地docker鏡像注冊表中看到。
$ docker images
運行應用程序
運行應用程序,使用-p將機器的端口4000映射到容器的已發布端口80。
$ docker run -p 4000:80 friendlyhello
現在應該看到一條消息,python在http://0.0.0.0:80上提供應用程序,但是這個消息來自容器內部,它并不知道該容器的端口80映射到4000,因此正確的url為http://localhost:4000。
也可以在命令行終端中使用curl命令來查看相同的內容。
$ curl http://localhost:4000
這個4000:80的端口重映射是為了演示dockerfile
中的expose
與使用docker run -p
發布的內容之間的區別。在后面的步驟中,會將主機上的端口80映射到容器中的端口80,并使用http://localhost。
在mac下,在命令行終端中點擊ctrl + c即可退出。而在windows系統下,ctrl + c不會停止容器。因此,首先鍵入ctrl + c來獲取提示,或打開另一個shell,然后鍵入docker container ls
列出正在運行的容器,接著是docker container stop <container name或id>
以停止容器。否則,當嘗試在下一步中重新運行容器時,將從守護程序中收到錯誤響應。
現在以分離模式在后臺運行應用程序。
$ docker run -d -p 4000:80 friendlyhello
容器正在后臺運行,您還可以使用docker container ls查看container id。
$ docker container ls
可以看到container id與http://localhost:4000上的內容匹配。現在使用docker container stop
來結束進程。
$ docker container stop 9dfc794cdc52
分享鏡像
為了演示鏡像的可移植性,上傳我們構建的鏡像,并在其他地方運行它,畢竟,將容器部署到生產環境中時,需要學習如何使用注冊表。
一個注冊表是一個存儲庫的集合,一個存儲庫是一個鏡像集合,有點像github存儲庫,除了代碼已經建立。注冊表上的帳戶可以創建許多存儲庫。docker cli默認使用docker的公共注冊表。在這里使用docker的公共注冊表,是因為它免費,并且是預配置的,但是有許多公共選項可供選擇,甚至可以使用docker trusted registry設置您自己的私有注冊表。
使用docker id登錄
如果沒有docker帳戶,請在docker官網注冊一個。然后,登錄到本地機器上的docker公共注冊表。
$ docker login
標記鏡像
將本地鏡像與注冊表中的存儲庫相關聯的符號是username/repository:tag
,該tag是可選的,但推薦使用,因為這是注冊管理機構為docker鏡像提供版本的機制。給存儲庫標記一個有意義的名字,比如get-started:part2
,這會將鏡像放入啟動存儲庫,并將其標記為part2。
現在,把它們放在一起來標記鏡像,使用用戶名、存儲庫、標簽名稱運行docker tag image,以便鏡像將上傳到想要的目的地。
# 語法 $ docker tag image username/repository:tag # 示例 $ docker tag friendlyhello john/get-started:part2
運行docker images
或docker image ls
以查看新標記的鏡像。
發布鏡像
將您標記的鏡像上傳到存儲庫。
# 語法 $ docker push username/repository:tag # 示例 $ docker push john/get-started:part2
一旦完成,這個上傳的結果是公開的,如果你登錄到docker hub ,你將會看到那個新的鏡像和它的pull
命令。
從遠程存儲庫中提取并運行鏡像
從現在開始,可以使用docker run并使用此命令在任何機器上運行您的應用程序。
# 語法 $ docker run -p 4000:80 username/repository:tag # 示例 $ docker run -p 4000:80 john/get-started:part2
如果鏡像在機器上本地不可用,docker將從存儲庫中取出。無論docker run
在哪里,它都會將您的鏡像、python以及所有依賴項從requirements.txt中提取出來,并運行您的代碼。它們被打包在行李箱中一起旅行,主機不需要安裝任何東西,除了docker環境來運行它。
以上就是“Docker如何安裝與應用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。