Docker 的安装构建与基本命令
2026-05-09
运维
00
请注意,本文编写于 76 天前,最后修改于 43 天前,其中某些信息可能已经过时。

目录

Docker 安装验证与基本命令
前置条件:确认 Docker Desktop 已安装
安装docker
卸载旧版本
安装依赖并添加 Docker 官方 GPG 密钥
添加 Docker 官方 APT 源
安装 Docker Engine (社区版)
启动服务并设置开机自启
验证安装
镜像操作命令
查找和拉取镜像
管理本地镜像
容器生命周期
创建和运行容器
关键参数解释
管理运行中的容器
删除容器
实操练习 Lab 01:运行你的第一个 Web 服务器
目标
步骤
扩展练习
实操练习 Lab 02:多容器体验
目标
思考题
常用清理命令

Docker 安装验证与基本命令

前置条件:确认 Docker Desktop 已安装

安装docker

卸载旧版本

展开代码
sudo apt update sudo apt remove -y docker docker-engine docker.io containerd runc

安装依赖并添加 Docker 官方 GPG 密钥

展开代码
sudo apt install -y ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc

添加 Docker 官方 APT 源

展开代码
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 更新软件包 sudo apt update

安装 Docker Engine (社区版)

展开代码
sudo apt install -y docker-ce docker-ce-cli containerd.io

启动服务并设置开机自启

展开代码
sudo systemctl start docker sudo systemctl enable docker

验证安装

展开代码
# 查看 Docker 版本 docker version # 查看 Docker 系统信息(引擎、存储驱动、内核等) docker info # 运行测试容器,验证一切正常 docker run hello-world

如果 hello-world 运行成功并打印欢迎信息,说明 Docker 环境就绪。


镜像操作命令

查找和拉取镜像

展开代码
# 从 Docker Hub 搜索镜像 docker search nginx # 拉取镜像(默认 tag 为 latest) docker pull nginx # 拉取指定版本 docker pull nginx:1.25-alpine # 拉取并指定平台(M1/M2 Mac 有时需要) docker pull --platform linux/amd64 nginx:1.25

管理本地镜像

展开代码
# 列出本地所有镜像 docker images # 等同于 docker image ls # 查看镜像详细信息 docker image inspect nginx # 查看镜像的分层历史 docker image history nginx # 删除镜像 docker rmi nginx # 等同于 docker image rm nginx # 清理所有未使用的镜像(悬空镜像) docker image prune # 清理所有未被容器引用的镜像 docker image prune -a

容器生命周期

展开代码
docker create docker start docker stop ───────────► Created ──────────► Running ──────────► Stopped │ │ │ docker pause │ docker start ▼ │ Paused ────────────────┘ docker unpause 任何状态 ──── docker rm ────► Deleted

创建和运行容器

展开代码
# 最常用:运行一个容器(拉取 + 创建 + 启动) docker run nginx # 后台运行(detached 模式) docker run -d nginx # 指定容器名称 docker run -d --name my-nginx nginx # 端口映射:宿主机 8080 → 容器 80 docker run -d -p 8080:80 --name my-nginx nginx # 交互式运行(进入容器内 shell) docker run -it ubuntu:22.04 /bin/bash # 运行后自动删除容器 docker run --rm -it alpine sh # 设置环境变量 docker run -d -e MYSQL_ROOT_PASSWORD=secret mysql:8 # 限制资源 docker run -d --memory=512m --cpus=1.0 nginx

关键参数解释

参数含义
-dDetached,后台运行
-itInteractive + TTY,交互式终端
-p 宿主:容器端口映射
-v 宿主:容器数据卷挂载
-e KEY=VALUE设置环境变量
--name指定容器名称
--rm容器停止后自动删除
--network指定网络
--memory内存限制
--cpusCPU 限制

管理运行中的容器

