跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Shell / Bash

Docker 安装及基础操作指南

Docker 容器化技术安装指南涵盖 Windows、Linux 及 Mac 环境下的部署步骤。内容包括镜像源配置、常用命令(拉取、运行、查看、删除)、卷挂载、环境变量传递、网络模式(bridge/host/none)及 Compose 编排文件编写。同时提供常见问题排查方案,如 WSL 代理设置等。旨在帮助用户快速掌握 Docker 基础操作与容器管理。

ByteFlow发布于 2026/3/16更新于 2026/5/618 浏览
Docker 安装及基础操作指南

一、Docker 安装

Docker 是基于 Linux 的容器化技术。

① Windows 下安装 Docker

  1. win+s 搜索 windows 功能,勾选下面两个选项,根据提示重启电脑。
  2. 根据自己电脑 CPU 型号下载对应的安装包。

以管理员身份运行 cmd 并执行以下命令:

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

下载完成后双击安装即可,默认安装在 C 盘。如果想指定安装到其他位置,需要以指令的形式安装:

start /w ""Docker Desktop Installer.exe" install --installation-dir=D:\Develop\Docker"

② Linux 下安装 Docker

官方地址:https://get.docker.com/

本文以 Ubuntu-24.04.3-STL 为例。

启动 docker:

sudo systemctl start docker

安装 docker:

sudo sh install-docker.sh

下载脚本:

curl -fsSL https://get.docker.com -o install-docker.sh

③ Mac 下安装 Docker

请参考官方文档或其他可靠资源。

二、基本指令介绍

Docker 官方镜像仓库:https://hub.docker.com

(0)配置 Docker 的镜像站

重启 docker:

sudo systemctl restart docker

修改以下内容,添加国内镜像源:

{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://mirror.ccs.tencentyun.com",
    "https://docker.1panel.live",
    "https://hub.rat.dev",
    "https://docker.mirrors.ustc.edu.cn/",
    "https://hub-mirror.c.163.com/"
  ]
}

编辑 daemon.json 文件:

sudo vim /etc/docker/daemon.json

(1)拉取镜像

  • dicker.io: 表示 registry 仓库地址(应为 docker.io)
  • library: 命名空间,即每个作者的名字
  • nginx:latest: 表示镜像名:镜像版本号,latest 表示最新版本
# 获取最新的 nginx 镜像
sudo docker pull nginx

# 从官方仓库的官方命名空间里下载最新版本的 nginx docker 镜像
sudo docker pull docker.io/library/nginx:latest

# 拉取特定 cpu 架构下的 nginx 镜像
sudo docker pull --platform=xxx nginx

(2)查看所有 docker 镜像

sudo docker images

(3)删除下载的镜像

sudo docker rmi 镜像 ID/镜像名

示例:

sudo docker rmi nginx

(4)创建并运行一个容器

  • sudo docker create 镜像名:创建一个容器,不运行。
  • -d: detached mode 分离模式,表示让容器在后台运行,不会阻塞当前的窗口。
  • --name: 给容器起一个名字 test_nginx。
  • -p: 端口映射,宿主机端口:容器内端口。将主机的 80 端口映射到容器的 80 端口。
  • -v: volume 挂载卷,宿主机目录:容器内目录。将宿主机目录/blog/html 与容器内目录/usr/share/nginx/html 相互关联。此挂载方式属于绑定挂载,使用绑定挂载时,宿主机目录会暂时覆盖容器内目录。相互关联的目录相当于一个全局资源,任意一方对其修改都会使之改变。比如在容器内部新增一个 test.txt 文件,在宿主机上就能看到新增的文件。当删除容器时,容器内部所有文件(包括关联的这个目录)都会被删除,但是宿主机上的这个关联的目录会被保存下来。
sudo docker run -d --name test_nginx -p 80:80 -v /blog/html:/usr/share/nginx/html nginx
① -v 挂载卷
  • 用于持久化数据,避免容器删除后数据丢失。

删除所有没有任何容器在使用的卷:

sudo docker volume prune -a

删除指定命名卷:

sudo docker volume rm nginx_html

查看所有的命名卷:

sudo docker volume list

命名卷在宿主机的真实位置,sudo docker volume inspect + 命名卷名字:

sudo docker volume inspect nginx_html

命名卷在第一次使用的时候,docker 会把容器的文件夹内容同步到命名卷文件夹里面,进行一个初始化,而绑定挂载却没有这个功能。

命名卷挂载创建一个名为 nginx_html 的存储空间(命名卷):

sudo docker volume create nginx_html

-v 卷的名字:容器内目录:

sudo docker run -d -p 80:80 -v nginx_html:/usr/share/nginx/html nginx

绑定挂载 -v 宿主机目录:容器内目录:

sudo docker run -d -p 80:80 -v /blog/html:/usr/share/nginx/html nginx
② -e 往容器里面传递环境变量

在 windows 上访问:

mongosh "mongodb://用户名:密码@服务器 IP 地址:27017"

如:在云服务器上启动一个 mongo 数据库,并设置数据库的用户名和密码两个参数:

