Ubuntu安裝Docker部署Python Flask Web應用

一、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 

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86386.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86386.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86386.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

7. 實現接口多重斷言pytest-assume

pytest-assume 終極指南&#xff1a;實現多重斷言的無縫驗證 在自動化測試中&#xff0c;單個測試往往需要驗證多個條件。本文將深入解析如何通過pytest-assume插件優雅解決多重斷言問題。 一、為什么需要多重斷言&#xff1f; 傳統斷言的局限性 def test_user_profile():use…

HTML 按鈕單擊事件示例

# HTML 按鈕單擊事件示例 以下是幾種不同的方式來實現按鈕的單擊事件&#xff1a; ## 1. 最簡單的 HTML 按鈕單擊事件 html <!DOCTYPE html> <html> <head> <title>按鈕單擊事件示例</title> </head> <body> <!-- 方法…

Kamailio SIP+RTP雙網卡SBC呼叫流程與媒體處理說明

本文檔旨在詳細解釋基于提供的 kamailio_sbc_dual_nic.cfg 配置文件&#xff0c;在雙網卡SBC&#xff08;Session Border Controller&#xff09;場景下&#xff0c;Kamailio (5.8.3) 如何與rtpengine協同工作&#xff0c;處理SIP信令以及音頻、視頻和RTCP媒體流的轉發。該方案…

青少年編程與數學 01-012 通用應用軟件簡介 15 人工智能助手

青少年編程與數學 01-012 通用應用軟件簡介 15 人工智能助手 一、什么是人工智能助手二、人工智能助手的產生和發展&#xff08;一&#xff09;早期探索階段&#xff08;二&#xff09;技術突破階段&#xff08;三&#xff09;廣泛應用階段 三、人工智能助手的主要功能&#xf…

JavaWeb學習——day9(圖書管理系統初級)

文章目錄 1. 項目功能模塊設計1. 登錄與權限控制&#xff1a;2. 圖書管理功能&#xff08;僅管理員&#xff09;3. 用戶功能&#xff08;普通用戶&#xff09;&#xff1a; 2. 數據庫設計3. 具體功能實現步驟步驟 1&#xff1a;擴展 UserService 來管理角色步驟 2&#xff1a;修…

【設計模式】策略模式 在java中的應用

文章目錄 概述策略模式的定義與應用場景定義應用場景 策略模式的核心設計思想 策略模式的純Java實現1. 定義策略接口&#xff08;抽象基類&#xff09;2. 設計具體策略類3. 通過示例代碼理解策略模式的基本用法 策略模式的優缺點與擴展性分析1. 策略模式在設計中的優勢2. 如何讓…

Container

目錄 一、Containerd 概述 1. 什么是 Containerd 主要特點和功能&#xff1a; 2. Containerd 的起源與背景 二、Containerd 架構 1. 架構概述 2. 核心組件解析 &#xff08;1&#xff09;Storage&#xff08;存儲&#xff09; &#xff08;2&#xff09;Metadata&…

C#設計模式-Builder-生成器-對象創建型模式

