docker常用命令
docker search 搜索
例如:
docker search nginx

docker pull 下载
例如:
docker pull nginx
docker pull nginx/nginx-ingress

docker images 查看下载的镜像

docker rmi 删除镜像
例如:
docker rmi nginx/nginx-ingress

docker run 运行容器
-p (Publish):端口映射。将宿主机的物理端口绑定到容器的逻辑端口,实现外部网络对容器服务的访问。格式:宿主机端口:容器端口。
--name:静态标识。为容器指定一个唯一的自定义名称,替代随机生成的 Hash ID,便于在脚本和命令中精确引用。
-d (Detach):后台运行。以守护进程(Daemon)模式启动容器,释放当前终端控制权,适合数据库和 Web 服务器。
-e (Env):环境注入。动态向容器内进程传递配置变量(如数据库密码、Spring Profile),实现"一次镜像,多环境运行"。
--restart:自愈策略。定义容器在崩溃、退出或 Docker 守护进程重启时的行为(如 always、on-failure),保障服务可用性。
--network:拓扑隔离。将容器加入指定的虚拟网络,利用 Docker 内置 DNS 实现容器间通过"服务名"而非动态 IP 进行内部通信。



docker ps 查看容器
-a 查看全部容器

docker stop 关闭容器
例如:
docker stop n2

docker start 启动已有容器
例如:
docker start n1/id

docker rm 删除容器
例如:
docker rm n1

docker exec 进容器进行操作
例如:
docker exec n2 ls -al
docker exec -it n2 bash(终端操作)

也可以进入docker桌面版进行操作

docker netword 连接网络
创建网络:docker network create my-net
运行并加入网络:docker run -d --name app --network my-net my-image
连接已有容器:docker network connect my-net existing_container
数据存储方式
目录挂载
简单来说,Docker 目录挂载(Mounting) 就是在**宿主机(你的电脑)和容器(运行中的软件)**之间建立一个"传送门",让它们能共享同一个文件夹。挂载本质上是 Linux 的 mount 操作。它不是在做"文件拷贝",而是改变了路径的指向。
dockerrun-v<宿主机绝对路径或名称>:容器内绝对路径>[:<选项>]<镜像名>
例如:
-v 左边是宿主目录,右边是容器映射目录

创建卷
例如:
docker volume create
-v 左边卷名,右边容器目录


--mount(挂载)
dockerrun-v<宿主机绝对路径或名称>:容器内绝对路径>[:<选项>]<镜像名>
docker run--mount type=<类型>,source=<源>,target=<目标>[<选项>...]<镜像名>
type (类型):指定挂载的模式。
bind:绑定挂载。直接将宿主机的绝对路径映射到容器。
volume:匿名/具名卷。由 Docker 统一管理的逻辑存储区域(推荐,性能更好且跨平台)。
tmpfs:内存挂载。数据只存在内存中,不会写入硬盘,重启消失(常用于存放敏感 key 或高频临时文件)。
source / src (源):
如果类型是 bind,这里填宿主机的绝对路径(如 D:\data)。
如果类型是 volume,这里填 卷的名字。
target / destination / dst (目标):
容器内部的路径。数据会被挂载到这个位置(如 /app/logs)。

