docker总结

概述

虽然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
相关推荐
槁***耿44 分钟前
TypeScript类型推断
前端·javascript·typescript
带只拖鞋去流浪1 小时前
迎接2026,重新认识Vue CLI (v5.x)
前端·vue.js·webpack
c***V3234 小时前
Vue优化
前端·javascript·vue.js
李@十一₂⁰6 小时前
HTML 特殊字体符号
前端·html
小奶包他干奶奶8 小时前
Webpack学习——Loader(文件转换器)
前端·学习·webpack
zy happy8 小时前
若依 vue3 报错:找不到模块“@/api/xxxx/xxxxx”或其相应的类型声明。。Vue 3 can not find mod
前端·javascript·vue.js
潘小安8 小时前
Git Worktree + Claude Code:让你的开发效率翻倍的秘密武器
前端
meichaoWen9 小时前
【Vue3】vue3的全面学习(一)
前端·javascript·学习
小猪努力学前端9 小时前
在 React + React Router v7 SSR 项目里做多端适配,我踩的两个坑
前端·react.js