概述
虽然docker运维层面可能用的多一些,由于时不时会用到docker做一些自动化CI/CD、并发执行脚本等操作,还是很重要的,对于日常开发能大幅提高开发效率,记录下常用的docker常见概念和操作
镜像(Image)---》模具
定义
- 只读模板:包含运行应用所需的所有依赖、配置、代码
- 分层存储:由多个只读层组成,每层代表一个修改
- 构建基础:用于创建容器的蓝图
容器(Container)----》实例
定义
- 运行实例:镜像的可运行实例
- 隔离环境:具有独立的文件系统、网络、进程空间
- 可写层:在镜像基础上添加可写层,所有修改都在此层
生命周期
markdown
创建 → 运行 → 停止 → 删除
↘ 暂停 → 恢复 ↗
仓库(Registry)
定义
- 镜像存储库:集中存放镜像的地方
- 公共/私有:Docker Hub(公共)或私有仓库
- 版本管理:支持标签(tag)管理不同版本
常见仓库
bash
# Docker Hub(默认)
docker pull nginx:latest
# 私有仓库
docker pull myregistry.com/myapp:v1.0
Dockerfile----》图纸
定义
- 构建脚本:包含构建镜像的指令
- 自动化构建:可重复的构建过程
- 版本控制:可与代码一起管理
结构
bash
FROM ubuntu:20.04 # 基础镜像
COPY . /app # 复制文件
RUN make /app # 执行命令
ENV PATH /app:$PATH # 设置环境变量
EXPOSE 80 # 声明端口
CMD ["/app/start.sh"] # 启动命令
打包一个前端项目示例
sh
# 使使用镜像
FROM node:25.2.1
WORKDIR /app
# 复制当前目录文件到/app下
COPY . .
# 执行命令
# RUN node -v && \
# npm -v &&\
# npm i -g pnpm && \
# pnpm i && \
# pnpm i run build && \
# pnpm run serve
# 暴露 80 端口
EXPOSE 8080
# # 启动 Nginx
# CMD ["nginx", "-g", "daemon off;"]
CMD node -v && \
npm -v &&\
npm i -g pnpm && \
pnpm i && \
pnpm i run build && \
pnpm run serve
# 将静态文件复制到 Nginx 服务目录
COPY ./dist /usr/share/nginx/html
数据卷(Volume)
定义
- 持久化存储:独立于容器的数据存储
- 数据共享:在容器间共享数据
- 生命周期:与容器分离,可独立管理
使用方式
bash
# 创建数据卷
docker volume create mydata
# 挂载到容器
docker run -v mydata:/app/data myapp
网络(Network)
定义
- 容器通信:管理容器间的网络连接
- 网络隔离:不同类型的网络提供不同级别的隔离
- 端口映射:容器与主机的网络通信
网络类型
bash
# 桥接网络(默认)
docker network create mynetwork
# 主机网络
docker run --network host nginx
# 容器网络
docker run --network container:other-container nginx
bash
# Docker Hub(默认)
docker pull nginx:latest
# 私有仓库
docker pull myregistry.com/myapp:v1.0
docker compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具
- 多容器管理:通过 YAML 文件定义和运行多个容器
- 服务编排:自动处理容器间的依赖关系和网络
- 简化部署:一条命令启动整个应用栈
常用命令
docker pull
用来拉取仓库镜像
sh
//docker pull [镜像包]
docker pull node
docker pull node:14.21.3
docker pull nginx
docker image ls
列举当前下载的镜像包
docker image rm
删除镜像包
sh
//docker image rm [镜像名]
docker image rm nginx
docker image rm -f nginx //强制删除
docker ps
查看当前运行的镜像
sh
docker ps //当前运行的镜像
docker ps -a //当前所有镜像
docker run
基于当前镜像运行容器
js
//docker run [镜像名|镜像id] //可能会阻塞控制台
//docker run -d [镜像名|镜像id] //后台运行(常用)
//docker run -d -p [宿主端口]:[容器端口] [镜像名|镜像id] //后台运行(常用)
doker run nginx -d
doker run nginx -d -p 88:80 //宿主环境访问88端口会访问到容器内部的80端口
docker rm
sh
# 删除已停止的容器
docker rm <container_id_or_name>
# 示例
docker rm my-container
docker rm d4df063702d4
# 强制删除运行中的容器(先停止再删除)
docker rm -f <container_id_or_name>
# 示例
docker rm -f d4df063702d4
# 强制删除所有容器(包括运行中的)
docker rm -f $(docker ps -aq)
docker run -v
容器时挂载(外部映射文件到容器内部,改外面里面也改)
sh
# 挂载 Nginx 配置
docker run -v /host/nginx.conf:/etc/nginx/nginx.conf:ro nginx
# 挂载网站文件
docker run -v /host/html:/usr/share/nginx/html nginx
docker run -d -p 80:80 -v /www/test:/usr/share/nginx/html nginx
# 使用相对路径(相对于当前目录)
docker run -v ./data:/app/data nginx
# 挂载多个目录
docker run \
-v /host/config:/app/config:ro \
-v /host/data:/app/data \
-v /host/logs:/app/logs \
myapp
docker volume
命名卷
sh
# 创建命名卷
doucker volume create [卷名]
#示例
#创建nginx的html
doucker volume create nginx_html
#卷替换目录
docker volume create nginx_html
docker run -d -p 80:80 -v nginx_html:/usr/share/nginx/html nginx
# 查询卷创建的位置
docker volume inspect nginx_html
# 输出
[
{
"CreatedAt": "2025-11-27T21:43:28+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/nginx_html/_data",//卷的位置
"Name": "nginx_html",
"Options": null,
"Scope": "local"
}
]
# 列出所有数据卷
docker volume ls
# 删除数据卷
docker volume rm my_volume
# 强制删除数据卷
docker volume rm -f my_volume
# 删除所有未使用的数据卷
docker volume prune
docker start|stop
容器启停(等同于将服务上上下线),会保存之前的缓存
sh
# 启动已停止的容器
docker start container_name
# 启动容器并显示日志
docker start -a container_name
# 启动多个容器
docker start container1 container2 container3
# 启动所有已停止的容器
docker start $(docker ps -aq -f status=exited)
# 停止运行中的容器
docker stop container_name
# 停止多个容器
docker stop container1 container2 container3
# 停止所有运行中的容器
docker stop $(docker ps -q)
# 设置停止超时时间(默认10秒)
docker stop -t 30 container_name
docker-compose
sh
# 启动所有服务(后台运行)
docker-compose up -d
# 启动并构建镜像
docker-compose up --build
# 停止所有服务
docker-compose down
# 查看服务状态
docker-compose ps
# 查看服务日志
docker-compose logs
docker-compose logs -f # 实时日志
docker-compose logs service_name # 特定服务日志
# 重启服务
docker-compose restart
# 缩放服务实例数量
docker-compose up --scale web=3 --scale worker=2
# 构建服务镜像
docker-compose build
# 拉取服务镜像
docker-compose pull
# 执行命令
docker-compose exec service_name command
docker-compose exec web bash # 进入容器
# 暂停/恢复服务
docker-compose pause
docker-compose unpause
docker build
命令用于根据 Dockerfile 构建 Docker 镜像(图纸为dockeFile)
sh
docker build -t [镜像名] [OPTIONS] PATH | URL | -
# 在当前目录查找 Dockerfile 并构建(.基于档期啊目录构建)
docker build .
docker build -t my-app-test .
# 指定 Dockerfile 路径
docker build -f Dockerfile.dev .
# 指定构建上下文路径
docker build /path/to/build/context