核心说明:本教程面向新手,全程无复杂命令,每一步均附操作截图级说明,覆盖「Windows10/11、Mac、Linux」三大系统Docker安装,「Python/Java/前端」通用代码打包,「阿里云/腾讯云」服务器部署,同时整合常见报错解决,确保全程可复现。

第一部分:本地Docker安装(三大系统全覆盖)

前置要求:Windows需Win10/11专业版(家庭版需额外配置,下文附解决方法);Mac需macOS 10.15+;Linux优先Ubuntu 20.04/22.04(最适配Docker)。

1.1 Windows系统(Win10/11)安装

步骤1:开启系统必要功能(关键,否则Docker无法启动)

1. 以「管理员身份」打开「PowerShell」(按下Win+X,选择“Windows终端(管理员)”);

2. 输入以下两条命令,开启WSL2(Windows子系统,Docker依赖此功能),每条命令输入后按回车,等待执行完成:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

3. 重启电脑(必须重启,否则功能不生效);

4. 下载WSL2内核更新包(解决Docker启动报错),下载地址:WSL2内核更新包,下载后双击安装,一路下一步即可。

步骤2:下载并安装Docker Desktop

1. 下载地址(官网,国内可直接访问):Docker Desktop for Windows

2. 双击安装包,勾选「Use WSL 2 instead of Hyper-V」(重点,避免Hyper-V冲突),其余默认下一步,安装完成后点击「Close and restart」;

3. 重启后,Docker会自动启动,桌面右下角出现Docker图标(白色鲸鱼),等待图标停止闪烁(约1-2分钟),说明启动成功。

步骤3:验证安装(必做)

1. 打开PowerShell,输入命令:docker --version,若输出类似「Docker version 26.0.0, build 2ae903e」,说明版本正常;

2. 输入命令:docker run hello-world,若输出「Hello from Docker!」相关内容,说明Docker能正常运行(首次执行会自动下载hello-world镜像,耐心等待)。

Windows家庭版补充说明

若为Win10/11家庭版,无法直接开启Hyper-V,需先安装「Hyper-V激活工具」,百度搜索“Hyper-V家庭版激活”,下载后以管理员身份运行,激活后再按上述步骤操作即可。

1.2 Mac系统安装

步骤1:下载Docker Desktop

1. 下载地址:Docker Desktop for Mac,根据自己的芯片选择(Intel芯片选Intel版本,M1/M2/M3芯片选Apple Silicon版本);

2. 下载后双击.dmg文件,将Docker拖到「应用程序」文件夹中。

步骤2:启动并验证

1. 打开「应用程序」,找到Docker,双击启动,首次启动会提示“是否允许Docker使用系统权限”,点击「允许」;

2. 等待Docker启动(图标停止闪烁),打开「终端」,输入命令:docker --version,输出版本信息即正常;

3. 输入命令:docker run hello-world,输出正常说明安装成功。

1.3 Linux系统(Ubuntu 20.04/22.04)安装

Linux系统安装最简洁,全程终端命令操作,无需图形界面。

步骤1:更新系统软件包

sudo apt update
sudo apt upgrade -y

步骤2:安装Docker依赖

sudo apt install -y ca-certificates curl gnupg lsb-release

步骤3:添加Docker官方镜像源(国内加速,避免下载缓慢)

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/trusted.gpg.d/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

步骤4:安装Docker Engine

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

步骤5:启动Docker并设置开机自启

sudo systemctl start docker
sudo systemctl enable docker

步骤6:验证安装

docker --version
docker run hello-world

补充:若执行docker命令时提示“权限不足”,无需每次加sudo,执行以下命令(重启终端生效):

sudo usermod -aG docker $USER
newgrp docker

1.4 通用优化:配置国内镜像加速(必做,解决下载镜像缓慢)

Docker默认镜像源在国外,国内下载速度极慢,配置国内加速源后,下载速度可提升10倍以上。

Windows/Mac配置

1. 打开Docker Desktop,点击右上角「设置」(齿轮图标);

2. 找到「Docker Engine」,在右侧输入框中添加加速源,替换原有内容(注意格式正确,逗号分隔):

