日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

服务器部署docker

發布時間:2024/7/5 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 服务器部署docker 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

服務器部署docker

docker簡介##

  • 可以把docker是一個容器,可以讓開發者將自己的項目部署到這個容器中,最常用的場景是將自己的后端項目部署到服務器的時候會將其打入docker鏡像中,可以理解為一個開銷更小的虛擬機。

docker好處##

  • 可以輕易地讓幾十個服務在docker中跑起來,沒有誰敢說能在自己的電腦上跑幾十個虛擬機吧,
  • docker可以讓開發者更加貼近生產環境,即便于測試,而且同一個鏡像可以利用在正式和測試環境節約資源
  • docker可以將每個應用隔離起來,可以運行多個業務。
  • docker的安全性極具保障。

docker在阿里云部署##

言歸正傳,這個博客本身就是用來將docker部署在阿里云的服務器上。
(1)擁有一臺阿里云學生機(窮)
(2)這邊推薦系統是CentOS 7.3
(3)首先登陸root賬號,這個正常人應該都會(sudo su root)
(4)接下來是輸入命令 yum install docker
(5)你可以嘗試docker -v來判斷你是否下完 docker基本命令
(6)因為我是一個后端人員,所以我偏向于用IDEA來遠程docker,這邊就需要涉及到開端口的問題了,docker在阿里云這邊得默認端口是2375,這是個大坑,如果沒踩過,這輩子都連不上,這邊推薦一個博客,Linux的方面就不再贅述。
(7)因為阿里云方面是默認防火墻不打開2375,所以你在開端口同時,需要把防火墻關掉,因為學生機,也不是很怕被爆破,所以我就默認全開了。

(8)接下來是IDEA的部分了,一般的IDEA都會集成docker,首先是配置docker

接下來嘗試連接是否成功應該能夠看到以下畫面

這樣初步就完成了docker的部署。

當然要把自己的項目部署上去還是要一個dockerfile腳本,和部分配置,由于我忙著寫lajiruangong只能以后再分享了##

  • 這是我個人的興趣做出的分享,說錯得地方請私聊我,以上關于docker的見解也是我自己的理解說錯請指正。
  • 預告下次分享應該是docker部署mysql。(部署項目還等下下次吧)
<p>我們通過tensorflow或者pytorch一些深度學習框架可以訓練我們自己的模型,然而在生產部署中,不可能讓程序運行在一個server上(比如簡單的包裝一個tornado或者django框架實現服務的可用)就行了。為了保證服務的高可用,一般通過docker部署模型,之后通過k8s實現集群的管理和docker鏡像的管理。</p>

?

文章會首先介紹Docker的概念,Docker的基本語法和用法,以及和Docker相關的幾個工具的介紹。

Docker是什么
  容器與Docker
  Docker是一種常用的容器化技術。這里的容器化和虛擬化是對應的概念,即Docker和VirtualBox等等虛擬機的效果有類似之處,但容器是更輕量化的一套隔離環境,不會額外虛擬硬件,很多資源和進程都是由宿主機直接執行,因此省了很多資源消耗,速度要比虛擬機快很多,特別適合機器學習等AI之類的計算密集型的程序隔離需求。

  Docker的容器概念與Spring Boot的容器概念完全不同,后者是指Java代碼的一種組織形式。這兩種不同容器都與微服務有關。

為什么學Docker
  首先給大家舉個很常見的情景。某公司新人小王去辦公室報道,公司老鳥老李吩咐小王先去把工作用到的開發環境部署好再叫他。但是小王是個萌新程序員,下載這些開發庫的地址都不知道。冗長的環境安裝手冊看的小王頭昏腦漲,更不用說里面還有些錯誤和沒寫清楚的細節。這個場景是不是很多公司都經常在上演?其實,我在很久之前就不停的想,都程序員了為什么還要看技術手冊自己安裝,難道就沒有一個可靠的技術幫我一鍵部署好嗎 ?

?

答案是,當然有!你差的就是Docker!有了他,小王只需要下載好前輩寫好的Dockerfile,只要網絡OK,就可以一鍵運行演示程序。有沒有很簡單?下面我就來拿一個Github項目來告訴你怎么樣做到。

Docker部署實例
  下面先來看如何部署一個最簡單的圖片分類服務的Demo程序,要求圖片分類模型用深度學習框架Keras來實現,并通過flask發布模型的預測功能。下面我們就來看在Docker下的一鍵部署的過程。

?

首先,我們需要從Github上clone一份代碼,進入這個文件夾。

  

git clone https://github.com/mtobeiyf/keras-flask-deploy-webapp.git cd keras-flask-deploy-webapp

在進入到這個文件夾后,我們不妨看一下都有什么文件:

  


經過之前的學習,我們可以了解requirements.txt中管理了項目依賴。其他的文件中,Dockerfile是本次文章最核心的一個文件,有了他Docker才能在本地進行鏡像的構建。這里我們可以把Dockerfile中的RUN pip install一行替換為RUN pip install -r /requirements.txt -i https://mirrors.aliyun.com/pypi/simple/,通過國內鏡像來加速安裝過程。我們可以輸入下面的指令,自己構建一個測試鏡像:

  docker build -t keras_flask_test .


  docker build就是Docker容器的鏡像構建命令。這條命令執行后,會需要等待一段時間(主要是下載和安裝,時間取決于機器配置和網絡環境情況)。如下圖所示,在這個項目的dockerfile里定義了7步構建。我這里因為提前構建了一次,這次構建會直接從緩存中讀取,所以省略了耗時的部分。

?  

?

?

?

