Docker入門使用

用一個hello world的小例子來入門docker

在 Docker 容器中部署 Python + Flask 的簡單 Hello World 項目,需要遵循以下流程:

  1. 編寫應用程序

首先,在本地計算機上編寫一個簡單的 Python+Flask 應用程序,例如:

# hello.pyfrom flask import Flask
app = Flask(__name__)@app.route('/')
def hello():return "Hello, World!"if __name__ == '__main__':app.run(debug=True, host='0.0.0.0')

該應用程序創建了一個簡單的 Flask 應用程序,監聽本地的 5000 端口,當訪問根路徑(/)時,返回 “Hello, World!” 信息。

  1. 創建 Dockerfile

接下來,創建一個 Dockerfile ,指定如何在 Docker 鏡像中構建和運行 Python + Flask 應用程序。Dockerfile主要作用就是來生成鏡像images。例如:

# Dockerfile# 這里選一個在docker公共庫中有的python版本即可
FROM python:3.10.12-slim-bookworm# requirements.txt里面一般存有python項目中需要的包
COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r /app/requirements.txt# 工作目錄/app。在鏡像創建一個容器后,會在其linux系統下多一個目錄,/app。里面存著我們的項目
COPY . /appWORKDIR /app# 指定端口
EXPOSE 5000# 在啟動docker鏡像之后,它會自動運行python hello.py這條命令
CMD ["python", "hello.py"]

該 Dockerfile 的實現過程是這樣的:

  • 基于 Python 3.10 版本的 slim 基礎鏡像來構建鏡像。
  • 拷貝 requirements.txt 文件到容器中,使用 pip 命令來安裝依賴到鏡像中。
  • 將當前文件夾中的所有文件代碼放到容器中名為 /app 的目錄中。
  • 使用 WORKDIR 指令設置工作目錄為 /app
  • 定義暴露的端口為 5000。
  • 使用 CMD 指令來運行 Python 應用程序。

  1. 構建鏡像

使用以下命令在本地計算機上構建 Docker 鏡像:

$ docker build -t myflaskapp .

該命令將基于 Dockerfile 構建鏡像,并將其標記為名稱為 myflaskapp 的鏡像。
構建好的鏡像存在本地docker倉庫中,可以用命令 docker images來查看。

  1. 運行容器

最后,在 Docker 容器中運行 Python+Flask 應用程序,可以使用以下命令:

$ docker run -p 5000:5000 myflaskapp

該命令將基于 myflaskapp 鏡像啟動 Docker 容器,并將 5000 端口映射到本地計算機的 5000 端口上。

在本地計算機上打開瀏覽器,并訪問 http://localhost:5000 ,應該可以看到 “Hello, World!” 信息。


【總結】:
Docker因為其隔絕環境的特性,可以非常方便部署項目。

舉個例子,編寫好的項目proj要編寫dockerfile來定義如何打包鏡像,最后運行docker build命令來完成打包,生成proj對應的鏡像image。然后可以通過docker run 來運行打包好的鏡像image,使其獨立成一個容器container。
因此,只要使用一樣的鏡像image,最后任何人都可以成功在docker上部署項目來復現代碼效果,不用因為環境依賴沖突而煩惱。


【容器共享linux內核】
另外,在docker容器中運行

uname -a

可以查到其版本為
Linux d848bd04657b 5.15.49-linuxkit-pr #1 SMP Thu May 25 07:17:40 UTC 2023 x86_64 GNU/Linux。
這是一個Linux內核版本,不同于Ubuntu、Debian 等發行版。
Ubuntu、Debian 等發行版上面是基于內核安裝了許多其他的工具和應用程序,以便用戶能夠方便地使用它們。
這也可以看出,多個docker容器是共享一個linux內核的。這種方式可以大大減少容器所需的硬件資源,同時也使得容器更加輕量級、高效和便攜。

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

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

相關文章

基于ACF,AMDF算法的語音編碼matlab仿真

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 5.算法完整程序工程 1.算法運行效果圖預覽 2.算法運行軟件版本 matlab2022a 3.部分核心程序 .......................................................................... plotFlag …

函數遞歸專題(案例超詳解一篇講通透)

函數遞歸 前言1.遞歸案例:案例一:取球問題案例二:求斐波那契額數列案例三:函數實現n的k次方案例四:輸入一個非負整數,返回組成它的數字之和案例五:元素逆置案例六:實現strlen案例七:…

服務器遭受攻擊之后的常見思路

哈嘍大家好,我是咸魚 不知道大家有沒有看過這么一部電影: 這部電影講述了男主是一個電腦極客,在計算機方面有著不可思議的天賦,男主所在的黑客組織憑借著超高的黑客技術去入侵各種國家機構的系統,并引起了德國秘密警察…

Mac如何打開隱藏文件中Redis的配置文件redis.conf

Redis下載(通過??博客下載的Redis默認路徑為:/usr/local/etc) Redis下載 1.打開終端進入/usr文件夾 cd /usr 2.打開/local/文件夾 open local 3.找到redis.conf并打開,即可修改配置信息

訊飛星火認知大模型全新升級,全新版本、多模交互—測評結果超預期

寫在前面 版本新功能 1 體驗介紹 登錄注冊 申請體驗 2 具體使用 2.1 多模態能力 2.1.1 多模理解 2.1.2 視覺問答 2.1.3 多模生成 2.2 代碼能力 2.2.1 代碼生成 2.2.2 代碼解釋 2.2.3 代碼糾錯 2.2.4 單元測試 2.3 插件功能 2.3.1 PPT生成 2.3.2 簡歷生成 2.3.4 文檔問答 3 其他…

