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

Docker 安装及基础操作

Docker 是基于 Linux 的容器化技术。涵盖 Windows、Linux、Mac 下的安装步骤,介绍拉取镜像、运行容器、挂载卷、网络模式配置等基础指令,以及 Dockerfile 编写和 Compose 编排方法,并包含常见问题排查指南。

刀狂发布于 2026/2/5更新于 2026/9/107.5K 浏览
Docker 安装及基础操作

Docker 安装及基础操作

一、Docker 安装

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

① Windows 下安装 Docker

  1. win+s 搜索 windows 功能,勾选下面两个选项,根据提示重启电脑。

  2. 根据自己电脑 CPU 型号下载对应的安装包。

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

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

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

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 官方文档或其他技术博客获取最新安装指南。

二、基本指令介绍

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 容器 ID ps -ef

三、Dockerfile

Dockerfile 详细记录了镜像是如何制作的。通过编写 Dockerfile,可以自动化构建镜像。

基本结构示例:

FROM ubuntu:20.04
LABEL maintainer="[email protected]"

RUN apt-get update && apt-get install -y nginx

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

构建镜像命令:

docker build -t my-image-name .

四、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_ADMINUSERNAME=admin -e ME_CONFIG_MONGODB_ADMINPASSWORD=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 不连网模式

容器拥有自己的网络栈,但没有任何网络连接,适用于完全隔离的场景。

sudo docker run -d --network none nginx
④查看网络,删除网络

删除创建的子网,无法删除默认的三种网络模式: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_ADMINUSERNAME: admin # MongoDB 管理员用户名
      ME_CONFIG_MONGODB_ADMINPASSWORD: 123456 # MongoDB 管理员密码
    networks:
      - network1 # 加入 network1 网络
    depends_on:
      - my_mongodb # 依赖 MongoDB 服务,确保先启动 MongoDB

六、你可能遇到的问题

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

目录

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

更多推荐文章

查看全部
  • 接口测试全流程自动化:基于 AI 的实战方案
  • 机器人系统十年演进:从专用机械到通用具身智能体
  • 使用腾讯 Cloud Studio 免费算力部署 Llama3.1 私有化模型
  • 人脸识别核心算法深度解析:FaceNet 与 ArcFace 从原理到实战
  • ofa_image-caption 扩展支持 WebP 格式与 EXIF 元数据保留
  • 医疗 AI 时代生物医学 Go 编程:高性能计算与精准医疗案例分析
  • Spring Cloud 微服务架构核心概念与实战入门
  • MacOS 安装 OpenClaw 并接入飞书机器人
  • Android View 点击与触摸事件优先级分析
  • 家庭 AI 助手搭建:QQ 机器人接入 OpenClaw
  • 模拟退火算法原理与多语言实现
  • 自然语言处理在医疗健康领域的应用与实战
  • 《Agent Runtime 工程化》第四章 工具系统设计:4.1 Tool Registry 的真正职责
  • Unity 发布应用后添加窗口最大化与最小化控制按钮
  • OpenClaw Secure DM Pairing:为 AI 机器人构建安全私信访问机制
  • 自然语言处理在社交媒体分析中的应用与实战
  • MySQL 8.0 安装与配置完整教程
  • Java synchronized 底层原理:从字节码到锁升级机制
  • LLM Agent 规划工作流深度解析与实现
  • 昇腾平台 Llama-2-7b 大模型深度测评与部署方案

相关免费在线工具

  • 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