从零玩转 Docker:新手入门实操指南

作为现代开发与运维的必备技能,Docker 的 "一次构建,处处运行" 理念,能帮你彻底摆脱环境配置的困扰。本文专为新手打造,从环境安装、核心操作到实战案例,带你一步步上手 Docker,轻松实现应用的容器化部署。

一、准备工作:Docker 环境安装

Docker 支持 Windows、macOS、Linux 三大主流系统,不同系统的安装流程略有差异,但核心步骤一致。

1. Windows 系统安装

  • 前置条件:Windows 10 64 位专业版 / 企业版(需开启 Hyper-V),或使用 Docker Desktop 的 WSL 2 后端(推荐,性能更优)。

  • 安装步骤

    1. 访问Docker 官网下载 Docker Desktop 安装包;
    2. 双击安装,勾选 "Use WSL 2 instead of Hyper-V"(若系统支持);
    3. 安装完成后启动 Docker Desktop,等待状态栏显示 "Docker Desktop running" 即代表安装成功。

2. macOS 系统安装

  • 前置条件:macOS 10.15+ 版本。

  • 安装步骤

    1. 下载 Docker Desktop for Mac 安装包;
    2. 将 Docker 拖入应用程序文件夹,双击启动;
    3. 首次启动需输入系统密码授权,等待启动完成即可。

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

    python 复制代码
    from 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

    txt 复制代码
    flask==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.的输出,说明应用容器化成功!

四、新手避坑指南:常见问题与解决方法

  1. 端口映射失败 :提示port is already allocated,原因是主机端口被占用。解决方法:更换主机端口(如-p 5001:5000),或停止占用该端口的进程。
  2. 容器启动后立即退出 :使用-d后台启动容器时,若容器内没有持续运行的进程,会立即退出。解决方法:确保CMD命令启动的是持续运行的程序(如 Flask 的app.run)。
  3. 镜像构建缓慢:默认从 Docker Hub 拉取镜像,速度较慢。解决方法:配置国内镜像源(如阿里云、网易云镜像加速器)。
  4. 权限不足 :Linux 下执行 Docker 命令提示permission denied,原因是当前用户不在docker组。解决方法:执行前文的权限配置命令。

五、进阶方向:Docker 学习路线

当你掌握基础操作后,可以向以下方向深入:

  1. Docker Compose :管理多容器应用(如前端 + 后端 + 数据库),通过docker-compose.yml一键启动所有服务。
  2. 镜像优化:减少镜像体积(如使用多阶段构建、清理缓存文件),提升镜像安全性(如扫描镜像漏洞)。
  3. 容器编排:学习 Kubernetes(K8s),实现大规模容器集群的自动化部署、扩缩容与运维。
相关推荐
hk112415 天前
【Governance/Quantum】2026年度分布式治理脑裂与量子虚拟化基准索引 (Phase 3-Part 1)
分布式·网络安全·数据集·虚拟化·容器技术·系统治理
牛奶咖啡135 个月前
云计算核心技术之容器技术
云计算·容器技术·容器引擎·容器的主要应用场景·docker核心技术·容器编排工具·k8s的运行架构和重要概念
肥猪猪爸1 年前
Dockerfile进行详细的介绍
java·开发语言·docker·容器·容器技术
云计算练习生1 年前
揭开容器的面纱:容器技术全景概述
docker·云计算·虚拟化·容器技术
好看的hk2 年前
对于Docker和Podman的一点使用经验
容器技术
K8sCat2 年前
云原生 | Docker 和容器技术的核心概念及应用实践
docker·云原生·容器技术