展开代码
# 查看运行中的容器 docker ps # 查看所有容器(包括已停止的) docker ps -a # 停止容器 docker stop my-nginx # 启动已停止的容器 docker start my-nginx # 重启容器 docker restart my-nginx # 进入运行中的容器 docker exec -it my-nginx /bin/bash # 如果容器没有 bash,用 sh docker exec -it my-nginx /bin/sh # 在容器中执行单条命令 docker exec my-nginx cat /etc/nginx/nginx.conf # 查看容器日志 docker logs my-nginx docker logs -f my-nginx # 持续跟踪 docker logs --tail 100 my-nginx # 最后 100 行 # 查看容器资源使用 docker stats docker stats my-nginx # 查看容器详细信息 docker inspect my-nginx # 查看容器内进程 docker top my-nginx

删除容器

展开代码
# 删除已停止的容器 docker rm my-nginx # 强制删除运行中的容器 docker rm -f my-nginx # 删除所有已停止的容器 docker container prune # 核弹选项:删除所有容器 docker rm -f $(docker ps -aq)

实操练习 Lab 01:运行你的第一个 Web 服务器

目标

在本地运行一个 Nginx Web 服务器,通过浏览器访问。

步骤

展开代码
# 1. 拉取 Nginx 镜像 docker pull nginx:alpine # 2. 运行容器,映射端口 docker run -d \ --name lab01-nginx \ -p 8080:80 \ nginx:alpine # 3. 验证容器运行 docker ps # 4. 浏览器访问 http://localhost:8080 ,应该看到 Nginx 欢迎页 # 5. 查看日志 docker logs lab01-nginx # 6. 进入容器看看里面有什么 docker exec -it lab01-nginx sh # 在容器内: ls /usr/share/nginx/html/ # 网站根目录 cat /etc/nginx/nginx.conf # Nginx 配置 exit # 7. 清理 docker stop lab01-nginx docker rm lab01-nginx

扩展练习

展开代码
# 挂载本地目录作为网站内容 mkdir -p /tmp/my-site echo '<h1>Hello Docker!</h1>' > /tmp/my-site/index.html docker run -d \ --name lab01-custom \ -p 8080:80 \ -v /tmp/my-site:/usr/share/nginx/html:ro \ nginx:alpine # 访问 http://localhost:8080 应该看到 "Hello Docker!" # 修改本地的 index.html,刷新浏览器,内容实时更新 # 清理 docker stop lab01-custom && docker rm lab01-custom

实操练习 Lab 02:多容器体验

目标

同时运行多个容器,理解容器隔离和端口映射。

展开代码
# 同时运行 3 个不同的 web 服务 docker run -d --name web1 -p 8081:80 nginx:alpine docker run -d --name web2 -p 8082:80 httpd:alpine # Apache docker run -d --name web3 -p 8083:80 nginx:alpine # 查看所有容器 docker ps # 分别访问: # http://localhost:8081 → Nginx # http://localhost:8082 → Apache # http://localhost:8083 → Nginx # 查看资源占用 docker stats --no-stream # 清理 docker stop web1 web2 web3 docker rm web1 web2 web3

思考题

  1. 为什么 web1 和 web3 都是 nginx 但可以同时运行?
  2. 如果两个容器都映射到宿主机 8080 端口会怎样?
  3. 容器内部的端口 80 冲突吗?为什么?

答案提示:每个容器都有自己独立的网络命名空间,容器内部的端口互不影响。冲突只发生在宿主机端口映射层面。当端口重复使用时,第二个容器会直接启动失败,报“端口占用失败”


常用清理命令

展开代码
# 清理已停止的容器 docker container prune # 清理未使用的镜像 docker image prune # 清理未使用的卷 docker volume prune # 清理未使用的网络 docker network prune # 一键清理所有未使用的资源(慎用) docker system prune # 包括未使用的镜像 docker system prune -a # 查看 Docker 磁盘使用情况 docker system df

本文作者:zzz

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!