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

Docker 是基于 Linux 的容器化技术。
win+s 搜索 windows 功能,勾选下面两个选项,根据提示重启电脑。
根据自己电脑 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
本文以 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
请参考 Docker 官方文档或其他技术博客获取最新安装指南。
Docker 官方镜像仓库:https://hub.docker.com
重启 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
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
sudo docker images
sudo docker rmi 镜像 ID/镜像名
示例:
sudo docker rmi nginx
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
删除所有没有任何容器在使用的卷:
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
在 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
ps: process status, 进程状态,只能查看到正在运行的容器。-a: 表示 all, 查看所有的容器状态。sudo docker ps -a
sudo docker start 容器 ID/容器名sudo docker inspect 容器 ID/容器名
sudo docker stop 容器 ID/容器名
示例:
sudo docker start nginx
sudo docker stop nginx
rm: remove 删除-f: force 强制删除sudo docker rm 容器 ID/容器名
示例:
# 删除名为 test_nginx 的容器
sudo docker rm -f test_nginx
-it: 让控制台进入容器内部进行交互。--rm: 当容器停止(退出)的时候,自动删除。alpine : 轻量级的 linux 系统。
sudo docker run -it --rm alpine
--restart always: 只要容器停止了,就立即重启。包含容器因为内部错误崩溃或宿主机断电等场景。--restart unless-stopped: 跟 always 类似,但是手动停止的容器,不会自动重启。sudo docker run -d --restart always nginx
sudo docker run -d --restart unless-stopped nginx
sudo docker logs 容器 ID/容器名 -f-f: follow,追踪输出。sudo docker logs test_nginx -f
进入容器内部,获得一个交互式的命令行环境: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,可以自动化构建镜像。
基本结构示例:
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 .
在浏览器输入:服务器 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
docker 容器共享宿主机的网络,容器直接使用宿主机的 IP 地址,无需端口映射。即容器内的服务直接运行在宿主机的端口上。
sudo docker run -d --network host nginx
容器拥有自己的网络栈,但没有任何网络连接,适用于完全隔离的场景。
sudo docker run -d --network none nginx
删除创建的子网,无法删除默认的三种网络模式:bridge, host, none。
sudo docker network rm 网络 ID/网络名
查看所有网络,包括创建的子网:
sudo docker network list
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

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online