展开代码sudo apt update sudo apt remove -y docker docker-engine docker.io containerd runc
展开代码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
展开代码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
展开代码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
| 参数 | 含义 |
|---|---|
-d | Detached,后台运行 |
-it | Interactive + TTY,交互式终端 |
-p 宿主:容器 | 端口映射 |
-v 宿主:容器 | 数据卷挂载 |
-e KEY=VALUE | 设置环境变量 |
--name | 指定容器名称 |
--rm | 容器停止后自动删除 |
--network | 指定网络 |
--memory | 内存限制 |
--cpus | CPU 限制 |
展开代码# 查看运行中的容器 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)
在本地运行一个 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
同时运行多个容器,理解容器隔离和端口映射。
展开代码# 同时运行 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
答案提示:每个容器都有自己独立的网络命名空间,容器内部的端口互不影响。冲突只发生在宿主机端口映射层面。当端口重复使用时,第二个容器会直接启动失败,报“端口占用失败”
展开代码# 清理已停止的容器 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 许可协议。转载请注明出处!