Docker Compose
1. 检查是否安装
bash
docker compose version
如果已安装 Docker Desktop,一般默认自带 Compose。
2. 核心作用
Docker Compose 用于 统一管理多个容器服务 ,通过一个 docker-compose.yaml 文件即可完成:
- MySQL
- Redis
- Spring Boot
- Nginx
- Vue 前端
等多个服务的一键启动。
相比多个 docker run:
- 更规范
- 更适合项目
- 更方便部署
3. 常用命令
启动:
bash
docker compose up -d
指定文件启动:
bash
docker compose -f docker-compose.yaml up -d
停止:
bash
docker compose stop
删除容器:
bash
docker compose down
查看日志:
bash
docker compose logs -f
查看运行状态:
bash
docker compose ps
Docker 镜像核心知识点
1. 镜像(Image)
镜像可以理解为:
一个完整的软件运行模板
里面包含:
- 运行环境
- 系统依赖
- JDK / Node
- 项目代码
- 启动命令
例如:
bash
mysql:8.0
redis:7
openjdk:17
nginx:latest
2. 容器(Container)
容器是镜像运行后的实例。
可以理解为:
镜像是模板,容器是实际运行起来的程序
Dockerfile 核心知识点
Dockerfile 用于构建项目镜像。
例如 Java 项目:
dockerfile
FROM openjdk:17
COPY target/app.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
多阶段构建(重点)
核心思想
前一个阶段使用功能完整的大镜像进行构建
后一个阶段使用精简镜像,只复制最终运行需要的内容
这就是:
Multi-stage Build(多阶段构建)
为什么这样做
因为:
第一阶段:负责构建
需要很多工具:
- Maven
- JDK
- Node
- npm
- 编译环境
所以用完整镜像。
例如:
dockerfile
FROM maven:3.9.6-eclipse-temurin-17 AS builder
第二阶段:负责运行
只需要:
- 最终 jar 包
- 运行时 JDK
所以用轻量镜像。
例如:
dockerfile
FROM eclipse-temurin:17-jre
COPY --from=builder /app/target/app.jar app.jar
完整示例
dockerfile
# 第一阶段:构建
FROM maven:3.9.6-eclipse-temurin-17 AS builder
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests
# 第二阶段:运行
FROM eclipse-temurin:17-jre
WORKDIR /app
COPY --from=builder /app/target/app.jar app.jar
CMD ["java", "-jar", "app.jar"]
核心优势(面试重点)
1)镜像体积更小
比如:
- 构建镜像:1GB+
- 最终运行镜像:200MB 左右
2)更安全
不会把:
- 源码
- Maven
- 编译工具
带到生产环境。
3)部署更快
镜像更小:
- 上传快
- 拉取快
- 启动快
一句话总结(非常适合面试)
Docker 多阶段构建的核心思想是:前置阶段完成项目编译构建,后置阶段基于轻量运行时镜像,仅复制最终产物,从而减小镜像体积并提升部署效率。
创建镜像的两种方式
Docker 创建镜像主要有两种方式:
方式一:基于 Dockerfile 创建(推荐)
这是企业开发中最常用、最标准的方式。
核心命令:
bash
docker build -t 镜像名:版本号 .
例如:
bash
docker build -t novaleap-backend:1.0 .
说明:
-t:指定镜像名称和版本.:当前目录(Dockerfile 所在目录)
例如生成后的镜像:
bash
novaleap-backend:1.0
方式二:基于容器提交
把一个运行中的容器保存成镜像。
命令:
bash
docker commit 容器ID 镜像名:版本
例如:
bash
docker commit local-mysql my-mysql:1.0
为什么不推荐 docker commit
这种方式一般不推荐用于正式项目。
原因:
- 不规范
- 不方便维护
- 无法版本化管理
- 不利于团队协作
- 无法复现构建过程
企业开发基本都使用 Dockerfile。
Dockerfile 创建镜像(重点)
这是最标准的方式,也是面试高频。
1. 创建 Dockerfile
在项目根目录创建文件:
text
Dockerfile
注意:
文件名必须是
Dockerfile,不能带后缀
例如:
text
novaleap-backend/
├── Dockerfile
├── pom.xml
├── src
└── target
2. Java 项目示例
Spring Boot 项目常见写法:
dockerfile
FROM openjdk:17
WORKDIR /app
COPY target/app.jar app.jar
CMD ["java", "-jar", "app.jar"]
3. 每一行含义解析
FROM
指定基础镜像
dockerfile
FROM openjdk:17
表示当前镜像基于 JDK 17。
WORKDIR
设置工作目录
dockerfile
WORKDIR /app
后续命令都在 /app 目录执行。
COPY
复制文件
dockerfile
COPY target/app.jar app.jar
把本地 jar 包复制到容器内部。
CMD
容器启动命令
dockerfile
CMD ["java", "-jar", "app.jar"]
容器启动时自动运行项目。
构建镜像
bash
docker build -t novaleap-backend:1.0 .
查看镜像
bash
docker images
例如:
bash
REPOSITORY TAG IMAGE ID
novaleap-backend 1.0 abc123
运行镜像
bash
docker run -d -p 8080:8080 novaleap-backend:1.0
说明:
-d:后台运行-p:端口映射
Vue 项目创建镜像
前端项目一般基于 Nginx。
Dockerfile:
dockerfile
FROM nginx:latest
COPY dist/ /usr/share/nginx/html/
构建镜像
bash
docker build -t novaleap-frontend:1.0 .
运行镜像
bash
docker run -d -p 80:80 novaleap-frontend:1.0
多阶段构建(推荐)
企业项目非常常用。
尤其适合 Java / Vue 项目。
为什么使用多阶段构建
核心思想:
第一阶段负责构建
第二阶段负责运行
这样镜像体积更小。
Java 多阶段构建示例
dockerfile
# 构建阶段
FROM maven:3.9-jdk-17 AS build
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests
# 运行阶段
FROM openjdk:17-jre
WORKDIR /app
COPY --from=build /app/target/app.jar app.jar
CMD ["java", "-jar", "app.jar"]
优势
- 镜像体积更小
- 更安全
- 不包含 Maven
- 不包含源码
- 部署更快
为什么推荐 Dockerfile
优点:
- 标准化
- 可维护
- 可复用
- 可版本控制
- 团队协作方便
- 适合 CI/CD 自动部署
面试高频问题
非常容易被问:
- 你项目镜像怎么构建?
- Dockerfile 怎么写?
- 为什么使用多阶段构建?
- 为什么不用 docker commit?
- 镜像如何优化体积?
一句话总结(面试)
Docker 创建镜像主要通过 Dockerfile 实现,使用
docker build命令将运行环境、代码和启动命令打包为可复用镜像,是企业级项目部署的标准方式。