极简 Docker 入门笔记

极简 Docker 入门笔记

Docker 超全学习笔记(零基础完整版)

一、Docker 核心概念

1.1 Docker 容器

Docker 通过容器化技术,为应用程序封装独立、隔离的运行环境,每一个独立运行环境即为一个容器,运行容器的物理/虚拟主机称为宿主机

容器 VS 虚拟机(核心区别)

  • Docker容器:共享宿主机系统内核,仅打包应用与依赖,轻量、秒启动、资源占用极低

  • 虚拟机:搭载完整独立操作系统内核,体积大、启动慢、资源消耗高

1.2 Docker 镜像

镜像可理解为封装好环境与代码的压缩包/模板,是只读文件。

容器是镜像运行后生成的可运行实例:

  • 一个镜像可批量创建多个完全一致的容器

  • 可修改运行中的容器,重新打包生成自定义镜像

  • 镜像可分享迁移,保证所有设备运行环境完全统一

1.3 Docker 仓库

用于存储、管理、分享 Docker 镜像的远程服务器。开发者可上传自定义镜像,也可拉取公共镜像直接使用。

官方仓库:https://hub.docker.com

国内加速镜像站(官方无法访问时使用):https://docker.fxxk.dedyn.io/

二、Docker 技术原理

Docker 基于 Linux 两大核心原生能力实现容器虚拟化,无需模拟完整系统:

2.1 Cgroups(资源限制)

限制、隔离容器进程的硬件资源,可单独配置每个容器的CPU、内存、网络带宽上限,避免单个容器占用过高资源,影响宿主机和其他容器运行。

2.2 Namespaces(资源隔离)

隔离容器的资源视图,让容器仅能看到自身的进程、端口、文件目录、网络配置,完全隔离宿主机与其他容器资源。

本质:容器是被隔离、受限的特殊进程,内部看似独立系统,实际共享宿主机内核。

三、Docker 安装教程

Docker 原生基于 Linux 内核,Windows / Mac 需依赖 WSL2 虚拟 Linux 子系统,Linux 系统为最佳运行环境。

3.1 Linux 系统安装

  • RedHat / CentOS 系:yum install docker

  • Alpine 系统:apk add docker

3.2 Windows 系统安装(WSL2 + Docker Desktop)

1. 开启系统功能

打开「Windows 功能」,勾选:

  • 虚拟机平台(Virtual Machine Platform)

  • 适用于 Linux 的 Windows 子系统

勾选后重启电脑生效。

2. 安装配置 WSL2

管理员身份打开命令提示符 / PowerShell,执行:

wsl --set-default-version 2 wsl --update --web-download

3. 安装 Docker Desktop

下载地址:第三方适配安装包,选择对应系统版本安装。

验证安装:

docker --version

重要注意事项:Docker Desktop 必须后台运行,否则会出现管道报错,所有 docker 命令失效。

报错示例(Docker 未启动):

error during connect: Get "http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.51/containers/json": open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.

3.3 Mac 系统安装

直接从 Docker 官网下载对应芯片(Intel/ARM)的安装包,傻瓜式安装即可。

四、Docker 镜像操作

4.1 拉取镜像(docker pull)

镜像地址完整结构

仓库地址/命名空间/镜像名:版本标签

  • 仓库地址(registry):官方仓库可省略,默认 docker.io

  • 命名空间(library):官方公共镜像命名空间,可省略

  • 镜像名:需要拉取的服务名称(nginx、mysql、python等)

  • 版本标签:latest 为最新版,可指定具体版本

常用拉取命令

# 完整写法 docker pull docker.io/library/nginx:latest

# 简化写法(日常使用) docker pull nginx

# 拉取私有仓库镜像 docker pull docker.n8n.io/n8nio/n8n

4.2 国内镜像加速配置(解决拉取超时)

官方镜像源国内访问极慢,推荐稳定加速源:

"registry-mirrors": [ "https://docker.1ms.run" ]

4.3 指定架构拉取镜像

Mac M系列(ARM架构)可兼容x86镜像,通过QEMU模拟,存在轻微性能损耗:

docker pull --platform=xxx nginx

4.4 镜像查看与删除

# 查看本地所有镜像 docker images # 删除镜像(ID/镜像名均可) docker rmi [镜像标识]

五、Docker 容器操作(核心常用)

5.1 创建并运行容器(docker run)

自动判断本地是否有镜像,无镜像则自动 pull 拉取。

# 基础运行 docker run nginx

常用参数详解

# 1. 后台运行(不阻塞终端)-d docker run -d nginx

# 2. 自定义容器名称 --name docker run -d --name kz_nginx nginx

# 3. 端口映射 -p 宿主机端口:容器端口 docker run -d -p 8080:80 nginx

# 4. 目录挂载(数据持久化)-v 本地路径:容器路径 docker run -d -p 8080:80 -v ./:/usr/share/nginx/html nginx

