环境检查
lsb_release -a
安装 Docker
- 卸载旧版本
sudo apt-get remove docker docker-engine docker.io
- 更新系统包索引
apt-get update
介绍在 Ubuntu 20.04 系统上安装 Docker 的详细步骤,包括卸载旧版本、配置软件源、添加用户权限及配置镜像加速器。阐述了 Docker 镜像与容器的核心区别,并汇总了服务管理、镜像操作、容器生命周期、系统管理及调试交互等常用命令,同时提供了基于 Dockerfile 构建镜像及 VSCode 集成的实践流程。
lsb_release -a
sudo apt-get remove docker docker-engine docker.io
apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
将当前用户加入 docker 组,以便无需 sudo 执行命令。
# 创建 docker 组(如果不存在)
sudo groupadd docker
# 将当前用户加入 docker 组
sudo usermod -aG docker $USER
# 重新登录或重启终端使组权限生效
newgrp docker
# 验证是否成功
docker ps
解决 docker run hello-world 超时问题。
sudo mkdir -p /etc/docker
echo '{ "registry-mirrors": [ "http://hub-mirror.c.163.com", "https://mirror.baidubce.com", "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com", "https://dockerproxy.com", "https://ccr.ccs.tencentyun.com", "https://registry.cn-hangzhou.aliyuncs.com" ] }' | sudo tee /etc/docker/daemon.json
sudo systemctl daemon-reload
sudo systemctl restart docker
docker -v
docker info
Docker 镜像是只读模板,包含创建容器所需的所有文件和代码。它本质上是一个可执行包,包含操作系统基础镜像、应用程序代码和依赖项、配置文件及启动命令。镜像是不可变的,确保了一致性和可重复性。
容器是使用镜像运行的实例,拥有独立的文件系统、网络和进程。它是隔离的、轻量级的执行环境,支持读写操作。启动时,Docker 会从镜像创建一个新的文件系统层,允许容器具有唯一状态而不影响基础镜像。
| 特性 | Docker 镜像 | Docker 容器 |
|---|---|---|
| 类型 | 模板 | 运行实例 |
| 可变性 | 不可变 | 可变 |
| 目的 | 创建容器 | 运行应用程序 |
| 状态 | 只读 | 读写 |
| 文件系统 | 一层 | 多层(基础镜像层 + 容器层) |
# 启动/停止/重启
sudo systemctl start docker
sudo systemctl stop docker
sudo systemctl restart docker
# 查看状态
sudo systemctl status docker
# 设置开机启动
sudo systemctl enable docker
# 查看本地镜像
docker images
docker image ls
docker images -q # 仅显示 ID
# 搜索镜像
docker search nginx
docker search nginx --filter=stars=100
# 拉取镜像
docker pull nginx
docker pull nginx:1.21-alpine # 指定标签
docker pull --platform=linux/aarch64 ubuntu:22.04 # 指定架构
# 删除镜像
docker rmi nginx:latest
docker rmi image_id
docker rmi $(docker images -q) # 删除所有
# 清理悬空镜像
docker image prune
docker image prune -a # 删除所有未使用
# 保存和加载
docker save -o nginx.tar nginx:latest
docker load -i nginx.tar
# 查看历史
docker history nginx:latest
# 查看容器
docker ps # 运行中
docker ps -a # 所有
docker ps -l # 最后一个
docker ps -f "status=running"
# 运行容器
docker run nginx
docker run -d nginx # 后台
docker run --name mynginx nginx # 命名
docker run --rm nginx # 退出自动删除
docker run -it nginx bash # 交互式
docker run -p 8080:80 nginx # 端口映射
docker run -e NODE_ENV=production nginx # 环境变量
docker run -v /host/path:/container/path nginx # 挂载卷
docker run --memory="512m" nginx # 内存限制
docker run --cpus="1.5" nginx # CPU 限制
# 控制容器
docker start container_name
docker stop container_name
docker restart container_name
docker pause container_name
docker unpause container_name
# 删除容器
docker rm container_name
docker rm -f container_name # 强制删除
docker rm $(docker ps -aq) # 删除所有停止的
docker container prune
# 进入容器
docker exec -it container_name bash
docker exec -u root container_name bash
# 执行命令
docker exec container_name ls -la
docker exec -d container_name touch /tmp/test
# 日志
docker logs container_name
docker logs -f container_name # 跟踪
docker logs --tail 50 container_name
docker logs --since 1h container_name
# 文件操作
docker cp container_name:/path/to/file /host/path
docker cp /host/path container_name:/path
# 资源监控
docker stats
docker stats container_name
docker top container_name
# 详情
docker inspect container_name
docker inspect -f '{{.NetworkSettings.IPAddress}}' container_name
# 信息
docker info
docker version
docker system info
# 磁盘使用
docker system df
docker system df -v
# 事件
docker events
docker events --filter 'type=container'
# 清理资源
docker system prune
docker system prune -a
docker system prune --volumes
docker builder prune
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
docker build -t my-app:latest .
docker build -t myapp:v1 -t myapp:latest . # 多标签
docker build --no-cache . # 不使用缓存
docker build --build-arg NODE_ENV=production . # 构建参数
# 命令行
docker run -d -p 3000:3000 --name my-container my-app
# VSCode 集成
# 1. 安装 Docker 扩展
# 2. 右键镜像 -> Run
# 3. 或使用终端执行上述命令

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online