偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Docker 入門終極指南,詳細版!別再說不會用 Docker 了!

云計算 云原生
如果你是 Java 開發(fā)者,Docker 能讓你從繁瑣的環(huán)境配置中解放出來,專注業(yè)務(wù)代碼。而且,Docker 是云原生的基石,學(xué)會它,你就打開了 Kubernetes、微服務(wù)架構(gòu)的大門。

兄弟們,假如你寫了個超厲害的 Java 項目,結(jié)果部署到測試環(huán)境就崩了 —— 因為測試小哥的電腦裝了 MySQL 8.0,而你的開發(fā)環(huán)境是 MySQL 5.7。這時候,Docker 就像個會魔法的集裝箱工人,把你的項目和所有依賴(包括 MySQL 5.7)打包成一個 “集裝箱”,不管扔到哪臺服務(wù)器,都能原樣運行。

這就是 Docker 的核心:Build once, Run anywhere(一次構(gòu)建,處處運行)。它不是虛擬機,而是用 Linux 內(nèi)核的隔離技術(shù)(Namespace 和 Cgroups),把應(yīng)用和依賴封裝成輕量級容器,啟動速度秒級,資源占用比虛擬機少 90% 以上。

一、Docker 三大件:鏡像、容器、倉庫

1. 鏡像(Image):項目的 “靈魂快照”

鏡像是只讀的模板,包含代碼、依賴、配置等所有運行所需的東西。比如官方的 openjdk:11 鏡像,已經(jīng)預(yù)裝了 Java 11 環(huán)境。你可以用 Dockerfile 定制自己的鏡像,比如:

FROM openjdk:11-jre-slim  # 基礎(chǔ)鏡像
WORKDIR /app             # 設(shè)置工作目錄
COPY target/app.jar .     # 復(fù)制打包好的 JAR 包
EXPOSE 8080               # 暴露端口
CMD ["java", "-jar", "app.jar"]  # 啟動命令

這就像你給項目拍了張 “靈魂快照”,隨時能復(fù)活。

2. 容器(Container):鏡像的 “復(fù)活體”

容器是鏡像的運行實例,就像從模板生成的對象。啟動容器超簡單:

docker run -d -p 8080:8080 my-java-app:1.0  # -d 后臺運行,-p 端口映射

容器之間完全隔離,互不干擾,就像 iPhone 里的 App 一樣獨立。

3. 倉庫(Repository):鏡像的 “云盤”

Docker Hub 是全球最大的鏡像倉庫,你可以從這里拉取別人的鏡像,也可以把自己的鏡像推上去。比如拉取 MySQL 鏡像:

docker pull mysql:5.7  # 拉取 MySQL 5.7 鏡像

企業(yè)還可以搭建私有倉庫(如 Harbor),安全管理內(nèi)部鏡像。

二、Docker 安裝:3 分鐘搞定,比裝 IDE 還快

1. Linux 安裝(以 Ubuntu 為例)

# 卸載舊版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 添加 Docker 官方 GPG 密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 設(shè)置穩(wěn)定版?zhèn)}庫
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安裝 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 啟動 Docker 并設(shè)置開機自啟
sudo systemctl start docker
sudo systemctl enable docker
# 驗證安裝(看到 Hello from Docker! 就成功啦)
sudo docker run hello-world

裝完后,普通用戶也能運行 Docker:

sudo usermod -aG docker $USER  # 添加當(dāng)前用戶到 docker 組
newgrp docker  # 生效

2. macOS/Windows 安裝

直接下載 Docker Desktop,一鍵安裝。Docker 會在后臺啟動一個 Linux 虛擬機,你的容器都在里面運行。

三、Docker 核心操作:從入門到精通

1. 鏡像操作

  • 搜索鏡像:
docker search mysql  # 搜索 MySQL 鏡像
docker search --filter=STARS=5000 mysql  # 只看星星數(shù) >5000 的
  • 拉取鏡像:
docker pull mysql:5.7  # 拉取指定版本
docker pull nginx:alpine  # 拉取精簡版 Nginx
  • 查看鏡像:
docker images  # 列出本地鏡像
docker image ls  # 同上
  • 刪除鏡像:
docker rmi mysql:5.7  # 刪除指定鏡像 docker rmi $(docker images -q)  # 刪除所有鏡像(慎用?。?/code>

2. 容器操作

  • 啟動容器:
docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD=secret -p 3306:3306 mysql:5.7  # 啟動 MySQL

參數(shù)解釋:

  • -d:后臺運行
  • --name:給容器起個名字
  • -e:設(shè)置環(huán)境變量(這里設(shè)置 MySQL  root 密碼)
  • -p:端口映射(主機端口:容器端口)
  • 查看容器:
docker ps  # 查看正在運行的容器 docker ps -a  # 查看所有容器(包括已停止的) docker stats  # 實時監(jiān)控容器資源占用
  • 進入容器:
docker exec -it my-mysql bash  # 進入 MySQL 容器的 shell
  • 停止 / 啟動容器:
docker stop my-mysql # 優(yōu)雅停止
docker kill my-mysql # 強制停止
docker start my-mysql # 啟動已停止的容器
  • 刪除容器:
docker rm my-mysql # 刪除已停止的容器
docker rm -f $(docker ps -aq) # 刪除所有容器(慎用!)

3. 數(shù)據(jù)持久化:容器掛了,數(shù)據(jù)還在

  • 綁定掛載(Bind Mount):
docker run -d --name my-nginx -v /host/path:/usr/share/nginx/html nginx # 掛載主機目錄到容器

主機修改文件,容器內(nèi)實時生效,適合開發(fā)環(huán)境。

  • 命名卷(Named Volume):
docker volume create my-volume # 創(chuàng)建卷
docker run -d --name my-mysql -v my-volume:/var/lib/mysql mysql:5.7  # 使用卷

卷由 Docker 管理,數(shù)據(jù)更安全,適合生產(chǎn)環(huán)境。

4. 網(wǎng)絡(luò)管理:容器間如何通信?

  • 默認網(wǎng)絡(luò)(bridge):

容器默認連接到 bridge 網(wǎng)絡(luò),互相通過容器名或 IP 訪問。

docker network ls # 查看網(wǎng)絡(luò)
docker network inspect bridge # 查看 bridge 網(wǎng)絡(luò)詳情
  • 自定義網(wǎng)絡(luò):
docker network create my-network # 創(chuàng)建自定義網(wǎng)絡(luò)
docker run -d --name app --network my-network my-app # 容器加入網(wǎng)絡(luò)
docker run -d --name db --network my-network mysql:5.7  # 另一容器加入同一網(wǎng)絡(luò)

容器間可以直接通過容器名通信(如 app 訪問 db:3306)。

四、Dockerfile 最佳實踐:打造高效鏡像

1. 多階段構(gòu)建(Multi-Stage Builds)

傳統(tǒng) Dockerfile 會把編譯工具(如 Maven)也打進鏡像,導(dǎo)致體積臃腫。多階段構(gòu)建可以只保留最終運行時所需的內(nèi)容:

# 第一階段:編譯
FROM maven:3.8.6-openjdk-11 AS builder
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline
COPY . .
RUN mvn package -DskipTests

# 第二階段:運行時
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=builder /app/target/app.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]

最終鏡像體積從 1.5GB 降至 150MB,傳輸更快,漏洞更少。

2. 精簡鏡像

  • 使用基礎(chǔ)鏡像:

推薦 openjdk:11-jre-slim(約 240MB),而不是 openjdk:11(約 650MB)。

極致精簡用 alpine 鏡像(約 5MB),但要注意兼容性。

  • 清理臨時文件:
RUN apt-get update && apt-get install -y build-essential && rm -rf /var/cache/apt/* # 安裝后刪除緩存

3. 日志重定向

讓容器日志輸出到標(biāo)準(zhǔn)輸出 / 錯誤流,方便用 docker logs 查看,也能集成到 ELK 等日志系統(tǒng):

FROM alpine:3.20
RUN ln -svf /dev/stdout /var/log/nginx/access.log && ln -svf /dev/stderr /var/log/nginx/error.log  # 重定向 Nginx 日志

對 Java 應(yīng)用,直接用 System.out.println 輸出即可。

五、Docker Compose:一鍵啟動多容器應(yīng)用

1. 安裝 Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/v2.37.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version # 驗證

2. 編寫 docker-compose.yml

version: '3.8'
services:
app:
    build: . # 基于當(dāng)前目錄的 Dockerfile 構(gòu)建鏡像
    ports:
      - "8080:8080"
    depends_on:
      - db
db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - db-data:/var/lib/mysql
volumes:
db-data: # 定義命名卷

3. 啟動 / 停止

docker-compose up -d # 后臺啟動
docker-compose down # 停止并刪除容器/網(wǎng)絡(luò)/卷
docker-compose logs app # 查看 app 服務(wù)日志

Docker Compose 2025 版本默認啟用 Bake 構(gòu)建引擎,并行構(gòu)建鏡像,速度提升 30%+。

六、Docker 安全與性能優(yōu)化

1. 安全加固

  • 最小權(quán)限運行:
FROM openjdk:11-jre-slim
RUN adduser -D appuser && chown -R appuser /app # 創(chuàng)建非 root 用戶
USER appuser # 切換用戶
  • 只讀文件系統(tǒng):
docker run --read-only my-app  # 容器文件系統(tǒng)只讀(除了掛載的卷)
  • 限制資源:
docker run --memory=1g --cpus=2 my-app  # 限制內(nèi)存 1GB,CPU 2 核
  • 使用安全模塊:

--security-opt seccomp=unconfined:禁用系統(tǒng)調(diào)用過濾(默認)

--security-opt apparmor=docker-default:啟用 AppArmor 安全策略

2. 性能優(yōu)化

  • 網(wǎng)絡(luò)優(yōu)化:

高性能場景用 host 網(wǎng)絡(luò)模式:

docker run --network host my-app  # 直接使用主機網(wǎng)絡(luò)棧,減少 NAT 開銷
  • 跨主機通信推薦 overlay 網(wǎng)絡(luò)(配合 Kubernetes)。
  • 存儲優(yōu)化:

內(nèi)存文件系統(tǒng)加速臨時數(shù)據(jù):

docker run -v tmpfs:/app/tmp --tmpfs tmpfs:size=64m my-app  # 掛載 64MB 內(nèi)存盤
  • 生產(chǎn)環(huán)境用 NVMe 等高速存儲插件。
  • 鏡像緩存:

多階段構(gòu)建時,依賴層單獨分層:

FROM maven:3.8.6-openjdk-11 AS builder
COPY pom.xml .
RUN mvn dependency:go-offline  # 單獨分層,依賴不變時復(fù)用
COPY . .
RUN mvn package
  • 啟用 BuildKit 緩存:
DOCKER_BUILDKIT=1 docker build --cache-to type=registry,ref=my-registry/cache-image:latest .

七、Java 應(yīng)用容器化實戰(zhàn)

1. Spring Boot 應(yīng)用

(1)項目結(jié)構(gòu)

app/
├── src/
│ └── main/
│ ├── java/
│ └── resources/
├── pom.xml
└── Dockerfile

(2)pom.xml 配置

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    <plugin>
      <groupId>com.google.cloud.tools</groupId>
      <artifactId>jib-maven-plugin</artifactId>
      <version>3.4.3</version>
      <configuration>
        <to>
          <image>your-registry/app:${project.version}</image>
        </to>
        <container>
          <jvmFlags>
            <jvmFlag>-Xms128m</jvmFlag>
            <jvmFlag>-Xmx200m</jvmFlag>
            <jvmFlag>-XX:+UseZGC</jvmFlag>
          </jvmFlags>
        </container>
      </configuration>
    </plugin>
</plugins>
</build>

用 Jib 插件直接構(gòu)建鏡像,無需手動編寫 Dockerfile。

(3)啟動容器

docker run -d --name my-app -p 8080:8080 your-registry/app:1.0

2. 性能優(yōu)化案例

某電商訂單系統(tǒng),日均千萬請求,通過以下優(yōu)化:

  • 多階段構(gòu)建 + GraalVM Native Image:鏡像大小從 1.5GB 降至 150MB,啟動時間從 15 秒降至 1 秒。
  • 使用 ZGC 垃圾回收器,降低內(nèi)存停頓。
  • Docker Compose 管理多服務(wù),Kubernetes 實現(xiàn)自動擴縮容。

八、Docker 與 Kubernetes:從單機到集群

1. Kubernetes 是什么?

Kubernetes(K8s)是容器編排的 “操作系統(tǒng)”,幫你管理成百上千個容器。它能自動擴縮容、負載均衡、故障自愈。比如你部署一個服務(wù),K8s 會自動創(chuàng)建多個副本,某個掛了就自動重啟,流量自動分發(fā)到健康的實例。

2. 2025 年 Kubernetes 新趨勢

  • AI 調(diào)度器:用機器學(xué)習(xí)預(yù)測工作負載資源需求,資源利用率提升 30%+。比如電商大促時,自動為高流量服務(wù)分配更多資源。
  • 邊緣節(jié)點管理:支持邊緣計算場景,邊緣節(jié)點故障時自動遷移容器,保障物聯(lián)網(wǎng)、工業(yè)自動化等實時應(yīng)用的穩(wěn)定性。

3. 入門示例

  • 部署一個服務(wù):
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
    matchLabels:
      app: my-app
template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: your-registry/app:1.0
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
    app: my-app
ports:
  - port: 80
    targetPort: 8080
type: LoadBalancer # 暴露到公網(wǎng)

用 kubectl apply -f deploy.yml 部署,K8s 會自動創(chuàng)建 3 個容器,并通過負載均衡對外提供服務(wù)。

九、總結(jié):Docker 為什么值得學(xué)?

  • 環(huán)境一致性:徹底解決 “在我機器上能跑” 的問題。
  • 快速部署:秒級啟動,支持藍綠發(fā)布、灰度發(fā)布。
  • 資源高效:比虛擬機節(jié)省 70% 以上資源。
  • 生態(tài)豐富:與 CI/CD、Kubernetes、監(jiān)控工具無縫集成。

如果你是 Java 開發(fā)者,Docker 能讓你從繁瑣的環(huán)境配置中解放出來,專注業(yè)務(wù)代碼。而且,Docker 是云原生的基石,學(xué)會它,你就打開了 Kubernetes、微服務(wù)架構(gòu)的大門。

趕緊動手試試吧!把你的 Java 項目容器化,體驗 “一次構(gòu)建,處處運行” 的快感。如果遇到問題,記得用 docker --help 或 Docker 官方文檔 查資料。相信我,掌握 Docker 后,你會愛上這種 “打包即部署” 的開發(fā)方式!

責(zé)任編輯:武曉燕 來源: 石杉的架構(gòu)筆記
相關(guān)推薦

2020-12-18 09:45:33

DockerLinux命令

2022-08-12 15:58:34

Docker

2022-12-27 08:01:09

設(shè)計模式https://mp

2022-05-27 21:56:55

索引存儲MySQL 存儲引擎

2021-03-16 15:12:57

CompletableFuture機制java

2025-03-11 00:54:42

2020-12-02 10:20:33

Docker命令Linux

2024-08-12 12:25:25

SpringMVC開發(fā)

2021-02-24 07:38:50

Redis

2020-01-15 08:52:40

RabbitMQSpringMybatis

2023-01-05 17:55:39

分布式架構(gòu)

2020-11-09 07:34:49

JVM性能監(jiān)控

2020-10-21 10:02:16

架構(gòu)運維技術(shù)

2020-05-14 08:59:28

API網(wǎng)關(guān)性能

2024-09-09 08:36:36

Java操作遠程服務(wù)器

2020-09-01 14:17:03

WindowsDefender微軟

2025-07-04 02:00:00

2015-01-14 14:27:18

Docker容器鏡像

2022-02-22 08:25:51

typeScript泛型概念泛型使用

2020-11-09 09:03:35

高并發(fā)多線程ThreadLocal
點贊
收藏

51CTO技術(shù)棧公眾號