sudo docker run -d --name my_mongo -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo

(5)查看 docker 容器的进程状态

  • ps: process status, 进程状态,只能查看到正在运行的容器。
  • -a: 表示 all, 查看所有的容器状态。
sudo docker ps -a

(6)启动/停止一个容器

  • sudo docker start 容器 ID/容器名
  • 查看容器创建时的参数:inspect: 检查,审阅的意思。
sudo docker inspect 容器 ID/容器名
sudo docker stop 容器 ID/容器名

示例:

sudo docker start nginx
sudo docker stop nginx

(7)删除容器

  • rm: remove 删除
  • -f: force 强制删除
sudo docker rm 容器 ID/容器名

示例:

# 删除名为 test_nginx 的容器
sudo docker rm -f test_nginx

(8)进入容器内部,用于临时调试一个容器

  • -it: 让控制台进入容器内部进行交互。
  • --rm: 当容器停止(退出)的时候,自动删除。
  • 退出的指令:exit

alpine: 轻量级的 linux 系统。

sudo docker run -it --rm alpine

(9)配置容器在停止时的重启策略

  • --restart always: 只要容器停止了,就立即重启。包含容器因为内部错误崩溃或宿主机断电等场景。
  • --restart unless-stopped: 跟 always 类似,但是手动停止的容器,不会自动重启。
sudo docker run -d --restart always nginx
sudo docker run -d --restart unless-stopped nginx

(10)查看容器的日志

  • sudo docker logs 容器 ID/容器名 -f
  • -f: follow,追踪输出。
sudo docker logs test_nginx -f

(11)在容器内部执行 Linux 指令

进入容器内部,获得一个交互式的命令行环境:sudo docker exec -it xxxxx(容器 ID) /bin/sh

# 创建一个容器
sudo docker run -d -p 80:80 nginx

# 进入容器内部
sudo docker exec -it nginx 的 ID /bin/sh
cd /usr/share/nginx/html

# 容器内部是一个极简的操作系统,很多命令会缺失,有些命令要自己下载
# 首先查看容器内的 linux 发行版本
cat /etc/os-release

# 此时发现是 debian 的,包管理是 apt,如果是 centos,则使用 yum
# 更新索引
apt update
apt install vim

# 修改文件等操作 ...
sudo docker exec xxxxx(容器 ID) linux 指令

示例:

# 进入容器内部查看有哪些进程
sudo docker exec 容器 ID ps -ef

三、Dockerfile

  • 详细记录了镜像是如何制作的。

四、Docker 网络

① 默认是 bridge, 桥接模式
  • 在浏览器输入:服务器 IP 地址:9000 即可访问,网页登录的账号密码是 admin:pass。
  • PS. 如果你配置好之后无法访问,请查看防火墙是否打开,云安全组是否打开,端口号映射是否正确。

mongodb 的网页客户端:

sudo docker run -d --name my_mongo_express -p 9000:8081 -e ME_CONFIG_MONGODB_SERVER=my_mongodb -e ME_CONFIG_MONGODB_ADMIN_USERNAME=admin -e ME_CONFIG_MONGODB_ADMIN_PASSWORD=123456 --network network1 mongo-express

创建一个容器,且宿主机无法访问。并将这个容器添加到 network1,--network network1:

sudo docker run -d --name my_mongodb --hostname mongo -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123456 --network network1 mongo

创建一个子网 network1:

sudo docker network create network1
② host 主机模式

docker 容器共享宿主机的网络,容器直接使用宿主机的 IP 地址,无需端口映射。即容器内的服务直接运行在宿主机的端口上。

sudo docker run -d --network host nginx
③ none 不连网模式
④查看网络,删除网络

删除创建的子网,无法删除默认的三种网络模式:bridge, host, none。

sudo docker network rm 网络 ID/网络名

查看所有网络,包括创建的子网:

sudo docker network list

五、compose.yaml

docker 会严格寻找本目录下的 compose.yaml 文件,如果没有则报错。可以使用-f (--file) 参数指定 compose 文件。

sudo docker compose -f /file/compose.yaml

启动容器:

sudo docker compose start

仅停止容器:

sudo docker compose stop

停止并删除容器:

sudo docker compose down

运行并创建文件中定义的容器,同一个文件中的容器,默认属于同一个子网。如果已经执行过下面指令,再次执行不会产生效果。

sudo docker compose up -d

轻量级容器编排技术:

version: '3.8'
# Compose 文件版本,建议使用 3.8 以兼容最新 Docker 特性
# 定义网络(对应 --network network1)
networks:
  network1:
    driver: bridge # 默认桥接网络,与 Docker 命令的网络类型一致