{
  "registry-mirrors": [
    "https://docker.mirrors.aliyun.com",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}

3. 点击「Apply & Restart」,重启Docker后生效。

Linux配置

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.mirrors.aliyun.com",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

验证加速是否生效:输入docker info,找到「Registry Mirrors」,显示配置的加速源即成功。

第二部分:本地代码打包成Docker镜像(通用教程,适配所有语言)

核心逻辑:编写Dockerfile(告诉Docker如何构建镜像)→ 构建镜像 → 测试镜像,以「Python Flask项目」为例(Java、前端项目仅需修改Dockerfile,下文附差异说明)。

2.1 准备工作(本地)

步骤1:整理代码目录

创建一个单独的项目文件夹(避免中文路径),结构如下(以Flask项目为例):

my_flask_project/  # 项目根目录
├── app.py         # 核心代码(Flask入口文件)
├── requirements.txt  # 项目依赖(如flask==2.0.1)
└── Dockerfile     # 重点,需手动创建,无后缀名

步骤2:编写核心文件(示例)

1. app.py(Flask简单示例,可替换为自己的代码):

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello Docker! 部署成功!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)  # 必须写host=0.0.0.0,否则容器外无法访问

2. requirements.txt(项目依赖,通过命令生成:pip freeze > requirements.txt):

flask==2.0.1

2.2 编写Dockerfile(核心中的核心)

打开项目根目录,新建「Dockerfile」文件(无后缀名,注意首字母大写),复制以下内容,每一行均附注释,可根据自己的项目修改:

# 1. 指定基础镜像(必须,选择对应语言的基础镜像,轻量化优先)
# Python项目用python:3.9-alpine(alpine版本体积小,适合部署)
FROM python:3.9-alpine

# 2. 设置工作目录(容器内的目录,后续命令均在此目录执行)
WORKDIR /app

# 3. 复制项目依赖文件到容器工作目录(先复制依赖,再复制代码,可利用Docker缓存,加快构建速度)
COPY requirements.txt .

# 4. 安装项目依赖(国内镜像加速,避免安装缓慢)
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

# 5. 复制项目所有代码到容器工作目录
COPY . .

# 6. 暴露端口(必须,和代码中port一致,仅声明端口,不实际映射)
EXPOSE 5000

# 7. 容器启动时执行的命令(启动项目,和代码中入口一致)
CMD ["python", "app.py"]

不同语言Dockerfile差异(关键补充)

1. Java项目(SpringBoot)

# 基础镜像(jdk1.8,轻量化)
FROM openjdk:8-jre-alpine
WORKDIR /app
# 复制打包好的jar包(需先本地用maven打包成jar,放在项目根目录)
COPY target/myproject.jar app.jar
EXPOSE 8080
# 启动jar包
CMD ["java", "-jar", "app.jar"]

2. 前端项目(Vue/React)

# 第一步:构建前端项目(依赖node环境)
FROM node:16-alpine as build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install --registry=https://registry.npm.taobao.org
COPY . .
RUN npm run build

# 第二步:部署(用nginx运行打包后的静态文件)
FROM nginx:alpine
# 复制构建好的静态文件到nginx目录
COPY --from=build /app/dist /usr/share/nginx/html
# 暴露80端口(nginx默认端口)
EXPOSE 80
# 启动nginx
CMD ["nginx", "-g", "daemon off;"]

2.3 构建Docker镜像(终端操作)

步骤1:进入项目根目录

打开终端(Windows用PowerShell,Mac/Linux用终端),cd到项目根目录(示例命令):

cd /Users/xxx/Documents/my_flask_project  # Mac/Linux
cd C:\Users\xxx\Documents\my_flask_project  # Windows

步骤2:执行构建命令

docker build -t my_project:v1.0 .

命令解释:

  • -t:给镜像打标签(命名),格式为「镜像名:版本号」,方便后续识别和部署;
  • my_project:v1.0:镜像名(可自定义,如flask-app、vue-app),版本号(可自定义,如v1.0、latest);
  • .:表示当前目录(Dockerfile所在目录,不可省略)。

注意:若构建过程卡死,大概率是基础镜像拉取失败,可先手动拉取基础镜像(如docker pull python:3.9-alpine),再重新执行构建命令,或检查国内镜像加速是否配置正确。

步骤3:验证镜像是否构建成功

输入命令:docker images,若列表中出现「my_project:v1.0」(对应自己的镜像名和版本),说明构建成功。

2.4 本地测试镜像(可选,确保镜像能正常运行)

执行命令,启动容器(映射端口,让本地能访问):

