docker 安裝 使用

Docker安裝

一鍵安裝命令

sudo curl -fsSL https://get.docker.com| bash -s docker --mirror Aliyun

啟動docker

sudo service docker start

pull鏡像加速配置

sudo vi /etc/docker/daemon.json

輸入下列內容,最后按ESC,輸入 :wq! 保存退出。

{"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.1panel.live","https://hub.rat.dev"]
}

重啟docker

sudo service docker restart

鏡像的獲取和管理

獲取Docker鏡像:docker pull

docker pull 鏡像名稱:標簽

比如:

docker pull nginx # 省略標簽默認為latest,拉取最新Nginx官方鏡像
docker pull postgres:14 # PostgreSQL 14鏡像
docker pull your_docker_username/project:1.0

查看管理本地鏡像

列出本地鏡像:docker imagesdocker image ls

docker images
docker image ls

刪除本地鏡像:docker rmidocker image rm

docker rmi 鏡像id或名稱

注:如果鏡像正在被容器使用(即使容器已經停止),需要先刪除容器。
強制刪除:docker rmi -f 鏡像id或名稱

將docker鏡像保存為.tar文件

mkdir -p ~/docker_images/
docker save -o ~/docker_images/project_images.tar 鏡像名字:標簽

在目標機器加載鏡像

docker load -i ./project_images.tar

鏡像的運行

運行鏡像(創建容器): docker run

docker run 選項 鏡像名稱:標簽 命令 參數

常用選項:

-d / --detach : 后臺運行

docker run -d nginx

-p 主機端口:容器端口 / --publish 端口映射:將宿主機端口映射到容器內部端口,從外部訪問容器中的服務

--name 容器名稱:指定容器名稱,如果不指定,docker隨機生成

docker run -d -p 8080:80 --name my-nginx nginx
# 將主機8080映射到容器80
# 訪問主機:http://localhost:8080

-it : 交互式運行
-i / --interactive : 保持標準輸入打開
-t / --tty : 分配偽終端(TTY)

docker run -it ubuntu:22.04 bash
# 啟動一個ubuntu容器并進入bash shell

--rm : 容器退出時,自動刪除容器

docker run -it --rm ubuntu:22.04 bash

-v: 宿主機路徑:容器內路徑:權限 / --volume
權限:ro(只讀)或rw(讀寫)

# 將本地項目代碼映射到容器
docker run -it --rm -p 80:80 \
-v /home/a/java-app:/app \
java-dev-image:latest bash

--network 網絡名稱:將容器連接到指定的Docker網絡

docker run -d --network my-custom-network my-app-image

容器的管理操作

查看正在運行的容器:docker ps

docker ps```
查看所有容器(包括已經停止的):`docker ps -a````bash
docker ps -a

docker compose up:基于 docker-compose.yml 創建并啟動容器。
docker compose down:刪除容器,再次啟動時重新創建。

docker compose up
docker compose down

停止容器:docker stop
保留容器及其數據。

啟動容器:docker start
用來啟動已經創建好的容器,不會讀取 docker-compose.yml

docker stop 容器id或名稱
docker start 容器id或名稱

進入正在運行的容器:docker exec

docker exec -it 容器id或名稱 bash
# 退出容器shell: exit

從容器復制文件到宿主機:docker cp 容器id或名稱:/path /path
從宿主機復制文件到容器:docker cp /path 容器id或名稱:/path

Docker Compose 與多服務編排

在多服務應用場景下,手動編寫和管理復雜的 docker run 命令會變得非常繁瑣。docker-compose 應運而生,它允許你通過一個 YAML 文件(docker-compose.yml)來定義和運行多個 Docker 容器應用。它極大地簡化了多容器應用的部署和管理。

Docker Compose 的核心作用

docker-compose.yml 的作用是在 Dockerfile 構建好的鏡像基礎上,進一步定義這些服務在運行時如何協同工作。它關注的是整個應用棧的運行時配置和生命周期管理,例如:

  • 服務定義:你的 appfrontenddb 等,每個都是一個服務。
  • 鏡像來源:可以直接引用預構建的鏡像 (image: nginx),也可以指定通過 Dockerfile 構建 (build: .)。
  • 端口映射:將容器的端口映射到宿主機的端口,這是實際的對外暴露。
  • 數據卷掛載:將宿主機的文件或目錄掛載到容器內部,用于數據持久化或動態配置。
  • 環境變量:向容器注入運行時所需的環境變量。
  • 命令覆蓋:覆蓋 Dockerfile 中定義的默認啟動命令,常用于傳遞運行時參數。
  • 服務依賴:定義服務啟動順序,確保依賴的服務先啟動。
  • 網絡配置:定義服務之間的通信方式,docker-compose 會自動處理服務發現。
  • 健康檢查:定義如何判斷服務是否正常運行。

