Docker的學習(三)----使用Dockerfile部署一個Flask專案
建立了一個基礎Ubuntu映象、Nginx映象及Python映象。
使用了docker-compose提供堆疊完成多容器的組裝,完成部署一個Flask專案。
專案的Github地址:https://github.com/kenhancoder/docker_repo
首先建立了基礎映象repo/ubuntu:16.04_64_Base,映象基於phusion/baseimage:0.9.22 Github地址
Python映象
Dockerfile如下
# 基礎映象資訊
FROM repo/ubuntu:16.04_64_Base
# 維護者資訊
MAINTAINER Ken ken.han.coder@aliyun.com
# 映象操作指令
COPY ./conf/pip.conf /root/.pip/pip.conf
ADD requirements.txt requirements.txt
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
RUN mkdir -p /var/www
COPY app.py /var/www/app.py
WORKDIR /var/www
EXPOSE 8765
Flask程式碼如下
# -*- coding: utf-8 -*-
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(host="0.0.0.0", port=8765)
執行docker build -t="repo/flask_demo:0.1" .
host一定不要用預設的"127.0.0.1",不然容器啟動,即使對映了埠,在瀏覽器中也仍然是無法訪問服務的。
將host設定為"0.0.0.0",這樣Flask容器可以接受到宿主的請求。
nginx配置檔案如下
server {
listen 8765;
location / {
proxy_set_header Access-Control-Allow-Origin *;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://web:8765;
}
}
proxy_pass中的'web'為docker-compose.yml中的links的web
Docker Compose
使用Docker Compose,可以用一個YAML檔案定義一組要啟動的容器,以及容器執行時的屬性。Docker Compose稱這些容器為“服務”,像這樣定義:容器通過某些方法並指定一些執行時的屬性來和其他容器產生互動
。
可以在一個檔案中定義一個多容器的應用,然後使用一條命令來啟動你的應用,然後所有相關的操作都會被自動完成
docker-compose.yml如下
server:
restart: always
image: repo/nginx:1.10.1_Base
volumes:
- ./conf/nginx_flask_demo.conf:/etc/nginx/conf.d/flask_demo.conf
links:
- web
ports:
- "8765:8765"
web:
restart: always
image: repo/flask_demo:0.1
working_dir: /var/www
expose:
- "8765"
command: python /var/www/app.py
可以將command中的啟動命令換成gunicorn來啟動。
啟動
在docker-compose.yml的同級目錄下執行docker-compose up -d
總結
Dockerfile
RUN和CMD都是執行命令,他們的差異在於RUN中定義的命令會在執行docker build命令建立映象時執行,而CMD中定義的命令會在執行docker run命令執行映象時執行,另外使用第一種語法也就是呼叫exec執行時,命令必須為絕對路徑。
使用
Docker build
命令時,可以使用-f
引數來選擇指定的Dockerfile。如docker build -t="repo/server_flask:local_0.1" -f="Dockerfile_local" .
Docker Compose
我在YAML檔案大多使用已經建立好的映象,即使用
image
引數。Docker Compose也提供引數build
,引數值為Dockerfile的目錄路徑,所以只能將Dockerfile檔案命名為"Dockerfile",缺少靈活性。使用
-f
引數可以選擇指定docker-compose.yml,例如docker-compose -f docker-compose-local.yml up -d
,這將根據docker-compose-local.yml來啟動容器。
相關文章
- Docker學習—DockerFileDocker
- 使用Dockerfile構建一個django專案DockerDjango
- CentOS 部署 flask專案CentOSFlask
- 使用 Docker 部署 vue 專案DockerVue
- 使用 Docker 部署 Angular 專案DockerAngular
- 【Docker】動手寫Dockerfile學習DockerDocker
- Flask01 第一個flask專案Flask
- Flask web專案 gunicorn部署FlaskWeb
- 一個練習專案,好玩的bbs-python-flaskPythonFlask
- Docker學習筆記(三):Dockerfile及多步驟構建映象Docker筆記
- docker部署專案Docker
- 利用docker部署深度學習模型的一個最佳實踐Docker深度學習模型
- nginx+Gunicorn部署Flask專案NginxFlask
- 使用 Docker 部署 Spring Boot 專案DockerSpring Boot
- 嘗試使用 docker 部署 Laravel 專案DockerLaravel
- 使用 Docker 部署 NodeJS + MongoDB 專案DockerNodeJSMongoDB
- 使用Docker部署Spring Boot專案DockerSpring Boot
- 【保姆級】Python專案(Flask網頁)部署到Docker的完整過程PythonFlask網頁Docker
- 初學docker部署springboot專案DockerSpring Boot
- 小白學Docker(九) Docker DockerfileDocker
- [部署02] Docker 部署vue專案DockerVue
- SpringBoot使用Docker快速部署專案Spring BootDocker
- docker中部署專案Docker
- Docker 部署 vue 專案DockerVue
- Docker部署Java專案DockerJava
- 用uWSGI和Nginx部署Flask專案NginxFlask
- Docker容器學習梳理 - Dockerfile構建映象Docker
- flask學習(一)Flask
- 跟我一起學docker(八)--DockerfileDocker
- [Docker 系列]docker 學習七,DockerFile 編寫和實戰Docker
- 【Docker 系列】docker 學習七,DockerFile 編寫和實戰Docker
- 通過 docker-compose 一鍵部署一個微服務專案Docker微服務
- 一個用於學習的react專案React
- 編寫dockerfile來部署laravel專案(待續)DockerLaravel
- Docker(三):Dockerfile 命令詳解Docker
- 使用Dockerfile構建django專案DockerDjango
- 在centos8使用Docker部署Django專案CentOSDockerDjango
- 使用 Docker 部署 Spring Boot 專案,帶勁!!DockerSpring Boot