手動在本地電腦的docker容器中運行一個web應用 ``` sh # 下面的命令啓動一個docker容器 docker run -d -t -p 8000:5000 --name demo ubuntu:18.04 # 這條命令的解釋 -d 的意思是讓容器在後臺運行 -t 極少能用到,用於讓一個空白的Ubuntu鏡像在後臺運行 -p 用於指定端口映射,表示在本機訪問8000會被自動轉到容器中5000端口 必須保證本機沒有其餘應用程序佔用了8000端口,不然這裏會失敗 --name demo 制定了容器的名字是demo ubuntu:18.04 是啓動容器時用的鏡像名, docker會自動從鏡像服務器去下載這個鏡像 ```
# 啓動一個端口爲3456的進程 docker run -t -d -p 3456:5000 --name test ubuntu:18.04 # 報錯1,端口被佔用,刪除test容器來不安比3456端口的佔用 docker rm -f test # 報錯2,名字已存在, 那麼更名字, 也能夠用上面的刪除容器命令 docker run -t -d -p 3456:5000 --name test1 ubuntu:18.04
# 列出本機正在運行的容器 docker container ls # 列出本機全部容器,包括終止運行的容器 docker container ls --all # 查看正在運行的容器 docker ps # 查看最新指定數量的容器的狀態 docker ps -n 10 # 終止容器 docker stop <container id>/<container name> # 對終止運行的容器重啓, 容器id經過docker ps查詢 docker start <container id>/<container name> # 查看容器日誌 docker logs <container id>/<container name
啓動容器之後,說明了運行了一個鏡像實例,好比ubuntu:18.04鏡像生成的test容器。這個容器目前有了ubuntu操做系統的文件管理功能,內存管理功能,進程調度等功能。如今還須要擁有python3, pip 環境, apt工具包。 ```sh docker run -d -t -p 8000:5000 --name unbuntu:18.04 # 下載apt工具包 docker exec demo apt update docker exec apt -y install python3 python3-pip # 安裝flask庫 docker exec demo pip3 install flask ```
上面說過,使用docker的目的就是軟件應用帶環境安裝。如今環境好了,須要運行軟件應用 ```sh # demo 容器中建立/code目錄 docker exec demo mkdir /code # cp參數把當前文件夾的a.py拷貝到demo容器的/code/a.py docker cp a.py demo:/code/a.py # 運行demo容器中的a.py docker exec demo python3 /code/a.py ```
以前的一系列命令有些繁瑣, 其實更好的方式是在宿主機寫腳本,而後cp到docker容器中直接運行. 具體操做看實例操做
在當前目錄下建立a.py文件python
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'Hello from Docker' # 默認端口5000 if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
在當前目錄下建立install.sh文件git
# install.sh apt update apt -y install python3 python3-pip pip3 install flask
在當前目錄下建立run.sh文件github
# run.sh cd /code python3 a.py
打開終端,輸入如下命令web
docker run -d -t -p 8000:5000 --name unbuntu:18.04 # demo 容器中建立/code目錄 docker exec demo mkdir /code docker cp install.sh "demo:/code/install.sh" docker cp run.sh "demo:/code/run.sh" docker cp a.py "demo:/code/a.py" docker exec demo bash /code/install.sh docker exec demo bash /code/run.sh