作为现代开发与运维的必备技能,Docker 的 "一次构建,处处运行" 理念,能帮你彻底摆脱环境配置的困扰。本文专为新手打造,从环境安装、核心操作到实战案例,带你一步步上手 Docker,轻松实现应用的容器化部署。
一、准备工作:Docker 环境安装
Docker 支持 Windows、macOS、Linux 三大主流系统,不同系统的安装流程略有差异,但核心步骤一致。
1. Windows 系统安装
-
前置条件:Windows 10 64 位专业版 / 企业版(需开启 Hyper-V),或使用 Docker Desktop 的 WSL 2 后端(推荐,性能更优)。
-
安装步骤
- 访问Docker 官网下载 Docker Desktop 安装包;
- 双击安装,勾选 "Use WSL 2 instead of Hyper-V"(若系统支持);
- 安装完成后启动 Docker Desktop,等待状态栏显示 "Docker Desktop running" 即代表安装成功。
2. macOS 系统安装
-
前置条件:macOS 10.15+ 版本。
-
安装步骤
- 下载 Docker Desktop for Mac 安装包;
- 将 Docker 拖入应用程序文件夹,双击启动;
- 首次启动需输入系统密码授权,等待启动完成即可。
3. Linux 系统安装(以 Ubuntu 为例)
Linux 系统建议通过命令行安装,步骤更简洁:
bash
bash
# 卸载旧版本(若有)
sudo apt-get remove docker docker-engine docker.io containerd runc
# 设置仓库
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/trusted.gpg.d
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg
sudo chmod a+r /etc/apt/trusted.gpg.d/docker.gpg
# 添加Docker仓库
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/trusted.gpg.d/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" 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-buildx-plugin docker-compose-plugin
# 验证安装
sudo docker run hello-world
运行hello-world容器后,若看到欢迎信息,说明安装成功。
4. 权限配置(Linux 专属)
Linux 下默认需要sudo才能执行 Docker 命令,为了方便操作,可将当前用户加入docker组:
bash
bash
sudo usermod -aG docker $USER
# 重启终端或执行以下命令生效
newgrp docker
二、Docker 核心操作:镜像与容器的玩转之道
Docker 的核心是镜像 和容器,掌握以下命令,就能完成 80% 的日常操作。
1. 镜像操作:获取与管理应用模板
镜像是容器的 "源代码",所有容器都基于镜像创建。
| 命令 | 作用 | 示例 |
|---|---|---|
docker pull <镜像名> |
从仓库拉取镜像 | docker pull ubuntu:22.04 |
docker images |
查看本地所有镜像 | docker images |
docker rmi <镜像ID/名称> |
删除本地镜像 | docker rmi ubuntu:22.04 |
docker search <关键词> |
搜索 Docker Hub 上的镜像 | docker search nginx |
小贴士 :指定镜像标签(如:22.04)可避免拉取最新版带来的兼容性问题。
2. 容器操作:启动与管理应用实例
容器是镜像的运行状态,支持启动、停止、重启等操作。
(1)启动容器:最常用的docker run命令
docker run是创建并启动容器的核心命令,参数丰富,重点掌握以下几个:
bash
bash
# 基本格式
docker run [参数] <镜像名> [命令]
# 示例1:启动一个交互式Ubuntu容器(可执行命令)
docker run -it ubuntu:22.04 /bin/bash
# -i:保持标准输入打开;-t:分配伪终端;/bin/bash:启动后执行的命令
# 示例2:启动一个后台运行的Nginx容器,并映射端口
docker run -d -p 8080:80 --name mynginx nginx
# -d:后台运行容器;-p:端口映射(主机8080端口→容器80端口);--name:给容器命名
启动后访问http://localhost:8080,就能看到 Nginx 的欢迎页面。
(2)容器状态管理
| 命令 | 作用 | 示例 |
|---|---|---|
docker ps |
查看正在运行的容器 | docker ps |
docker ps -a |
查看所有容器(包括停止的) | docker ps -a |
docker start <容器ID/名称> |
启动已停止的容器 | docker start mynginx |
docker stop <容器ID/名称> |
停止运行中的容器 | docker stop mynginx |
docker rm <容器ID/名称> |
删除容器 | docker rm mynginx |
docker exec -it <容器ID/名称> <命令> |
进入运行中的容器 | docker exec -it mynginx /bin/bash |
小贴士 :删除容器前必须先停止容器;使用docker rm -f <容器ID>可强制删除运行中的容器。
三、实战演练:亲手打包一个 Python 应用
光说不练假把式,我们以一个简单的 Python 脚本为例,演示如何编写 Dockerfile、构建镜像、运行容器。
1. 准备应用代码
创建一个项目文件夹docker-demo,里面包含两个文件:
-
app.py:Python 应用代码python
pythonfrom flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Hello Docker! This is a Python Flask App." if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) -
requirements.txt:依赖包列表txt
txtflask==2.3.3
2. 编写 Dockerfile
Dockerfile 是构建镜像的 "说明书",在项目根目录创建Dockerfile文件:
dockerfile
dockerfile
# 指定基础镜像:Python 3.9 官方镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件到工作目录
COPY requirements.txt .
# 安装依赖包
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 复制所有应用代码到工作目录
COPY . .
# 暴露容器端口(与应用端口一致)
EXPOSE 5000
# 容器启动命令
CMD ["python", "app.py"]
核心指令解释
FROM:指定基础镜像,所有镜像都必须基于一个基础镜像构建;WORKDIR:设置容器内的工作目录,后续命令都在该目录下执行;COPY:将本地文件复制到容器内;RUN:构建镜像时执行的命令(如安装依赖);EXPOSE:声明容器暴露的端口(仅为声明,不自动映射);CMD:容器启动时执行的命令(一个 Dockerfile 只能有一个CMD)。
3. 构建镜像
在项目根目录执行以下命令,构建名为flask-demo的镜像:
bash
bash
docker build -t flask-demo .
# -t:给镜像打标签;.:指定Dockerfile所在目录(当前目录)
构建完成后,执行docker images就能看到flask-demo镜像。
4. 运行容器
启动容器并映射端口,让外部能访问应用:
bash
bash
docker run -d -p 5000:5000 --name my-flask-app flask-demo
访问http://localhost:5000,就能看到Hello Docker! This is a Python Flask App.的输出,说明应用容器化成功!
四、新手避坑指南:常见问题与解决方法
- 端口映射失败 :提示
port is already allocated,原因是主机端口被占用。解决方法:更换主机端口(如-p 5001:5000),或停止占用该端口的进程。 - 容器启动后立即退出 :使用
-d后台启动容器时,若容器内没有持续运行的进程,会立即退出。解决方法:确保CMD命令启动的是持续运行的程序(如 Flask 的app.run)。 - 镜像构建缓慢:默认从 Docker Hub 拉取镜像,速度较慢。解决方法:配置国内镜像源(如阿里云、网易云镜像加速器)。
- 权限不足 :Linux 下执行 Docker 命令提示
permission denied,原因是当前用户不在docker组。解决方法:执行前文的权限配置命令。
五、进阶方向:Docker 学习路线
当你掌握基础操作后,可以向以下方向深入:
- Docker Compose :管理多容器应用(如前端 + 后端 + 数据库),通过
docker-compose.yml一键启动所有服务。 - 镜像优化:减少镜像体积(如使用多阶段构建、清理缓存文件),提升镜像安全性(如扫描镜像漏洞)。
- 容器编排:学习 Kubernetes(K8s),实现大规模容器集群的自动化部署、扩缩容与运维。