docker run -d -p 5000:5000 --name my_project_container my_project:v1.0

命令解释:

  • -d:后台运行容器(不占用终端);
  • -p 5000:5000:端口映射,格式为「本地端口:容器端口」,本地访问http://localhost:5000即可访问容器内的项目;
  • --name:给容器命名(可自定义,如my_container);
  • 最后面是镜像名:版本号(和构建时一致)。

测试:打开浏览器,访问http://localhost:5000,能看到「Hello Docker! 部署成功!」,说明镜像正常。

停止容器(测试完成后):docker stop my_project_container

第三部分:镜像部署到云服务器(阿里云/腾讯云通用)

核心逻辑:云服务器安装Docker → 本地镜像上传到服务器 → 服务器启动容器 → 配置安全组(让公网能访问)。

3.1 云服务器准备(以阿里云为例,腾讯云操作一致)

步骤1:购买云服务器(新手推荐配置)

  • 系统:Ubuntu 20.04 LTS(64位,最适配Docker,避免CentOS,新手操作更复杂);
  • 配置:1核2G(足够部署小型项目,新手入门性价比最高);
  • 带宽:1M(足够测试,后续可升级);
  • 购买后,记录服务器「公网IP」(后续连接和访问需要)。

步骤2:连接云服务器(终端操作)

1. 本地打开终端(Windows用PowerShell,Mac/Linux用终端);

2. 输入连接命令(替换为公网IP):

ssh root@你的公网IP

3. 首次连接会提示「Are you sure you want to continue connecting?」,输入「yes」,按回车;

4. 输入服务器密码(购买时设置的密码,输入时不显示,输完按回车),成功连接后,终端会显示「root@xxx:~#」(说明已进入服务器)。

补充:若连接失败,大概率是服务器22端口未开放,进入阿里云控制台 → 服务器实例 → 安全组 → 入方向,添加「22端口(SSH)」,允许所有IP访问。

3.2 云服务器安装Docker(和本地Linux安装一致,快速复用)

在连接好的服务器终端,依次执行以下命令(复制粘贴即可,每执行完一条按回车):

# 1. 更新软件包
sudo apt update
sudo apt upgrade -y

# 2. 安装依赖
sudo apt install -y ca-certificates curl gnupg lsb-release

# 3. 添加阿里云Docker镜像源
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/trusted.gpg.d/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. 安装Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

# 5. 启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 6. 配置国内镜像加速(和本地Linux一致)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.mirrors.aliyun.com",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

验证:输入docker --version,输出版本信息即安装成功。

3.3 本地镜像上传到云服务器(两种方法,新手推荐方法1)

方法1:镜像保存为文件,上传到服务器(简单,无需配置仓库)

步骤1:本地终端,将镜像保存为tar文件(进入项目根目录,执行命令):

docker save -o my_project.tar my_project:v1.0

解释:-o 表示输出文件,my_project.tar是保存后的文件名(可自定义),后面是镜像名:版本号。

步骤2:将tar文件上传到云服务器(本地终端执行,替换公网IP和文件路径):

# Windows/Mac/Linux通用命令
scp 本地tar文件路径 root@你的公网IP:/root

示例(Mac/Linux):scp /Users/xxx/Documents/my_flask_project/my_project.tar root@123.45.67.89:/root

示例(Windows):scp C:\Users\xxx\Documents\my_flask_project\my_project.tar root@123.45.67.89:/root

说明:上传时会提示输入服务器密码,输完按回车,等待上传完成(根据镜像大小,约1-5分钟)。

步骤3:服务器终端,加载上传的镜像(执行命令):

# 进入root目录(tar文件上传到了这里)
cd /root
# 加载镜像
docker load -i my_project.tar

验证:输入docker images,能看到本地构建的镜像(my_project:v1.0),说明上传成功。

方法2:通过阿里云镜像仓库上传(适合频繁更新,进阶操作)

1. 登录阿里云控制台,搜索「容器镜像服务」,进入后创建「命名空间」(自定义名称);

2. 创建「镜像仓库」,选择「本地仓库」,填写仓库名称(如my-project),完成创建;

3. 本地终端登录阿里云镜像仓库(替换自己的用户名和仓库地址):

docker login --username=你的阿里云用户名 registry.cn-你的地域.aliyuncs.com

4. 给本地镜像打标签(替换为自己的仓库地址):

