把应用封进一个
可搬运的世界。

拖动剖面,拆开镜像层。启动容器,观察端口、进程与持久化数据如何各司其职。

my_app:latestIMAGE / IDLE
node:18-alpine28 MB
node_modules64 MB
server.js12 KB
CMD + EXPOSE3000/tcp
PID 1
HEALTH STOPPED PORT - MEMORY 0 MB
IMAGE

只读模板,按层复用。

Dockerfile 的每条指令生成一层。没有变化的依赖层可以直接命中缓存。

CONTAINER

镜像的运行实例。

共享宿主机内核,却拥有自己的文件系统、网络与进程空间。

ENGINE

构建、运行、连接。

dockerd、REST API 与 CLI 共同管理镜像、容器、网络和卷。

隔离,不必搬进一整台机器。

容器共享内核,所以启动更快、体积更小、密度更高。

APP
APP
APP
SHARED OS KERNEL
HOST
APPGUEST OS
APPGUEST OS
HYPERVISOR + HOST
启动 秒级体积 MB性能 接近原生隔离 进程级

六个动作,掌握生命周期。

点击命令,把同一个容器从不存在推进到运行、观察、进入与删除。

docker run -d -p 8080:80 --name my_nginx nginx

Creating writable layer...
Mapping 0.0.0.0:8080 -> 80/tcp
Container my_nginx is running.

网络让服务互相找到。

WEB :3000DB :5432
docker network create my-network

卷让数据活得更久。

CONTAINERapp-data
docker run -v app-data:/data my-image

让最终镜像只带走运行所需。

FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:18-alpine
USER node
COPY --from=builder /app/dist ./dist
EXPOSE 3000
CMD ["node", "dist/server.js"]
多阶段构建固定版本非 root 用户.dockerignore健康检查

Complete article

完整原文

文字、链接、图片、表格与代码均保留 开始阅读

什么是 Docker?

Docker 是一个开源的容器化平台,用于开发、部署和运行应用程序。它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中,然后可以在任何支持 Docker 的环境中运行。

Docker 与虚拟机的区别

特性Docker 容器虚拟机 (VM)
隔离进程级隔离完整的硬件级隔离
启动秒级启动分钟级启动
性能接近原生性能有性能损耗
资源轻量,共享宿主OS内核重量级,每个VM有完整OS
大小通常为MB级别通常为GB级别
移植高,跨平台兼容性好相对较低

核心概念

1. 容器 (Container)

2. 镜像 (Image)

3. Docker 引擎

Docker 安装

在 Windows 上安装 Docker

Docker 基本命令

容器生命周期管理

docker run - 创建并启动一个新容器

BASH
docker run [选项] 镜像名 [命令]
BASH
docker run -d -p 8080:80 --name my_nginx nginx

docker stop - 停止运行中的容器

BASH
docker stop 容器ID或名称
BASH
docker stop my_nginx

docker rm - 删除已停止的容器

BASH
docker rm 容器ID或名称
BASH
docker rm $(docker ps -aq)

容器查询与操作

docker ps - 查看容器列表

BASH
docker ps [选项]
BASH
docker ps -a

docker logs - 查看容器日志

BASH
docker logs 容器ID或名称
BASH
docker logs -f my_nginx

docker exec - 在运行中的容器内执行命令

BASH
docker exec [选项] 容器ID或名称 命令
BASH
docker exec -it my_nginx /bin/bash

docker inspect - 查看容器/镜像的详细信息(JSON 格式)

BASH
docker inspect 容器ID/镜像名
BASH
docker inspect my_nginx | grep IPAddress # 查看容器IP

镜像管理

docker images - 列出本地镜像

BASH
docker images [选项]
BASH
docker images

docker rmi - 删除本地镜像

BASH
docker rmi 镜像ID或名称
BASH
docker rmi $(docker images -aq)

docker pull - 下载镜像

BASH
docker pull 镜像名:标签

docker build - 通过 Dockerfile 构建镜像

BASH
docker build -t 镜像名:标签 Dockerfile路径

总结

命令作用
docker run创建并启动容器
docker ps查看容器列表
docker stop停止容器
docker rm删除容器
docker images列出镜像
docker rmi删除镜像
docker logs查看容器日志
docker exec进入运行中的容器
docker inspect查看容器/镜像的详细信息

网络

换源

最推荐的方式

JSON
"registry-mirrors": ["http://docker.m.daocloud.io"]

Docker代理

研究一个小时未果,放弃。

  1. 打开 Docker Desktop
  2. 点击右上角的设置齿轮图标
  3. 选择 “Resources” → “Proxies”
  4. 在 “HTTP Proxy” 和 “HTTPS Proxy” 字段中输入你的代理地址(例如 http://proxy.example.com:8080
  5. 如果需要认证,使用格式 http://username:password@proxy.example.com:8080
  6. 点击 “Apply & Restart

WSL2代理

修改~/.bashrc

BASH
export host_ip=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
export http_proxy="http://$host_ip:10804"
export https_proxy="http://$host_ip:10804"
echo "Proxy ON: $http_proxy"

实战测试

拉取

从github拉取excalidraw

BASH
git clone https://github.com/excalidraw/excalidraw

也可以直接从dockerhub拉取

BASH
docker pull name:tag

构建镜像

BASH
docker build -t ec-draw .

运行容器

BASH
docker run -d --name my_container -p 8080:80 ec-draw

访问

BASH
http://localhost:8080

成功访问

停止

BASH
docker stop my_container

注意