Dockerfile 專注于構建一個獨立的、可運行的鏡像,它描述的是鏡像在構建時的狀態和內容。而 docker-compose.yml 則專注于如何將這些獨立的鏡像組裝起來,形成一個完整的、可部署的應用系統,并處理它們之間的協作和運行環境。這種職責分離使得 Dockerfile 可以更簡潔地專注于其核心任務,而將復雜的部署細節委托給 docker-compose.yml

單獨構建與運行服務

雖然 docker-compose 極大地簡化了多服務管理,但理解如何單獨構建和運行每個服務仍然很重要。下面我們將以你的項目為例,展示如何為每個服務單獨編寫 Dockerfile(如果需要)并使用 docker run 命令來啟動它們。

1. 數據庫服務 (db)

docker-compose.yml 中,db 服務直接使用了 postgis/postgis:17-3.4-alpine 官方鏡像。通常不需要為它單獨編寫 Dockerfile,直接拉取并使用即可。

  • Dockerfile

如果需要為 db 服務定制鏡像(例如,在鏡像中預裝特定的數據庫擴展或初始化腳本),創建一個 Dockerfile_db

# Dockerfile_db
FROM postgis/postgis:17-3.4-alpine# 示例:如果要在構建時加入初始化腳本
# COPY ./db_init_scripts/ /docker-entrypoint-initdb.d/

構建鏡像 (如果創建了 Dockerfile_db):

docker build -t my-custom-postgis -f Dockerfile_db .

單獨運行 db 服務的 docker run 命令

docker-compose.ymldb 服務的所有配置轉換為 docker run 命令的參數。首先手動創建一個 Docker 網絡,因為 docker-compose 會自動創建。

# 1. 創建網絡 (如果 app-network 不存在)
docker network create app-network# 2. 運行 db 服務
# 注意:以下命令中的環境變量值替換為默認值,實際使用時根據需要修改。
docker run -d \--name postgres \-p 54321:5432 \--restart always \-e POSTGRES_USER="postgres" \-e POSTGRES_PASSWORD="postgres" \-e POSTGRES_DB="postgis_test" \-e PGDATA="/var/lib/postgresql/data/pgdata" \-v ./volumes/db/data:/var/lib/postgresql/data \-v /home/a/Downloads/數據庫:/docker-entrypoint-initdb.d \--network app-network \postgis/postgis:17-3.4-alpine \postgres -c 'max_connections=100' \-c 'shared_buffers=128MB' \-c 'work_mem=4MB' \-c 'maintenance_work_mem=64MB' \-c 'effective_cache_size=4096MB'
2. 前端服務 (frontend)

前端服務使用 Nginx 提供靜態文件和反向代理。

Dockerfile

這是項目中用于構建 frontend 鏡像的 Dockerfile

# Dockerfile (for frontend)
FROM nginx
COPY ./ /home/mapsys
COPY default.conf /etc/nginx/nginx.conf

構建鏡像:

docker build -t front .

單獨運行 frontend 服務的 docker run 命令

# 運行 frontend 服務
# 確保 app-network 已經創建 (見 db 服務部分)
docker run -d \--name frontend \-p 18000:80 \--network app-network \front

注意: 如果 default.conf/home/mapsys 中的內容在容器啟動后需要動態更新,需要在 docker run 命令中添加 -v 參數進行卷掛載,例如:
-v ./default.conf:/etc/nginx/nginx.conf
-v /path/to/your/front/files:/home/mapsys

3. 后端應用服務 (app)

后端應用是基于 Java 的 Spring Boot 應用。

Dockerfile

項目中用于構建 app 鏡像的 Dockerfile_app

# Dockerfile_app (for app)
FROM openjdk:8-jreCOPY ./server/geospatial-0.0.1-SNAPSHOT.jar /usr/app/geospatial-0.0.1-SNAPSHOT.jar