只要看到上圖最后的Successfully built XXX和Successfully tagged XXX就說明已經構建成功。docker build命令的作用是讓Docker根據當前文件夾的Dockerfile內容,自動去構建名叫keras_flask_test的鏡像。我們可以來確認下是否有這個鏡像:

docker images |grep -i keras keras_flask_test latest af52f1dd1fbb 1 days ago 917MB

docker images是顯示出當前系統中存在的所有鏡像,后續加grep來搜索指定關鍵詞的鏡像。這里因為正好之前構建了下,所以是一天前的。讀者朋友如果剛剛構建好,鏡像的創建時間應該是最近。有了鏡像,我們就可以實際運行這個模型服務了:

docker run -it --rm -p 5000:5000 keras_flask_test

這里,docker run就是Docker從鏡像產生一個容器了。因為Keras自動調用了tensorflow,運行后的命令會顯示tensorflow的信息。同時,Keras也會自動下載一個mobilenetv2的輕量模型。等到一切就緒后,會提示Model loaded. Check http://127.0.0.1:5000/的信息。到這里,模型部署就已經完成了,是不是很6的感覺。我們的模型服務地址就是本機,端口號是5000

Docker鏡像與Docker容器的關系如同程序與進程一樣,鏡像是靜態的基礎,而容器是動態的實例。

這時候在瀏覽器中,打開http://127.0.0.1:5000應該能看到下圖的界面了。我們可以往中間的地方上傳一張圖片,模型會返回當前圖片的類別。大家可以玩玩,不過不要太為難這個小模型了。

?

?

?

?

Docker常用命令
 上面的例子很簡單,我們回頭總結和擴展相關的知識。先總結下Docker容器化的普遍的流程。

Docker化程序的一般流程
  對于使用者,在得到Docker化程序的代碼后,首先,通過docker build找到Dockerfile構建鏡像。然后,docker run從鏡像產生一個容器的實例。

?

  而對于開發者,一般在AI模型的Docker化之前,先由開發者在自己的非容器環境中開發調試好后才開始。然后開發者把自己環境的安裝配置過程,完整的移植到Dockerfile中。一般來說,Dockerfile中的命令要能復現自己的整個配置過程,才算真正完整的Docker化程序開發。開發者一般需要自己重復使用者的步驟,以確保整個過程是真正能在新環境中重現。

?

  簡單來說,順序是:編寫Dockerfile→build→run三部曲。下面介紹這個流程相關的命令。由于Dockerfile的內容相對較多,所以暫時放在后面來說。我們先從build開始。

構建鏡像
  構建Docker鏡像的命令是docker build,這條命令的基礎是Dockerfile文件。命令的形式為:

  docker build [OPTIONS] PATH | URL | -


  其中,具體的選項有很多,建議參考幫助來學習(docker build --help)。我們著重介紹一些最常見的:

作用參數備注
名稱標記-t格式為-t xxx/yyy:zzz。xxx,yyy和zzz分別是用戶名,鏡像名和標簽(版本
Dockerfile位置-f如果Dockerfile不在當前目錄,或者需要構建的源文件文件名不是Dockerfile,則需要指定目標文件。
環境變量--build-arg構建時需要的環境變量。例如設置代理解決構建時的網絡問題:--build-arg http_proxy=http://xxx:port

?

  一個簡單的命令實例是:

docker build -t test .

這條命令就是根據當前目錄的Dockerfile內容構建名為test的鏡像,命令中最后的.表示構建的目錄路徑。

運行容器
  運行Docker容器的命令是docker run,這條命令的基礎是引用的鏡像必須已經構建好。Docker也為運行命令準備了非常多的選項,具體可以參考幫助(docker run --help),這里先列出一部分比較常用的選項:

?  相關參數可以自行百度

  鏡像構建可以通過上一步的docker build,自己來完成本地的構建。大多情況下,也可以直接使用別人構建好并上傳到Dockerhub等Docker鏡像托管網站的鏡像。例如下面一條命令:

docker run -d -p 8080:80 --rm --name mynginx nginx

  這條命令是后臺運行一個名為mynginx的nginx服務,把容器中的80端口映射為主機的8080,容器在停止時會自動刪除。假設當前系統沒有運行過這條命令,Docker會顯示出以下信息:

?  

第一條信息表示Docker沒有找到本地的nginx;latest鏡像;第二條信息顯示從library/nginx上拉取最新的鏡像。后面都是鏡像拉取的分層進度,最后一行表示容器運行成功后返回的容器ID。

從這里,我們可以發現docker run的邏輯先搜索本地是否有構建過這個鏡像,找不到時會從遠端服務器中的倉庫拉取最新鏡像回來。這個過程非常類似Github上拉取代碼,也可以看作一種分布式。

編寫Dockerfile
Dockerfile為鏡像構建提供了具體步驟,我們來看下今天介紹的項目中的Dockerfile內容:

FROM python:3.6-slim-stretch

ADD requirements.txt /
RUN pip install -r /requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

ADD . /app
WORKDIR /app

EXPOSE 5000
CMD [ “python” , “app.py”]

其中,第一行的FROM python:3.6-slim-stretch中的FROM定義了基礎鏡像,這句表示該鏡像基于python:3.6-slim-stretch構建,新鏡像會包含基礎鏡像的所有文件。后面的EXPOSE表示鏡像的容器對外暴露什么端口,這與docker run -p xxxx:yyyy中的yyyy對應。CMD表示鏡像的容器運行后,自動執行的一條命令,類似于容器的入口命令。而剩下中間的許多行,則是構建鏡像中需要的具體指令。

?

完結.

分類: NLP, 云計算 虛擬化 容器

總結

以上是生活随笔為你收集整理的服务器部署docker的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。