【Docker】從零開始將自己的應用打包到docker鏡像


 

 

背景是這樣:

有一個python寫的web服務,希望打包到容器中,通過容器去啟動。

參考了網上各種文檔,都感到說的不清不楚,實際操作過程中,又遇到了不少的坑,這里摸索OK后記錄一下。

 

docker的安裝和部署此處不再贅述。以下從docker安裝完成后開始講。 

 

首先,我們寫一個demo,使用了python的flask框架,文件名為  app.py  。

我們的目的是,將這個代碼以服務的形式,打包到docker鏡像中。

 

from flask import Flask

app=Flask(__name__)

@app.route('/')
def hello():
    return 'hello world'

if __name__=='__main__':
    app.run(host='0.0.0.0',debug=True,port='7777')

 

本地路徑如下圖

 

可以看到,最外層目錄是  mydocker ,內部是bdtools,app.py就放置在最內層。

首先,requirements.txt的內容如下圖,這為了安裝python依賴包:

 

 

 

然后我們開始編寫Dockerfile

FROM python:3.8     
# 拉取一個基礎鏡像,基於python3.8
MAINTAINER BH8ANK    
# 維護者信息
ADD ./bdtools/ /code/bdtools/  
# 將你的項目文件放到docker容器中的/code/bdtools文件夾,這里code是在根目錄的,與/root /opt等在一個目錄
# 這里的路徑,可以自定義設置,主要是為了方便對項目進行管理
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 設置容器時間,有的容器時區與我們的時區不同,可能會帶來麻煩
ENV LANG C.UTF-8    
# 設置語言為utf-8
WORKDIR /code/bdtools      
# 設置工作目錄,也就是下面執行 ENTRYPOINT 后面命令的路徑
RUN /usr/local/bin/pip3 install -r requirements.txt  
# 根據requirement.txt下載好依賴包
EXPOSE 7777      
# EXPOSE 指令是聲明運行時容器提供服務端口,這只是一個聲明,在運行時並不會因為這個聲明應用就會開啟這個端口的服務。
# 此處填寫7777,是因為我們上面的app.py提供的web服務就需要使用7777端口
ENTRYPOINT ["python3","app.py"]  

 

Dockerfile編寫完成后,我們就可以構建鏡像了。

使用命令

docker build -t new Dockerfile

意思是,使用當前路徑下的DockerFile進行構建,鏡像名稱為new

 

 

 

 

 

如上圖,看到最后一行Successfully就表示構建成功了。圖中紅色部分報錯是pip包版本不是最新的告警,不影響構建過程,可以忽略。

現在,我們可以查看一下鏡像情況

使用命令

docker images

 

 

 

 

如上圖,鏡像已經構建出來了。

 

那么,開始啟動容器。

執行命令

docker run -p 3333:7777 -dit d7d7df1b3dd5

這里需要說明一下:

1,-p參數,注意是小寫,3333,表示宿主機的端口,7777表示容器內部的端口。

整條參數的意思是:將容器內的端口7777,映射到宿主機的3333端口。

如果我們需要從宿主機外部訪問這個容器服務,只需要訪問3333端口即可。

2,-dit ,這個參數我們只說-d,就是后台運行的意思。整行命令最后的那一串字符串,其實是上面構建出的鏡像ID.

 

執行效果如下:

 

此刻,容器即已啟動了。

 

我們可以通過命令查看容器的運行情況

docker ps -a

 

 

 

 

此處,我們一般關注的是容器ID、STATUS和PORTS,可以看到,容器的端口7777已經映射到宿主機的3333端口。

 

那么,我們如何進入到容器內部呢?

可以使用命令

docker exec -it 容器ID  /bin/bash

需要注意,是容器ID,不是鏡像ID

  

執行效果如上圖,可以看到,命令行提示符已經到了容器內部。

 

那么,我們還需要確認一下,這個python服務到底啟動了沒有。

我們首先可以在宿主機查看端口占用情況

 

 

此外,也可以在本地PC瀏覽器,去訪問宿主機的3333端口即可。如下圖

 

 

綜上,我們已經完成了從鏡像制作到服務部署的全部流程。

 

此外,還有個別常用的docker相關的管理命令也一並貼上來

 

# 刪除鏡像
docker rmi  鏡像ID

# 刪除容器
docker rm 容器ID

# 殺容器,會將運行中的容器停下來
docker kill 容器ID

# 啟動容器,並將進入容器中的bash命令行
docker run -it 鏡像ID  /bin/bash  

 

 

 


 

 【完】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM