🎉 Docker 簡介和安裝 - Docker 快速入門
Docker 簡介
Docker是一個開源的平臺,用于開發、交付和運行應用程序。它能夠在Windows,macOS,Linux計算機上運行,并將某一應用程序及其依賴項打包至一個容器中,這些容器可以在任何支持Docker的環境中運行。容器彼此隔離,但可以通過特定的通道相互傳遞信息。
Docker提供了一個輕量級的虛擬化解決方案。由于運行在同一計算機上的所有容器共享同一個操作系統內核,避免了啟動與維護虛擬機的開銷。因此相比于傳統的虛擬機,Docker容器更加輕便、快速、容易部署。使用Docker,開發者可以避免在兩臺計算機上運行效果不一致的問題,容器提供了一致的行為,進而使得應用程序在不同環境的計算機上有相同的運行效果。
Docker 是一個應用打包、分發、部署的工具。
特性 | 普通虛擬機 | Docker |
跨平臺 | 通常只能在桌面級系統運行,例如 Windows/Mac,無法在不帶圖形界面的服務器上運行 | 支持的系統非常多,各類 windows 和 Linux 都支持 |
性能 | 性能損耗大,內存占用高,因為是把整個完整系統都虛擬出來了 | 性能好,只虛擬軟件所需運行環境,最大化減少沒用的配置 |
自動化 | 需要手動安裝所有東西 | 一個命令就可以自動部署好所需環境 |
穩定性 | 穩定性不高,不同系統差異大 | 穩定性好,不同系統都一樣部署方式 |
Docker 部署的優勢
- 輕量級:基于操作系統層的虛擬化,容器共享宿主內核,啟動秒級;
- 可移植:構建一次的鏡像可運行在任何支持 Docker 的平臺;
- 標準化打包:通過 Dockerfile 定義構建流程,鏡像具備一致性;
- 資源隔離:利用 Linux 的 Namespace 和 Cgroups 實現資源隔離與限制;
- 鏡像復用與層級緩存:提高構建效率與存儲復用率。
Docker 通常用來做什么
- 應用分發、部署,方便傳播給他人安裝。特別是開源軟件和提供私有部署的應用
- 快速安裝測試/學習軟件,用完就丟(類似小程序),不把時間浪費在安裝軟件上。例如 Redis / MongoDB / ElasticSearch / ELK
- 多個版本軟件共存,不污染系統,例如 Python2、Python3,Redis4.0,Redis5.0
- Windows 上體驗/學習各種 Linux 系統
Docker的安裝(CentOS安裝)
1、安裝yum 包管理工具安裝一些必要的工具和庫
命令:
yum install -y yum-utils device-mapper-persistent-data lvm2
如果執行報錯:
解決辦法:
1、執行命令:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
追加域名:
DNS1=114.114.114.114
DNS2=8.8.8.8
2、備份鏡像源
命令:
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
3、更新國內鏡像源
命令(兩者使用一個):
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
4、執行以下命令
yum clean all #清理緩存
yum makecache #設置緩存
5、然后再執行 使用 yum 包管理工具安裝一些必要的工具和庫。
命令:
yum install -y yum-utils device-mapper-persistent-data lvm2
2、添加阿里云的 Docker 軟件倉庫(鏡像源)
命令:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
3、yum 安裝 Docker 相關的核心軟件包。
命令:
yum install docker-ce docker-ce-cli containerd.io -y
4、啟動 Docker 服務。
命令:
systemctl start docker
5、設置 Docker 服務開機自動啟動。
systemctl enable docker
6、查看 Docker 版本信息。
命令:
docker version
7、Docker常用命令
docker ps?查看當前運行中的容器
docker images?查看鏡像列表
docker rm container-id? 刪除指定 id 的容器
docker stop/start container-id? 停止/啟動指定 id 的容器
docker rmi image-id? 刪除指定 id 的鏡像
docker volume ls? 查看 volume 列表
docker network ls? 查看網絡列表
docker ps -a 查看所有 Docker 容器的狀態(包括停止的容器)。
CONTAINER ID:容器的唯一標識符。
IMAGE:容器所基于的鏡像。
COMMAND:容器啟動時執行的命令。
CREATED:容器的創建時間。
STATUS:容器的當前狀態(運行中或已停止)。
PORTS:容器暴露的端口和主機的端口映射關系。
NAMES:容器的名稱,用于容器的引用和管理。
8、修改Docker鏡像源(國外鏡像源被屏蔽)
通過 tee 命令將指定的 JSON 配置寫入到 Docker 的配置文件 /etc/docker/daemon.json 中,用于配置 Docker 使用一個自定義的鏡像加速器。
鏡像源名稱 | 鏡像源地址 | 特點 | 適用場景 |
阿里云 | https://registry.cn-hangzhou.aliyuncs.com | 穩定性好,速度快 | 企業/個人通用 |
騰訊云 | https://ccr.ccs.tencentyun.com | 企業級,可靠性高 | 騰訊云用戶/企業環境 |
中科大 | https://docker.mirrors.ustc.edu.cn | 教育網友好,免費 | 教育網/學術機構 |
網易 | https://hub-mirror.c.163.com | 老牌鏡像源 | 個人開發/測試環境 |
百度云 | https://mirror.baidubce.com | 國內訪問快 | 百度云用戶/國內項目 |
華為云 | https://swr.cn-north-1.myhuaweicloud.com | 企業級服務 | 華為云用戶/生產環境 |
DaoCloud | https://daocloud.io | 專業容器服務 | 容器化專業需求 |
時速云 | https://hub.tenxcloud.com | 容器云服務優化 | 企業級容器平臺 |
七牛云 | https://reg-mirror.qiniu.com | CDN加速 | 需要高速下載的場景 |
毫秒鏡像 - 告別蝸牛速度!國內極速拉取 | 國內專業的鏡像倉庫解決方案商 | 1ms.run
1、在根目錄下執行下面命令:
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ccr.ccs.tencentyun.com",
"https://docker.1ms.run",
"https://daocloud.io"]
}
EOF
2、重新加載 systemd 的配置文件。
命令:
systemctl daemon-reload
3、重新啟動 Docker 服務。
systemctl restart docker
Docker 架構
Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。
- Docker 客戶端(Client) : Docker 客戶端通過命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 與 Docker 的守護進程通信。
- Docker 主機(Host) :一個物理或者虛擬的機器用于執行 Docker 守護進程和容器。
Docker 包括三個基本概念:
- 鏡像(Image):Docker 鏡像(Image),就相當于是一個 root 文件系統。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 文件系統。
- 容器(Container):鏡像(Image)和容器(Container)的關系,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。
- 倉庫(Repository):倉庫可看著一個代碼控制中心,用來保存鏡像。
Dockerfile
Dockerfile 是一個文本文件,其中包含了若干個命令,用戶可以調用這些命令來構建一個鏡像。通過這個文件,開發者能夠定義應用程序運行環境的所有細節,從基礎操作系統的選擇到需要安裝的軟件包,再到啟動服務所需的配置。
Dockerfile 不僅是自動化構建的基礎,也是實現持續集成和持續部署(CI/CD)流程的關鍵組成部分。它使得開發團隊能夠在一致的環境中開發、測試和部署應用,從而減少“在我機器上能跑”的問題。此外,Dockerfile 促進了微服務架構的發展,讓每個服務都可以獨立打包成容器,易于管理和擴展。
一個典型的Dockerfile包含以下部分:
- 基礎鏡像指定
- 維護者信息(可選)
- 鏡像構建指令
- 容器啟動時執行的命令
常用指令詳解
1. FROM
指定基礎鏡像,必須為第一條指令
FROM centos:7 # 使用CentOS 7
# 或者
FROM centos:8 # 使用CentOS 8
# 或者
FROM centos:stream8 # 使用CentOS Stream 8
2. RUN
執行命令并創建新的鏡像層,常用于安裝軟件包
# 安裝必要的軟件包
RUN yum -y update && \yum -y install epel-release && \yum -y install \nginx \python3 \git \&& \yum clean all && \rm -rf /var/cache/yum
3. COPY
將文件從構建上下文復制到鏡像中
COPY ./app /app
COPY requirements.txt /tmp/
4. ADD
類似COPY,但功能更多(支持URL和解壓)
ADD https://example.com/file.tar.gz /tmp/
ADD file.tar.gz /tmp/ # 會自動解壓
5. CMD
指定容器啟動時默認執行的命令
CMD ["python", "app.py"]
CMD ["/bin/bash"]
6. ENTRYPOINT
配置容器啟動時運行的命令,與CMD配合使用
ENTRYPOINT ["/usr/sbin/nginx"]
CMD ["-g", "daemon off;"]
7. ENV
設置環境變量
ENV PYTHON_VERSION=3.8
ENV PATH=/usr/local/bin:$PATH
8. ARG
定義構建時的變量
ARG VERSION=latest
FROM busybox:$VERSION
9. WORKDIR
設置工作目錄
WORKDIR /app
10. EXPOSE
聲明容器運行時監聽的端口
EXPOSE 80
EXPOSE 443
11. VOLUME
創建掛載點
VOLUME /data
12. USER
指定運行時的用戶
USER nobody
Dockerfile部署SpringBoot+VUE項目
SpringBoot項目部署
Dockerfile
部署 template-admin.jar
的 完整步驟指南
準備文件結構
將Dockerfile文件和template-admin.jar放到同一目錄下
# 使用 CentOS 7 作為基礎鏡像
FROM centos:7# 維護者信息
LABEL maintainer="yourname@example.com"# 修復鏡像源步驟
RUN mkdir /etc/yum.repos.d/backup && \mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/backup/ && \curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \sed -i 's/gpgcheck=1/gpgcheck=0/g' /etc/yum.repos.d/CentOS-Base.repo && \yum clean all && \yum makecache# 安裝OpenJDK 8和基礎工具
RUN yum update -y && \yum install -y \java-1.8.0-openjdk-devel \wget \unzip \&& \yum clean all && \rm -rf /var/cache/yum# 設置Java環境變量
ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk
ENV PATH $PATH:$JAVA_HOME/bin# 創建應用目錄
RUN mkdir -p /app
WORKDIR /app# 復制JAR文件
COPY template-admin.jar /app/app.jar# 創建非root用戶運行
RUN groupadd -r appuser && \useradd -r -g appuser appuser && \chown -R appuser:appuser /app
USER appuser# 暴露端口
EXPOSE 8080# 健康檢查
#HEALTHCHECK --interval=30s --timeout=3s \
# CMD curl -f http://localhost:8080/actuator/health || exit 1# 啟動命令
ENTRYPOINT ["java", "-server", "-Xms256m", "-Xmx512m", "-XX:+UseG1GC", "-jar", "app.jar"]
構建 Docker 鏡像
在包含 Dockerfile
的目錄下執行:
docker build -t template-admin:1.0 .
-t template-admin:1.0
:給鏡像打標簽(名稱:版本)- 末尾的
.
表示使用當前目錄的 Dockerfile
# 宿主機創建目錄
mkdir -p /data/ruoyi/logs && chmod -R 777 /data/ruoyi/logs# 啟動容器
docker run -d \-p 8080:8080 \-v /data/ruoyi/logs:/home/ruoyi/logs \--name myapp \template-admin:1.0
VUE項目部署
Dockerfile文件
dist是打包后的文件
# 直接使用 Nginx 作為基礎鏡像
FROM nginx:alpine# 刪除默認配置(可選)
RUN rm /etc/nginx/conf.d/default.conf# 復制靜態文件
COPY dist /usr/share/nginx/html# 復制自定義 Nginx 配置
COPY nginx.conf /etc/nginx/conf.d/# 暴露端口
EXPOSE 80# 啟動 Nginx
CMD ["nginx", "-g", "daemon off;"]
server {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html;try_files $uri $uri/ /index.html; # 支持 Vue 路由 history 模式}# 處理 API 代理(解決跨域)location /prod-api/ {proxy_pass http://192.168.1.167:8080/; # 替換為你的后端地址proxy_set_header Host $host;}
}
# 構建鏡像
docker build -t vue2-app .# 運行容器
docker run -d -p 80:80 --name vue2-container vue2-app
Docker-Compose
Docker-Compose 是 Docker 官方提供的用于定義和運行多容器 Docker 應用程序的工具。它允許您使用 YAML 文件來配置應用程序的服務、網絡和卷等,然后通過一個簡單的命令就能創建并啟動所有服務。
Docker-Compose 核心概念
- 服務 (Service):一個容器化的應用,可以包含一個或多個相同鏡像的容器實例
- 項目 (Project):由一組關聯服務組成的完整應用,默認使用所在目錄名作為項目名
- 卷 (Volume):用于數據持久化
- 網絡 (Network):定義服務間的通信方式
Docker-Compose 文件結構
典型的 docker-compose.yml 文件包含以下部分:
version
:指定 compose 文件格式版本services
:定義各個服務networks
:定義網絡volumes
:定義卷
Docker-Compose安裝
使用 pip 安裝(需先安裝 pip)
# 安裝編譯工具鏈
sudo yum install -y gcc python3-devel openssl-devel libffi-devel make
sudo yum install rust cargo
sudo yum install python3-devel gcc openssl-devel libffi-devel
pip3 install --upgrade pip setuptools wheel
# 安裝 pip(如未安裝)
sudo yum install python3-pip -y # CentOS/RHEL
sudo apt install python3-pip -y # Ubuntu/Debian# 使用清華源安裝
sudo pip3 install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple# 驗證安裝
docker-compose --version
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composesudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-composedocker-compose --version
Docker-Compose 基本命令
# 1. 啟動服務(構建鏡像、創建容器、啟動服務)
# -d 表示在后臺運行(detached mode)
docker-compose up -d# 2. 停止并移除容器、網絡、卷和鏡像
# --volumes 同時刪除在 compose 文件中聲明的命名卷
# --rmi all 刪除所有服務使用的鏡像
docker-compose down --volumes --rmi all# 3. 列出項目中的所有容器
# 顯示狀態、端口映射等信息
docker-compose ps# 4. 查看服務日志
# -f 持續跟蹤日志輸出(類似 tail -f)
# service_name 可指定查看特定服務的日志
docker-compose logs -f service_name# 5. 構建或重新構建服務鏡像
# --no-cache 構建時不使用緩存
docker-compose build --no-cache# 6. 在運行中的容器中執行命令
# service_name 服務名稱
# command 要執行的命令(如 /bin/bash)
docker-compose exec service_name command# 7. 啟動已存在的服務容器
docker-compose start# 8. 停止運行中的服務容器(不刪除)
docker-compose stop# 9. 重啟服務容器
docker-compose restart# 10. 暫停服務容器
docker-compose pause# 11. 恢復暫停的服務容器
docker-compose unpause# 12. 拉取服務依賴的鏡像
docker-compose pull# 13. 推送服務鏡像到倉庫
docker-compose push# 14. 運行一次性命令(會啟動新容器執行命令后退出)
# 常用于數據庫遷移等操作
docker-compose run service_name command# 15. 查看服務配置
# 顯示最終生效的配置(合并了環境變量等)
docker-compose config# 16. 查看鏡像信息
docker-compose images# 17. 刪除已停止的服務容器
docker-compose rm# 18. 查看容器內運行的進程
docker-compose top# 19. 強制重新創建容器(即使配置未更改)
# --no-deps 不重新創建依賴的服務
docker-compose up --force-recreate --no-deps service_name# 20. 縮放服務實例數量
# 注意:要在 compose 文件中移除 ports 配置才能縮放
docker-compose up --scale service_name=3 -d# 21. 查看網絡信息
docker-compose network ls# 22. 查看卷信息
docker-compose volume ls# 23. 檢查服務運行狀態
docker-compose port service_name port_number# 24. 復制文件從容器到主機
docker-compose cp container_name:/path/to/file /host/path# 25. 使用不同的 compose 文件
# -f 指定 compose 文件(默認使用 docker-compose.yml)
# -p 指定項目名稱(默認使用目錄名)
docker-compose -f docker-compose.prod.yml -p my_project up -d
Docker-Compose 部署 SpringBoot + Vue 完整指南
project/
├── backend/ # SpringBoot 后端
│ ├── Dockerfile # 后端Dockerfile
│ └── template-admin.jar # SpringBoot jar包
├── frontend/ # Vue 前端
│ ├── Dockerfile # 前端Dockerfile
│ ├── dist/ # Vue打包后的靜態文件
│ └── nginx.conf # Nginx配置文件
└── docker-compose.yml # 主配置文件
version: '3.8'services:backend:build: ./backendcontainer_name: template-adminrestart: alwaysports:- "8080:8080"volumes:- /data/ruoyi/logs:/home/ruoyi/logsenvironment:- TZ=Asia/Shanghai# - SPRING_PROFILES_ACTIVE=prod# healthcheck:# test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]# interval: 30s# timeout: 10s# retries: 3networks: # 添加這部分- app-networkfrontend:build: ./frontendcontainer_name: template-uirestart: alwaysports:- "80:80"depends_on:- backendenvironment:- TZ=Asia/Shanghainetworks: # 添加這部分- app-networkvolumes:ruoyi-logs:driver: localnetworks:app-network:driver: bridge
1、 準備工作
確保服務器已安裝 Docker 和 Docker-Compose
docker --version
docker-compose --version
創建日志目錄并設置權限
sudo mkdir -p /data/ruoyi/logs
sudo chmod -R 777 /data/ruoyi/logs
2、 構建并啟動服務
進入項目目錄
cd /path/to/project
構建并啟動所有服務
docker-compose up -d --build
查看服務狀態
docker-compose ps
查看日志
docker-compose logs -f
3、 常用管理命令
停止服務
docker-compose down
重啟服務
docker-compose restart
更新前端(重新構建并部署)
docker-compose up -d --build frontend
更新后端(重新構建并部署)
docker-compose up -d --build backend
查看資源使用情況
docker-compose stats