1.建立在FlaskApp/app中建立Flask項目: 2.生成web項目所需的運行環境:pip3 freeze > ../requirements.txt 3.編輯Dockerfile:
# 依賴的的操做系統 FROM ubuntu:16.04 # image的做者和做者郵箱 MAINTAINER oldeleven "gsfmcntt1022@163.com" # 安裝項目的執行環境 RUN apt-get update -y && \ apt-get install -y python3-pip python3-dev # COPY 指令將從構建上下文目錄中 <源路徑> 的文件/目錄複製到新的一層的鏡像內的 <目標路徑> 位置。 #<目標路徑> 能夠是容器內的絕對路徑,也能夠是相對於工做目錄的相對路徑(工做目錄能夠用 WORKDIR 指令來指定)。目標路徑不須要事先建立,若是目錄不存在會在複製文件前先行建立缺失目錄。 # ./requirements.txt:此文件指的是docker引擎中展開的構建上下文中的文件,並非本地文件的目錄文件 COPY ./requirements.txt /requirements.txt # Docker引擎的工做目錄 WORKDIR / # 安裝項目依賴項 RUN pip3 install -r requirements.txt # 複製全部的文件到工做目錄下 COPY . / # 入口點 ENTRYPOINT [ "python3" ] # 要執行的項目入口 CMD [ "app/app.py" ]
4.生成image鏡像文件:docker build -t docker-flask:0.1 . # 意思是將Dockerfile所在的目錄中的全部內容打包上傳給docker引擎 # -t :image的那麼和tag 那麼當咱們使用 docker build 命令來構建鏡像時,這個構建過程實際上是在 Docker引擎 中完成的,而不是在本機環境。 那麼若是在 Dockerfile 中使用了一些 COPY 等指令來操做文件,如何讓 Docker引擎 獲取到這些文件呢? 這裏就有了一個鏡像構建上下文的概念,當構建的時候,由用戶指定構建鏡像的上下文路徑,而 docker build 會將這個路徑下全部的文件都打包上傳給 Docker 引擎,引擎內將這些內容展開後,就能獲取到全部指定上下文中的文件了(參考下方docker架構圖)。 好比說 dockerfile 中的 COPY ./package.json /project,其實拷貝的並非本機目錄下的 package.json 文件,而是 docker引擎中展開的構建上下文中的文件,因此若是拷貝的文件超出了構建上下文的範圍,Docker引擎是找不到那些文件的。 5.運行咱們生成的image鏡像文件 docker run -d --name flask_app -p 5000:5000 docker-flask:0.1 或者 docker run -d --name flask_app -v $PWD/app:/app -p 8000:5000 docker-flask:0.1 # docker run 守護模式 --name 設置container的名字 -p 本機接口:容器接口 imageID或者imageName:tag # 注意:-p 5000:5000:注意這個5000是flask中配置的port # $PWD/app:表示實體機中app.py所在的位置:$PWD:是作鏡像的絕對工做路徑::/app:表示鏡像中app.py的位置,dockerfile中咱們的WORKDIR= /,因此鏡像中的app.py的位置就是/app/ 6、標記咱們本身製做的image docker tag docker-flask gsfmcntt1022/docker-flask:v1.0
# gsfmcntt1022 是用戶名須要替換成你本身的docker用戶名,這個用戶名也是你的docker倉庫名,
# 你在pull和push的時候docker引擎會經過你的用戶名將你製做的docker容器上傳到你本身的容器倉庫之中
7、上傳到咱們本身的docker倉庫中 docker login # 登陸docker
docker push gsfmcntt1022/docker-flask:v1.0 # dockerhub跟github不太同樣,不用git init初始化倉庫,他能夠直接經過你的用戶名來尋找你的docker倉庫位置,登陸以後直接push就能夠了
8、在咱們web服務器中pull login docker docker pull gsfmcntt1022/docker-flask:v1.0 # 若是版本爲latest能夠省略
☆ 至此咱們已經能夠製做本身的docker容器,而且上傳到本身的容器倉庫中(https://hub.docker.com/),那麼django,爬蟲或者其餘項目大體流程也是如此,你們能夠模擬製做python
☆ >>>>下一篇docker應用篇>>>>git