算法練習(6):牛客在線編程06 遞歸/回溯

package jz.bm;import java.io.PushbackInputStream; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays;public class bm6 {/*** BM55 沒有重復項數字的全排列*/ArrayList<ArrayList<Integer>> res new ArrayList<>()…

centos 7 安裝docker

系統配置&#xff1a; CentOS關閉selinux sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config關閉防火墻(可選)或者放行相應端口 systemctl stop firewalld.service && systemctl disable firewalld.service配置內核IP 轉發 net.ipv4.ip_forward1 dock…

Android學習之路(3) 布局

線性布局LinearLayout 前幾個小節的例程中&#xff0c;XML文件用到了LinearLayout布局&#xff0c;它的學名為線性布局。顧名思義&#xff0c;線性布局 像是用一根線把它的內部視圖串起來&#xff0c;故而內部視圖之間的排列順序是固定的&#xff0c;要么從左到右排列&#xf…

Android之版本號、版本別名、API等級對應關系(全)(一百六十二)

簡介&#xff1a; CSDN博客專家&#xff0c;專注Android/Linux系統&#xff0c;分享多mic語音方案、音視頻、編解碼等技術&#xff0c;與大家一起成長&#xff01; 優質專欄&#xff1a;Audio工程師進階系列【原創干貨持續更新中……】&#x1f680; 人生格言&#xff1a; 人生…

HTML詳解連載(4)

HTML詳解連載&#xff08;4&#xff09; 專欄鏈接 [link](http://t.csdn.cn/xF0H3)下面進行專欄介紹 開始嘍CSS定義書寫位置示例注意 CSS引入方式內部樣式表&#xff1a;學習使用 外部演示表&#xff1a;開發使用代碼示例行內樣式代碼示例 選擇器作用基礎選擇器標簽選擇器舉例特…

RISC-V公測平臺發布 · 7-zip 測試

簡介 7-Zip 是一個開源的壓縮和解壓縮工具&#xff0c;具有高壓縮比和快速解壓縮的特點。除了普通的文件壓縮和解壓縮功能之外&#xff0c;7-Zip 還提供了基準測試功能&#xff0c;通過壓縮和解壓縮大型文件來評估系統的處理能力和性能。 7-Zip 提供了一種在不同壓縮級別和多…

BUUCTF [MRCTF2020]Ezpop解題思路

題目代碼 Welcome to index.php <?php //flag is in flag.php //WTF IS THIS? //Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95 //And Crack It! class Modifier {protected $var;publi…

運維監控學習筆記7

Zabbix的安裝&#xff1a; 1、基礎環境準備&#xff1a; 安裝zabbix的yum源&#xff0c;阿里的yum源提供了zabbix3.0。 rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm 這個文件就是生成了一個zabbix.repo 2、安…

流程挖掘in汽車丨寶馬的流程效能提升實例

汽車行業在未來10年里&#xff0c;可能會面臨比過去50年更多的變化。電動化、智能化、共享化和自動駕駛等方面的趨勢可能給企業流程帶來以下挑戰&#xff1a; 供應鏈管理-電動化和智能化的發展可能導致供應鏈中的零部件和系統結構發生變化&#xff0c;企業需要重新評估和優化供…

zookeeperAPI操作與寫數據原理

要執行API操作需要在idea中創建maven項目 &#xff08;改成自己的阿里倉庫&#xff09;導入特定依賴 添加日志文件 上邊操作做成后就可以進行一些API的實現了 目錄 導入maven依賴&#xff1a; 創建日志文件&#xff1a; 創建API客戶端&#xff1a; &#xff08;1&#xff09…

Springboot 實踐(5)springboot添加資源訪問目錄及目錄測試

前文講解了swagger測試服務控制器&#xff0c;實現了數據庫數據訪問&#xff0c;這些功能都是運行在后臺服務器上&#xff0c;實際用戶并不能直接調用接口獲取數據&#xff0c;即使用戶能夠利用接口獲取到數據&#xff0c;數據也是結構化數據&#xff0c;不能爭取轉化成用戶使用…

基于OFDM+64QAM系統的載波同步matlab仿真,輸出誤碼率,星座圖,鑒相器,鎖相環頻率響應以及NCO等

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 2.1 OFDM原理 2.2 64QAM調制 2.3 載波同步 5.算法完整程序工程 1.算法運行效果圖預覽 2.算法運行軟件版本 MATLAB2022a 3.部分核心程序 ............................................…

【從零學習python 】31.深入理解Python中的高階函數和閉包

文章目錄 高階函數定義一個變量指向函數高階函數函數做為另一個函數的參數函數作為另一個函數的返回值 閉包函數嵌套什么是閉包修改外部變量的值原因分析解決方案 進階案例 高階函數 在Python中&#xff0c;函數其實也是一種數據類型。 def test():return hello worldprint(t…

NestJs 中使用 mongoose

在 NestJS 中鏈接 MongoDB 有兩種方法。一種方法就是使用TypeORM來進行連接&#xff0c;另外一種方法就是使用Mongoose。 此筆記主要是記錄使用Mongoose的。所以我們先安裝所需的依賴&#xff1a; npm i nestjs/mongoose mongoose安裝完成后&#xff0c;需要在AppModule中引入…

SpringBoot后端服務開啟Https協議提供訪問(使用阿里云資源)

目錄 概述 申請/下載證書 部署證書 本地測試訪問 服務器部署訪問 最后/擴展 總結 概述 本篇博客說明如何將SpringBoot項目開啟Https協議提供訪問。 博文以步驟【申請/下載證書】&#xff0c;【部署證書】&#xff0c;【本地測試訪問】&#xff0c;【服務器部署訪問】 &a…