docker tag my_project:v1.0 registry.cn-你的地域.aliyuncs.com/你的命名空间/my-project:v1.0

5. 推送镜像到阿里云仓库:

docker push registry.cn-你的地域.aliyuncs.com/你的命名空间/my-project:v1.0

6. 服务器终端拉取镜像(替换为自己的仓库地址):

docker pull registry.cn-你的地域.aliyuncs.com/你的命名空间/my-project:v1.0

3.4 云服务器启动容器(部署核心步骤)

在服务器终端,执行启动命令(和本地测试命令类似,端口映射一致):

docker run -d -p 5000:5000 --name my_project_container --restart=always my_project:v1.0

新增参数说明:--restart=always 表示服务器重启后,容器自动启动(避免服务器重启后项目失效)。

验证容器是否启动成功

docker ps

若列表中出现「my_project_container」,且「STATUS」为「Up X minutes」,说明容器正常运行。

补充:若容器启动后立即停止,执行docker logs my_project_container查看报错信息,大概率是端口占用或代码错误,针对性解决即可。

3.5 配置安全组(关键,否则公网无法访问)

云服务器默认关闭所有端口,需手动开放项目端口(如5000端口),步骤如下(阿里云为例):

  1. 登录阿里云控制台,找到「云服务器ECS」→ 选择自己的服务器实例;
  1. 点击左侧「安全组」→ 点击当前安全组的「配置规则」;
  1. 点击「入方向」→ 「添加规则」,填写以下信息:
            
  • 端口范围:5000/5000(和容器映射的端口一致);
  • 授权对象:0.0.0.0/0(允许所有公网IP访问,新手推荐,后续可根据需求限制IP);
  • 协议类型:TCP;
  • 描述:自定义(如my_project端口)。
  1. 点击「确定」,生效时间约1-2分钟。

腾讯云操作:控制台 → 云服务器 → 安全组 → 入方向规则 → 添加端口,参数和阿里云一致。

3.6 公网访问测试(最终验证)

打开本地浏览器,输入地址:http://你的公网IP:5000,若能看到「Hello Docker! 部署成功!」,说明整个部署流程完成!

第四部分:常见问题排查(新手必看,避坑指南)

1. Docker启动失败

  • Windows:未开启WSL2或未安装内核更新包,重新执行1.1步骤;若提示「Hermes相关冲突」,关闭Docker Desktop的「Experimental Features」。
  • Mac:芯片不兼容(如M芯片装了Intel版本),重新下载对应芯片的Docker Desktop。
  • Linux:权限不足,执行sudo systemctl start docker;或镜像源配置错误,重新配置国内加速。

2. 镜像构建失败

  • 报错「no such file or directory」:Dockerfile路径错误,确保终端在Dockerfile所在目录,或命令末尾加「.」。
  • 依赖安装缓慢/失败:未配置国内镜像,在Dockerfile的pip/npm命令中添加国内源(如Python用清华源,前端用淘宝源)。
  • 构建卡死:手动拉取基础镜像,或检查网络,重新执行构建命令。

3. 容器启动失败

  • 执行docker logs 容器名查看报错,常见原因:端口占用、代码错误、配置文件缺失。
  • 端口占用:执行netstat -tulpn | grep 端口号,找到占用端口的进程,执行kill -9 进程ID,再重启容器。

4. 公网无法访问

  • 安全组未开放端口:重新配置安全组,确保端口和容器映射端口一致,授权对象为0.0.0.0/0。
  • 容器端口映射错误:重新执行docker run命令,确保「-p 本地端口:容器端口」正确,代码中host=0.0.0.0。
  • 服务器防火墙拦截:执行sudo ufw allow 5000(开放5000端口),或关闭防火墙sudo ufw disable(新手推荐)。

5. 配置文件处理

若项目有配置文件(如数据库配置),不建议打包进镜像,可通过「挂载目录」方式挂载宿主机配置文件:

docker run -d -p 5000:5000 -v /root/config:/app/config --name my_project_container my_project:v1.0

解释:将服务器/root/config目录,挂载到容器/app/config目录,修改宿主机配置文件即可生效,无需重新构建镜像。

第五部分:总结

全程核心流程:本地Docker安装→编写Dockerfile→构建镜像→上传镜像到云服务器→启动容器→配置安全组→公网访问,所有步骤均为新手友好型,无复杂命令,只要严格按照教程操作,均可成功部署

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