作業中遇到了需要docker部署一個web服務,供內部呼叫,而自己以前沒有接觸過docker,自己研究學習一天搭建成功,現在自己在本地VM虛擬機上, 通過Flask做個helloworld的專案,記錄下完整的操作步驟,
準備作業
一. 下載安裝docker, 我使用的Ubuntu18.04的虛擬機
# 國內daocloud一鍵安裝命令
curl -sSL https://get.daocloud.io/docker | SH
二. 后期我們要拉取一些鏡像,設定一個鏡像加速器,我們采用阿里云的鏡像加速
按照官方指導, 依次執行以下命令進行配置, 配置完畢,我們可以通過 命令 docker info 查看Registry Mirrors資訊
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://<你的ID>.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
三. 我們后面會有一個本地目錄和容器目錄掛載的操作,已達到后期如果需要改動代碼,僅修改本地目錄,重啟docker即可,我們 準備將本地目錄 ~/Public/test/bin 與容器 /app 進行掛載,掛載行為在啟動docker進行,現在我們在~/Public/test/bin目錄下先準備一些檔案
- Dockerfile
FROM python:3.6.8 as builder
ADD . /app/
WORKDIR /app/
COPY requirements.txt /app/
# timezone
ENV TZ=Asia/Shanghai
RUN pip install --no-cache-dir --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple\
&& pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
ENTRYPOINT ["python", "server.py"]
EXPOSE 5000
- server.py
#coding:utf-8
from flask import Flask
app=Flask(__name__)
@app.route("/")
def index():
return "<h1>Hello World!</h1>"
@app.route("/user/<name>")
def user(name):
return "<h1>Hello,%s</h1>"%name
if __name__=="__main__":
app.run(debug=True,host="0.0.0.0",port=5000)
- requirements.txt
flask
開始部署
一. 通過Dockerfile創建鏡像,命令如下
cd ~/Public/test/bin
# -t 后面跟鏡像的名字及標簽, .表示Dockerfile所在的目錄
sudo docker build -t flask:v1 .
等待拉取python-3.6.8鏡像,下載flask模塊, 其中python-3.6.8鏡像可以通過命令 docker pull python-3.6.8 提前下載好,FROM python-3.6.8 將會優先在本地獲取,獲取不到才去遠端拉取,
執行成功后,我們通過命令 sudo docker images, 可以查看我們的鏡像:
二. 啟動容器, 命令如下
sudo docker run -d -p 8080:5000 -v ~/Public/test/bin:/app --name hello_web flask:v1
重啟啟動之后,我們通過 sudo docker ps, 查看容器啟動情況, 通過 sudo docker logs -f hello_web 可以查看運行日志

可以看到我們的flask成功啟動
其中docker run 是指啟動一個容器, -d 后臺運行模式, -p 指定埠映射,此處可以理解為本地的8080將會映射到docker的5000埠, -v 表示目錄的掛載,格式為 本機目錄:容器目錄, --name 為容器的名稱,我們后期可以通過容器名稱進行開關容器的操作
三. 成功訪問web服務

docker命令
記錄一些用到的docker命令
# 關閉容器(根據容器名稱, 也可以根據容器ID)
sudo docker stop hello_web
# 啟動容器
sudo docker start hello_web
# 容器運行程序中進入容器內部, 比如我們需要安裝別的python模塊的時候需要進入容器內部
sudo docker exec -it hello_web /bin/bash
# 查看鏡像
sudo docker images
# 洗掉鏡像
sudo docker rmi <鏡像ID>
# 查看容器運行情況
sudo docker ps
sudo docker ps -a
# 洗掉容器, f 強制洗掉,v洗掉掛載檔案
sudo docker rm -fv <容器ID>
# 查看容器運行日志
sudo docker logs -f hello_web
# 根據Dockerfile構造鏡像
docker build -t <鏡像name:鏡像tag> <Dockerfile所在目錄,當前目錄為.>
# 運行容器
docker run -d -p <local_prot:docker_port> -v <本地目錄:掛載容器目錄> --name <容器名稱> <鏡像name:鏡像tag>
寫在最后
也是初學Docker,實作了自己的預期,但是Docker很多基礎也不熟悉,學無止境, 加油~~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/253589.html
標籤:其他
上一篇:pymysql.connect() 常見的幾種連接失敗Error
下一篇:2019美賽C題論文解讀
