--- title: 使用Docker運行Nginx與uWSGI容器服務 tags: Python description: Python Flask Web與Docker建置網站筆記 --- # 使用Docker運行Nginx與uWSGI容器服務 此筆記內容記錄著依據Nginx整合uWSGI Server服務映像檔,建立一個運行Nginx與uWSGI容器服務。 有關於**Nginx整合uWSGI Server服務映像檔**可參考-->[使用Docker建置Nginx結合uWSGI映像檔](/CVdNFGTyTqKoMZRwauV2eg)。 相關參考資源: 1. https://docs.docker.com/engine/reference/commandline/run/ 2. https://medium.com/@VisonLi/docker-%E5%85%A5%E9%96%80-%E7%AD%86%E8%A8%98-part-2-91e4dfa2b365 3. https://medium.com/@honglong/%E7%94%A8-docker-%E8%B7%91-mysql-d09c95c91da3 # 章節 1.[建立一個容器服務](https://hackmd.io/0VSgSzPHTfaAfwcO3mVZ1Q#%E5%BB%BA%E7%AB%8B%E4%B8%80%E5%80%8B%E5%AE%B9%E5%99%A8%E6%9C%8D%E5%8B%99) 2.[實際建立一個容器服務範例](https://hackmd.io/0VSgSzPHTfaAfwcO3mVZ1Q#%E5%AF%A6%E9%9A%9B%E5%BB%BA%E7%AB%8B%E4%B8%80%E5%80%8B%E5%AE%B9%E5%99%A8%E6%9C%8D%E5%8B%99%E7%AF%84%E4%BE%8B) 3.[其他容器服務](https://hackmd.io/0VSgSzPHTfaAfwcO3mVZ1Q#%E5%85%B6%E4%BB%96%E5%AE%B9%E5%99%A8%E6%9C%8D%E5%8B%99) # 建立一個容器服務 語法格式: ```docker= docker run --name 自定義容器名稱 --restart always -p 容器對外port:容器內部port -v 本機掛載目錄:容器內部目錄 -d 使用image名稱 ``` 關於詳細參數項目資訊可參考 https://docs.docker.com/engine/reference/commandline/run/#options * **--name** 給予此容器一個自訂識別名稱,可在**docker ps -a**資訊內看到。 * **--restart always** Restart policies (--restart) https://docs.docker.com/engine/reference/commandline/run/#restart-policies---restart 設定為當Docker運行時,自動啟動此容器服務,不管容器狀態是如何都會被Docker嘗試重新啟動。 * **-p** 設置主機host port對應容器內部port,當有連線需要跟容器對接時,透過設置host port導向到容器內部port。 假設要開放host 8080 port對應容器內部80 port,可以參考下面方式 ``` -p 8080:80 ``` 或 ``` -p 127.0.0.1:8080:80 ``` * **-v** 設置在本機上網站目錄掛載進容器內部網站目錄,在內部/web/web_data底下檔案會跟本機上實體網站目錄同步一樣 * **-d** 設置容器要以指定映像檔來建置運作環境。 # 實際建立一個容器服務範例 運行一個容器服務以Nginx整合uWSGI Server服務映像檔作為建立依據 ```docker= docker run --name flask_helloworld --restart always -p 85:80 -v E:\Project\flask_helloworld:/web/web_data -d nginx_flask_server ``` * 運行一個容器服務識別標籤為 **flask_helloworld** * 設置總是隨著Docker主程序啟動時,自動啟動容器服 * Host **85** Port對接容器內部 **80** Port * 掛載一個本機實體位置 **E:\Project\flask_helloworld** 至容器內部 **/web/web_data** * 使用映像檔 **nginx_flask_server** 為容器內容建置基礎 關於掛載範例Flask程式檔案 https://github.com/s123600g/FlaskDemoNotes/tree/master/my_flask_web 下載完畢放置在掛載本機實體位置內,並手動建立一個名為uwsgi空目錄即可。 執行完可在瀏覽器視窗輸入下列位址: http://127.0.0.1:85/helloworld 可透過下面指令查看容器資訊 ```docker= docker ps -a ``` 有關於docker ps指令可參考 https://docs.docker.com/engine/reference/commandline/ps/ 如果要進入容器內部環境可執行以下指令 ``` docker= docker exec -it 容器識別名稱 bash ``` 用以上範例容器名稱 **flask_helloworld** ```docker= docker exec -it flask_helloworld bash ``` 有關於docker exec指令可參考 https://docs.docker.com/engine/reference/commandline/exec/ # 其他容器服務 1. **portainer** 方便控管容器GUI介面工具 https://www.portainer.io/ https://www.portainer.io/installation/ https://alanhou.org/portainer-gui-docker/ https://xupeiyao.github.io/2019/05/02/ubuntu_install_docker_and_portainer/ ```docker= docker run -d -p 9000:9000 -p 8000:8000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v E:\app\Docker\portainer_data:/data portainer/portainer ``` 2. **MYSQL** https://hub.docker.com/_/mysql ```docker= docker run --name jyu-mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:latest ``` 後面範例實作會用到此容器服務MYSQL,因為是範例實作所以MySQL Root密碼會用簡單password來設置,實際狀況下使用時請謹慎設置Root密碼。