跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

Docker 安装及基础操作指南

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

ByteFlow发布于 2026/3/16更新于 2026/8/1958 浏览
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. 六、你可能遇到的问题
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • Ubuntu 24.04 向日葵连接失败解决方法
  • 二叉树前中后序遍历:递归与迭代实现详解
  • 交换瓶子问题 Java 最小交换次数解法
  • 基于 Verilog FPGA 的双线性插值视频缩放系统实现
  • 基于 Miloco 的全屋智能家居 AI 自动化部署方案
  • K-means 聚类算法原理与实现详解
  • Sora2 Pro API Python 接入指南:4K 视频生成实战
  • MCP 插件实战:Browser Tools 配置与使用
  • iOS 蓝牙开发核心流程与注意事项
  • 前端开发基础:HTML、CSS 与 JavaScript 核心入门
  • 冯诺依曼体系结构与操作系统初理解
  • AI 数据标注平台的选型与实践:效率提升背后的技术逻辑
  • 基于 JSP 的网上招聘系统开发全流程解析
  • Java ThreadLocal 原理、使用场景及内存泄漏解析
  • OpenClaw 自托管 AI 网关安装与配置指南
  • 多模态大模型综述:视觉理解、生成与 Agent 研究进展
  • 【hacker送书第15期】AI绘画精讲与AIGC时代游戏美术设计:从入门到精通
  • Docker 部署 Web-Check 结合 cpolar 实现远程安全访问
  • Java 基础入门:注释、标识符与数据类型
  • VSCode 中关闭 GitHub Copilot 自动补全的方法

相关免费在线工具

  • 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