構建鏡像:

docker build -t app -f Dockerfile_app .

單獨運行 app 服務的 docker run 命令

# 運行 app 服務
# 確保 db 服務和 app-network 已經創建并運行
docker run -d \--name java-app \-p 18080:8080 \--network app-network \app \java -jar /usr/app/geospatial-0.0.1-SNAPSHOT.jar \--spring.datasource.url=jdbc:postgresql://db:54321/postgis_test?stringtype=unspecified \--spring.datasource.username=postgres \--spring.datasource.password=postgres

注意: 在這個 docker run 命令中,--network app-network 是關鍵,它使得 java-app 容器能夠通過服務名 db 訪問到 postgres 容器(數據庫)。

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

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

相關文章

無人機探測器技術解析

一、工作模式 無人機探測器通過多模式協同實現全流程防御閉環: 1. 主動掃描模式 雷達主動探測:發射電磁波(如Ka/Ku波段),通過回波時差與多普勒頻移計算目標距離、速度及航向,適用于廣域掃描(…

Linux學習-軟件編程(進程與線程)

進程回收wait原型:pid_t wait(int *wstatus); 功能:回收子進程空間 參數:wstatus:存放子進程結束狀態空間的首地址 返回值:成功返回回收到的子進程的PID失敗返回-1WIFEXITED(wstatus):測試進程是否正常結束…

大模型微調分布式訓練-大模型壓縮訓練(知識蒸餾)-大模型推理部署(分布式推理與量化部署)-大模型評估測試(OpenCompass)

大模型微調分布式訓練 LLama Factory與Xtuner分布式微調大模型 大模型分布式微調訓練的基本概念 為什么需要分布式訓練? 模型規模爆炸:現代大模型(如GPT-3、LLaMA等)參數量達千億級別,單卡GPU無法存儲完整模型。 …

物聯網、大數據與云計算持續發展,樓宇自控系統應用日益廣泛

在深圳某智慧園區的控制中心,管理人員通過云端平臺實時監控著5公里外園區內每臺空調的運行參數、每盞路燈的開關狀態和每個區域的能耗數據。當系統檢測到某棟樓宇的電梯運行振動異常時,大數據算法自動預判可能的故障點并推送維修建議;物聯網傳…

在實驗室連接地下車庫工控機及其數據采集設備

在實驗室連接地下車庫工控機及其數據采集設備 我們小組為項目的數據采集組,目前在車頂集成了一個工控機、兩個激光雷達、兩個攝像頭、一個戶外電源 由于地下車庫蚊子太多了,我們可受不了這個苦,所以想坐在實驗室吹著空調就能連接工控機來修改…

icmpsh、PingTunnel--安裝、使用

用途限制聲明,本文僅用于網絡安全技術研究、教育與知識分享。文中涉及的滲透測試方法與工具,嚴禁用于未經授權的網絡攻擊、數據竊取或任何違法活動。任何因不當使用本文內容導致的法律后果,作者及發布平臺不承擔任何責任。滲透測試涉及復雜技…

系統思考:情緒內耗與思維模式

我們正在努力解決的問題,很多時候,根源就在我們自己。 在日常的工作和生活中,我們常常感到焦慮、內耗和失控。這些情緒和狀態,似乎總是在不斷循環。但如果停下來仔細思考,會發現,問題的背后,并不…

詳解grafana k6 中stage的核心概念與作用

在Grafana k6中,??Stage(階段)?? 是負載測試腳本的核心配置概念,用于動態控制虛擬用戶(VUs)的數量隨時間的變化。通過定義多個階段,用戶可以模擬真實場景中的流量波動(如用戶逐步…

JS 和 JSX 的區別

JS 和 JSX 是兩種不同的概念,盡管它們都與 JavaScript 密切相關,尤其是在 React 開發中。以下是它們的主要區別:1. 定義JS (JavaScript): 一種通用的編程語言,用于開發動態網頁、服務器端應用程序等。它是標準的 ECMAScript 語言。…

Linux軟件編程-進程(2)及線程(1)

1.進程回收資源空間&#xff08;1&#xff09;wait函數頭文件&#xff1a;#include <sys/types.h>#include <sys/wait.h>函數接口&#xff1a;pid_t wait(int *wstatus);功能&#xff1a;阻塞等待回收子進程的資源空間參數&#xff1a;wstatus &#xff1a;保存子進…

java 集合 之 集合工具類Collections

前言早期開發者經常需要對集合進行各種操作比如排序、查找最大最小值等等但是當時沒有統一的工具類來處理所以導致代碼重復且容易出錯java.util.Collections 工具類的引入為開發者提供了大量 靜態方法 來操作集合它就像一個經驗豐富的助手和數組工具類 Arrays 一樣避免了我們重…

2025 年電賽 C 題 發揮部分 1:多正方形 / 重疊正方形高精度識別與最小邊長測量

2025 年全國大學生電子設計競賽 C 題 發揮部分 1&#xff1a;多正方形 / 重疊正方形高精度識別與最小邊長測量 香橙派 OpenCV C 全流程解析 目錄 賽題背景與需求技術難點全景圖系統總體架構硬件平臺與接線軟件架構與線程模型算法流水線逐幀拆解 6.1 圖像預處理6.2 輪廓提取與…

【自動駕駛】自動駕駛概述 ② ( 自動駕駛技術路徑 | L0 ~ L5 級別自動駕駛 )

文章目錄一、自動駕駛技術路徑1、L0 級別 自動駕駛2、L1 級別 自動駕駛3、L2 級別 自動駕駛4、L3 級別 自動駕駛5、L4 級別 自動駕駛6、L5 級別 自動駕駛一、自動駕駛技術路徑 美國汽車工程師學會 ( SAE ) 將 自動駕駛 分為 L0 ~ L5 六個級別 : 其中 L0 級別 是 完全手動 , L5…

C++少兒編程(二十二)—條件結構

1.理解條件結構小朋友們&#xff0c;今天讓我們一起來探索一個神奇而有趣的知識——程序的條件結構&#xff01;首先&#xff0c;讓我們來想象一個有趣的場景。比如說&#xff0c;你們正在準備去公園玩耍。在出發之前&#xff0c;你們會看看天氣怎么樣。如果天氣晴朗&#xff0…

Ubuntu20.04下Px4使用UORB發布消息

1 .msg文件夾定義數據類型及 變量名文件位置如圖&#xff0c;在PX4-Autopilot/msg文件夾下&#xff0c;筆者創建的文件名為gps_msg.msggps_msg.msg內容如下 uint64 timestamp # 時間戳 float32 latitude float32 longitude float32 altitude 同時&#xff0c;在CM…

three.js學習記錄(第二節:鼠標控制相機移動)

效果展示&#xff1a; 鼠標控制一、鼠標控制 - 軌道控制器&#xff08;OrbitControls&#xff09; 1. 從nodeModules中導入OrbitControls&#xff0c;OrbitControls 是一個附加組件&#xff0c;必須顯式導入 import { OrbitControls } from "three/examples/jsm/controls/…

Shortest Routes II(Floyd最短路)

題目描述There are n cities and m roads between them. Your task is to process q queries where you have to determine the length of the shortest route between two given cities.輸入The first input line has three integers n, m and q: the number of cities, roads…

分享一個基于Hadoop的二手房銷售簽約數據分析與可視化系統,基于Python可視化的二手房銷售數據分析平臺

&#x1f495;&#x1f495;作者&#xff1a;計算機源碼社 &#x1f495;&#x1f495;個人簡介&#xff1a;本人八年開發經驗&#xff0c;擅長Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬蟲、大數據、機器學習等&#xff0c;大家有這一塊的問題…

STM32的PWM

PWM作為硬件中幾乎不可或缺的存在&#xff0c;學會 PWM&#xff0c;等于打通了 STM32 的“定時器體系”。學一次&#xff0c;STM32 全系列&#xff08;甚至 AVR、PIC、ESP32&#xff09;都能通用。硬件只要一個 I/O 就能驅動功率模塊&#xff0c;非常省成本。不會 PWM&#xff…

OpenCompass傻瓜式入門教程

文章目錄1 我也許不是傻瓜&#xff0c;卻只想做個傻瓜2 環境要求3 安裝3.1 下載源碼3.2 創建虛擬環境3.3 安裝4 下載數據5 查看支持的模型和數據集6 評測6.1 指定模型路徑6.2 指定配置文件6.2.1 評測本地qwen2.5模型6.2.1.1 查看opencompass支持的qwen2.5模型6.2.1.2 創建配置文…