一、Ubuntu安裝Docker
下面是具體的步驟:
1.準備條件:安裝前先卸載操作系統默認安裝的docker,再安裝必要支持。
#安裝前先卸載操作系統默認安裝的docker,
sudo apt-get remove docker docker-engine docker.io containerd runc#安裝必要支持
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
2.準備安裝:設置阿里源,因為訪問官方源會超時。
# 阿里源(推薦使用阿里的gpg KEY)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg#添加阿里apt源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null#更新源
sudo apt update
sudo apt-get update
3.安裝Docker
#安裝最新版本的Docker
sudo apt install docker-ce docker-ce-cli containerd.io
#等待安裝完成#查看Docker版本
sudo docker version#查看Docker運行狀態
sudo systemctl status docker
當安裝好了Docker之后,有兩種方式來執行docker 命令
- 在docker命令前加上sudo, 比如:sudo docker ps
- sudo -i 切換至root用戶,再執行docker 命令,比如:docker ps
由于國內無法訪問到Docker,首先在安裝的時候選國內阿里的源,參考上面的第2點。
另外還需要在docker daemon 配置文件中增加國內可用的 docker hub mirror ;
在 /etc/docker/ 這個位置找到daemon.json 文件【沒有此文件可以新建】修改為以下內容:
{"registry-mirrors": ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc","https://do.nark.eu.org","https://dc.j8.work","https://dockerproxy.com","https://gst6rzl9.mirror.aliyuncs.com","https://registry.docker-cn.com","http://hub-mirror.c.163.com","http://mirrors.ustc.edu.cn/","https://mirrors.tuna.tsinghua.edu.cn/","http://mirrors.sohu.com/"],"insecure-registries": ["registry.docker-cn.com","docker.mirrors.ustc.edu.cn"],"debug": true,"experimental": false
}
重載和重啟dockers服務
sudo systemctl daemon-reload
sudo systemctl restart docker
啟動Docker并添加開機自啟動
#啟動 Docker
sudo systemctl start docker#設置開機啟動 Docker
systemctl enable docker#重啟 Docker
sudo systemctl restart docker
二、常用docker命令
1. docker pull
拉取鏡像到本地,如拉取mysql鏡像可以用docker pull mysql:版本號,不寫默認是最新。
2. docker images
查看本地鏡像
3. docker rmi
刪除本地鏡像
4. docker ps
列出當前正在運行的 Docker 容器
docker ps -a 列出所有創建的容器,包括停止運行的容器
ps 是 “process status” 的縮寫, -a 代表 --all
5. docker rm
刪除指定容器,刪除前需要停止運行容器,或使用docker rm -f 強制刪除
docker rm 容器ID或者容器名 都可以刪除容器
6. docker run
用于創建一個新的容器,并在該容器中啟動指定的鏡像所對應的應用程序或進程。它會先檢查本地是否存在指定的鏡像,如果不存在,則會從默認的鏡像倉庫(如 DockerHub)中拉取該鏡像,然后基于該鏡像創建容器,并為容器分配所需的資源,最后啟動容器內的應用程序。如果鏡像已經存在,則直接使用本地鏡像創建并啟動容器。
#直接運行
docker run python:3.9-slim#交互式運行
docker run -it --name testContainer python:3.9-slim /bin/bash
-
-it:表示以交互式模式運行容器
-
–name testContainer:為容器指定一個名稱,方便后續操作
-
python:3.9-slim:使用指定的鏡像
-
/bin/bash:啟動一個bash shell
-
退出容器 exit
docker start 用于啟動已經創建但處于停止狀態的容器。它不會創建新的容器,也不會檢查或拉取鏡像,而是直接啟動之前已經創建好的處于停止狀態的容器,使容器內的應用程序或進程繼續運行。docker stop 停止容器運行。
7. docker exec
進行容器內部
docker exec -it testContainer bash
在一個正在運行的名為 testContainer 的容器中執行交互式 bash 命令
-it:表示以交互式模式運行容器
bash:啟動一個bash shell
8. docker build
用來執行Dockerfile文件,制作自己的鏡像時會用到
docker build -t myapp:3 .
-t 用于給鏡像命名,這里將其命名為myapp 并帶上標簽
最后的 . 代表構建上下文的路徑,也就是告訴 Docker,將當前目錄及其包含的所有文件和子目錄作為構建鏡像時可訪問的范圍
三、構造Python Flask Web應用鏡像
1. 創建Flask應用
新建一個項目pythonflaskweb ,創建 app.py 文件
# -*- coding: GBK -*-
# 處理中文亂碼from flask import Flask
from datetime import datetime
import pytzapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, Docker!'@app.route('/index')
def hello_index():# 設置時區為北京beijing_tz = pytz.timezone('Asia/Shanghai')# 獲取當前UTC時間utc_now = datetime.utcnow().replace(tzinfo=pytz.utc)# 轉換為北京時區時間beijing_now = utc_now.astimezone(beijing_tz)TT= beijing_now.strftime('%Y-%m-%d %H:%M:%S')return (f"當前時間是: {TT}")if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
2. 創建Dockerfile
Dockerfile是Docker鏡像的構建腳本,用于定義應用的運行環境。以下是一個典型的Flask應用的Dockerfile:
# 使用官方Python基礎鏡像
FROM python:3.9-slim# 設置工作目錄
WORKDIR /app# 復制當前目錄內容到工作目錄
COPY . /app# 安裝依賴
RUN pip install --no-cache-dir -r requirements.txt# 暴露應用運行的端口
EXPOSE 5000# 運行應用
CMD ["python", "app.py"]
3. 創建requirements.txt
為了管理Python依賴,需要創建一個requirements.txt文件,列出所有必要的庫:
Flask==2.2.2
Werkzeug==2.3.7
pytz
4.構建Docker鏡像
在項目根目錄下運行以下命令構建Docker鏡像:
docker build -t flask-app .
-t 選項用于給鏡像命名,這里我們將其命名為flask-app
最后的 . 代表構建上下文的路徑
5.運行Docker容器
構建完成后,可以使用以下命令運行容器
docker run -p 5000:5000 flask-app
-p 選項用于端口映射,將主機的5000端口映射到容器的5000端口
6.驗證應用
在瀏覽器中訪問http://localhost:5000,如果看到“Hello, Docker!”,說明你的Flask應用已經成功運行在Docker容器中。
下圖為項目結構:
7.打包鏡像和加載鏡像
docker save 命令允許你將一個或多個鏡像保存到一個tar歸檔文件中,然后可以將其復制到另一臺機器。
docker load 命令允許你從tar歸檔中加載鏡像到另一臺機器上。
#使用 docker images 命令來列出機器上的所有圖像
docker images #使用 docker save 命令將鏡像保存到一個tar文件中
docker save IMAGE ID > MyImage.tar #使用 docker load 命令將鏡像加載到機器
docker load < MyImage.tar