using System; using System.Collections.Generic;namespace A4_Builder_生成器_對象創建型模式 {// 產品類&#xff1a;最終要構建的復雜對象public class Computer{public string CPU { get; set; }public string GPU { get; set; }public int RAM { get; set; } // GBpublic…

C語言堆內存管理詳解:malloc和free的使用指南

在C語言程序設計中&#xff0c;內存管理是一個重要的話題。本文將詳細介紹堆內存的分配和釋放&#xff0c;重點講解malloc和free函數的使用方法&#xff0c;并通過實例說明相關注意事項。 一、堆內存與棧內存的區別 在C語言中&#xff0c;內存主要分為堆內存和棧內存&#xf…

探索 Oracle Database 23ai 中的 SQL 功能

探索 Oracle Database 23ai 中的 SQL 功能 介紹目標前提條件 功能 1&#xff1a;使用 FROM 子句功能 2&#xff1a;使用 BOOLEAN 數據類型功能 3&#xff1a;使用 IF NOT EXISTS DDL 子句功能 4&#xff1a;使用 INSERT 插入多行功能 5&#xff1a;使用新的 VALUE 構造函數功能…

SQL(6)

! 會排除null數據 select name from Customer where referee_id ! 2 or referee_id is null; 交叉聯結 交叉連接&#xff08;CROSS JOIN&#xff09;-CSDN博客 197. 上升的溫度 select a.id from weather as a cross join weather as b on datediff(a.recordDate ,b.recordD…

【Java面試題】cookie、session、jwt/token的異同

以下是對Cookie、Session、Token與JWT的異同的完善分析&#xff0c;結合技術原理、安全性和應用場景進行系統性對比&#xff1a; &#x1f50d; 一、核心概念與工作流程 機制定義工作流程核心特點Cookie客戶端存儲的小型文本數據1. 服務器通過Set-Cookie響應頭下發數據2. 瀏覽…

數字經濟時代科技創業的巨大潛力

2025年3月&#xff0c;42歲的字節跳動創始人張一鳴以655億美元身家成為中國新首富。這位"80后"企業家白手起家的故事&#xff0c;展現了數字經濟時代科技創業的巨大潛力。本文將帶您了解張一鳴的成功秘訣&#xff0c;分析網絡安全行業的最新趨勢&#xff0c;并為計算…

深入剖析Nginx架構及其不同使用場景下的配置

一、Nginx 整體架構概覽 1. Nginx簡介 Nginx 是采用 C 語言 編寫的高性能 Web 服務器、反向代理服務器及郵件代理服務器&#xff0c;特點是&#xff1a;高并發、高可用、低內存占用、模塊化設計。 架構核心理念&#xff1a; Master-Worker 多進程模型 事件驅動&#xff08;…

單元測試詳解

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 對于軟件測試&#xff0c;我們先按照開發階段來進行劃分&#xff0c;將軟件測試分為單元測試、集成測試、系統測試、驗收測試&#xff0c;下面我們來聊聊單元測試。…

四款好用的Windows虛擬打印機,文檔轉PDF

1&#xff0c;Microsoft Print To PDF 2&#xff0c;Foxit Reader PDF Printer 3&#xff0c;Adobe PDF 4&#xff0c;clawPDF 參考文檔&#xff1a; https://mp.weixin.qq.com/s/_mt4J2RwhqQE36DRAvc-Rg

《map和set的使用介紹》

引言&#xff1a; 上次我們學習了第一個高階數據結構—二叉搜索樹&#xff0c;趁熱打鐵&#xff0c;今天我們就再來學習兩個數據結構—map和set。 一&#xff1a;序列式容器和關聯式容器 前面我們已經接觸過STL中的部分容器如&#xff1a;string、vector、list、deque、arra…

PostgreSQL(二十六)分區表管理

目錄 一、分區表特點 1、概念&#xff1a; 2、好處&#xff1a; 3、特點&#xff1a; 二、范圍分區介紹 1、簡介 2、范圍分區實驗&#xff1a; 三、list分區介紹 1、簡介 2、list分區表實驗 四、hash分區介紹 1、簡介 2、hash分區表實驗 五、混合分區介紹 1、簡…

概率論中的生日問題,違背直覺?如何計算? 以及從人性金融的角度分析如何違背直覺的?

一、生日問題的概率計算&#xff1a;為何23人就有50%概率撞生日&#xff1f; 1. 問題背景與直覺矛盾 生日問題指&#xff1a;在n個人中&#xff0c;至少有兩人生日相同的概率超過50%時&#xff0c;n的最小值是多少&#xff1f; 直覺判斷&#xff1a;因一年有365天&#xff0c…

Qt for WebAssembly官方說明文檔

鏈接 Qt for WebAssembly | Qt 5.15