# 定义服务
services:
  # MongoDB 服务(对应 my_mongodb 容器)
  my_mongodb:
    image: mongo # 使用的镜像
    container_name: my_mongodb # 容器名称
    hostname: mongo # 容器主机名
    restart: unless-stopped # 可选:容器退出时除非手动停止,否则自动重启
    environment: # 初始化 root 用户和密码(与 Docker 命令的环境变量一致)
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: 123456
    networks: - network1 # 加入 network1 网络
  # Mongo-Express 服务(对应 my_mongo_express 容器)
  my_mongo_express:
    image: mongo-express # 使用的镜像
    container_name: my_mongo_express # 容器名称
    restart: unless-stopped # 可选:自动重启
    ports: - "9000:8081" # 端口映射(主机:容器)
    environment: # 配置 MongoDB 连接信息
      ME_CONFIG_MONGODB_SERVER: my_mongodb # 连接的 MongoDB 服务名(容器名)
      ME_CONFIG_MONGODB_ADMIN_USERNAME: admin # MongoDB 管理员用户名
      ME_CONFIG_MONGODB_ADMIN_PASSWORD: 123456 # MongoDB 管理员密码
    # 可选:关闭基本认证(默认 Mongo-Express 会有 admin/user 认证,如需关闭可添加)
    # ME_CONFIG_BASICAUTH_USERNAME: ""
    # ME_CONFIG_BASICAUTH_PASSWORD: ""
    networks: - network1 # 加入 network1 网络
    depends_on: - my_mongodb # 依赖 MongoDB 服务,确保先启动 MongoDB

六、你可能遇到的问题

  1. 问题描述?电脑已经连接上网络,QQ 和微信也可以正常发送消息,但是浏览器显示网络无连接。
  2. 原因?如果你是第一次使用 WSL,在科学上网的前提下,你的电脑会把自动代理设置打开。表现为:当你不开科学上网工具时,浏览器无法正常访问互联网。

解决办法?打开设置 --> 网络和 Internet --> 代理 --> 手动设置代理(使用代理服务器)--> 关闭并保存。

目录

  1. 一、Docker 安装
  2. ① Windows 下安装 Docker
  3. ② Linux 下安装 Docker
  4. ③ Mac 下安装 Docker
  5. 二、基本指令介绍
  6. (0)配置 Docker 的镜像站
  7. (1)拉取镜像
  8. 获取最新的 nginx 镜像
  9. 从官方仓库的官方命名空间里下载最新版本的 nginx docker 镜像
  10. 拉取特定 cpu 架构下的 nginx 镜像
  11. (2)查看所有 docker 镜像
  12. (3)删除下载的镜像
  13. (4)创建并运行一个容器
  14. ① -v 挂载卷
  15. ② -e 往容器里面传递环境变量
  16. (5)查看 docker 容器的进程状态
  17. (6)启动/停止一个容器
  18. (7)删除容器
  19. 删除名为 test_nginx 的容器
  20. (8)进入容器内部,用于临时调试一个容器
  21. (9)配置容器在停止时的重启策略
  22. (10)查看容器的日志
  23. (11)在容器内部执行 Linux 指令
  24. 创建一个容器
  25. 进入容器内部
  26. 容器内部是一个极简的操作系统,很多命令会缺失,有些命令要自己下载
  27. 首先查看容器内的 linux 发行版本
  28. 此时发现是 debian 的,包管理是 apt,如果是 centos,则使用 yum
  29. 更新索引
  30. 修改文件等操作 ...
  31. 进入容器内部查看有哪些进程
  32. 三、Dockerfile
  33. 四、Docker 网络
  34. ① 默认是 bridge, 桥接模式
  35. ② host 主机模式
  36. ③ none 不连网模式
  37. ④查看网络,删除网络
  38. 五、compose.yaml
  39. Compose 文件版本,建议使用 3.8 以兼容最新 Docker 特性
  40. 定义网络(对应 --network network1)
  41. 定义服务
  42. MongoDB 服务(对应 my_mongodb 容器)
  43. Mongo-Express 服务(对应 mymongoexpress 容器)
  44. 六、你可能遇到的问题
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 数据结构:二叉树初阶与实现
  • 力扣 Hot100 普通数组题解 Python 实现
  • 基于SpringBoot的企业考勤管理系统设计与实现
  • OpenClaw 入门指南:AI Agent 本地部署与优化
  • YOLO+OpenClaw+SAM 微调实现工业缺陷自动标注
  • AI 大模型新型智算中心技术体系深度分析
  • Verilog 描述半加器结构:FPGA 初学实践
  • Stratix 10 SOC U-Boot 与 ATF 编译构建教程
  • Mac M1/M2 原生运行 RMBG-2.0 AI 抠图工具指南
  • VSCode 连接 Gitee 实现代码拉取与更新
  • MySQL 事务的核心概念与 ACID 属性详解
  • OpenClaw iOS/Android 端部署教程:语音唤醒与随身 AI 助手
  • 网络安全工程师岗位需求分析与职业发展路径
  • Rust 异步并发安全与内存管理实战指南
  • 人工智能:自然语言处理与计算机视觉融合应用
  • 自主机器人开源教材入门指南
  • 网络安全行业自学、跳槽与转行建议
  • Java 大数据在智能家居能源消耗趋势预测与节能策略优化中的应用
  • Claude Code 与 OpenClaw 实战指南:从初始化到自动化工作流
  • Python 办公自动化入门:常用文档与数据处理技巧

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online