# 5. 传入环境变量 -e(数据库常用) docker run -d -p 27017:27017 \ -e MONGO_INITDB_ROOT_USERNAME=tech \ -e MONGO_INITDB_ROOT_PASSWORD=dbkuaizi \ mongo # 6. 交互式进入容器 -it docker run -it alpine

# 7. 退出自动删除容器 --rm docker run -it --rm alpine

# 8. 容器重启策略 --restart # always:无论崩溃/断电,自动重启

# 9. unless-stopped:手动停止后不重启 docker run -d --restart always nginx

5.2 仅创建不启动容器

docker create nginx

5.3 查看容器列表

# 查看正在运行的容器 docker ps

# 查看所有容器(含已停止) docker ps -a

列表字段说明:容器ID、镜像来源、创建时间、运行状态、端口、容器名称

5.4 启停 / 删除容器

# 启动容器 docker start [容器标识]

# 停止容器 docker stop [容器标识]

# 删除停止的容器 docker rm [容器标识] # 强制删除运行中的容器 docker rm -f [容器标识]

5.5 容器内部操作

# 进入容器终端 docker exec -it [容器标识] bash

# 在容器外执行容器内部命令 docker exec alpine ps -ef

# 查看容器详细信息(JSON格式) docker inspect [容器标识]

# 查看容器日志 docker logs [容器标识]

# 实时滚动查看日志 docker logs -f [容器标识]

注意:官方极简镜像内部无多余命令,需自行安装工具。

六、Docker 数据卷(Volume)

容器数据默认随容器删除而清空,数据卷用于持久化存储,实现数据与容器解耦,支持容器间数据共享、备份恢复。

# 创建数据卷 docker volume create [卷名称]

# 查看卷详情 docker volume inspect nginx_html

# 查看所有数据卷 docker volume list

# 删除指定数据卷 docker volume rm nginx_html

# 清理所有未使用的卷 docker volume prune

七、Dockerfile 自定义构建镜像

Dockerfile 是构建自定义镜像的配置文件,定义镜像环境、依赖、启动规则。

7.1 完整 Dockerfile 示例(Python 项目)

# 基础镜像 FROM python:3.13-slim

# 设置工作目录 WORKDIR /app

# 拷贝项目所有文件到容器 COPY . .

# 安装项目依赖 RUN pip install -r requirements.txt

# 声明对外端口 EXPOSE 8000

# 容器启动命令 CMD ["python3","main.py"]

7.2 配套项目文件

main.py

from fastapi import FastAPI import uvicorn app = FastAPI() @app.get("/") def read_root(): return {"hello":"dbkuaizi"} if __name__ == "__main__": uvicorn.run(app,host='0.0.0.0',port=8000)

requirements.txt

fastapi uvicorn

7.3 构建并运行自定义镜像

# 构建镜像 -t 镜像名:版本 docker build -t docker_test . # 启动自定义容器 docker run -d -p 8000:8000 docker_test

八、Docker 网络模式

8.1 Bridge 桥接模式(默认)

容器独立子网(172.17.x.x),与宿主机网络隔离。同一自定义网络下的容器可通过容器名互相通信,无需IP。

# 创建自定义网络 docker network create network1 # 容器指定网络 docker run -d --network network1 nginx

8.2 Host 主机模式

容器直接共享宿主机网络,无需端口映射,直接使用宿主机端口对外提供服务。

docker run -d --network host nginx

8.3 None 无网络模式

关闭容器所有网络权限,完全隔离,仅本地运行。

8.4 网络管理命令

# 查看所有网络 docker network list # 删除自定义网络 docker network rm network1

默认 bridge、host、none 网络为系统内置,不可删除。

九、Docker Compose 多容器编排

9.1 核心作用

通过docker-compose.yml配置文件,一键管理多个关联容器(前端、后端、数据库、缓存),解决多容器启动、依赖、网络配置繁琐问题。

优势:服务拆分独立、故障不连锁、支持精准扩容、团队环境统一。

9.2 完整 Compose 示例(MongoDB+可视化)

services: my_mongodb: image: mongo environment: MONGO_INITDB_ROOT_USERNAME: name MONGO_INITDB_ROOT_PASSWORD: pass volumes: - /my/datadir:/data/db my_mongodb_express: image: mongo-express ports: - 8081:8081 environment: ME_CONFIG_MONGODB_SERVER: my_mongodb ME_CONFIG_MONGODB_ADMINUSERNAME: name ME_CONFIG_MONGODB_ADMINPASSWORD: pass depends_on: - my_mongodb # 依赖前置服务,自动控制启动顺序

9.3 Compose 常用命令

# 后台启动所有服务 docker compose up -d

# 指定配置文件启动 docker compose -f xxx.yml up -d

# 停止并删除容器、网络 docker compose down

# 仅停止服务,不删除资源 docker compose stop

# 启动已停止的compose服务 docker compose start