Docker 常用笔记(速查版)

Docker 常用笔记(速查版)

一、核心概念速记

概念 通俗理解 核心特征
镜像(Image) 应用的"安装包" 只读模板,包含应用+依赖+配置,可多次复用
容器(Container) 运行中的"应用实例" 镜像的可运行实例,可读写,隔离性强
仓库(Repository) 镜像的"存储仓库" 公有(Docker Hub)/私有(Harbor),存镜像
Dockerfile 构建镜像的"脚本文件" 纯文本指令,标准化镜像构建流程
Docker Compose 多容器管理工具 一键启动/停止多容器应用(如Nginx+MySQL)
数据卷(Volume) 容器持久化存储 独立于容器生命周期,避免数据丢失

二、快速安装

1. Linux(Ubuntu/Debian)

bash 复制代码
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io
# 安装依赖
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
# 添加GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 添加软件源
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 安装Docker CE
sudo apt-get update && sudo apt-get install docker-ce
# 启动+开机自启
sudo systemctl start docker && sudo systemctl enable docker
# 验证
docker --version && docker run hello-world

2. Windows/macOS

直接下载「Docker Desktop」(官网:https://www.docker.com/products/docker-desktop/),一键安装,启动后右上角有图标即生效。

3. 权限配置(避免每次sudo)

bash 复制代码
sudo usermod -aG docker $USER  # 添加当前用户到docker组
newgrp docker  # 生效(无需重启)

三、高频命令(按场景分类)

1. 镜像操作

操作 命令示例 关键说明
拉取镜像 docker pull nginx:1.24 不加tag默认拉latest(最新版)
查看本地镜像 docker images 简写:docker image ls
搜索镜像 docker search mysql 从Docker Hub搜索
构建镜像 docker build -t myapp:1.0 . -t打标签,.是Dockerfile路径
删除镜像 docker rmi nginx:1.24 -f强制删除(需先删容器)
保存镜像为压缩包 docker save -o nginx.tar nginx:1.24 用于离线传输
导入压缩包为镜像 docker load -i nginx.tar 对应save操作
标记镜像(推私有仓) docker tag nginx:1.24 harbor.com/my/nginx:1.24 适配私有仓库路径
推送镜像 docker push harbor.com/my/nginx:1.24 推私有仓前需登录:docker login harbor.com

2. 容器操作

操作 命令示例 关键说明
运行容器(基础) docker run -d -p 80:80 --name mynginx nginx:1.24 -d后台运行,-p端口映射,--name命名
运行容器(带数据卷) docker run -d -p 3306:3306 --name mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0 -v数据卷挂载,-e设置环境变量
查看运行中容器 docker ps -a看所有容器(含停止)
停止容器 docker stop mynginx 多容器:docker stop 容器名1 容器名2
启动停止的容器 docker start mynginx
重启容器 docker restart mynginx
进入容器(交互式) docker exec -it mynginx /bin/bash 退出:exit
进入容器(精简版) docker exec -it mynginx sh 部分镜像无bash,用sh
查看容器日志 docker logs mynginx -f实时跟踪,--tail 100看最后100行
查看容器详情 docker inspect mynginx 查IP、挂载、配置等
删除容器 docker rm mynginx -f强制删除运行中的容器
批量删除停止的容器 docker rm $(docker ps -aq) 谨慎使用!
容器拷贝文件(主机→容器) docker cp /本地文件路径 mynginx:/容器路径 例:docker cp index.html mynginx:/usr/share/nginx/html
容器拷贝文件(容器→主机) docker cp mynginx:/容器文件路径 /本地路径

3. 数据卷操作

操作 命令示例 关键说明
创建数据卷 docker volume create mysql-data
查看数据卷 docker volume ls
查看数据卷详情 docker volume inspect mysql-data 查实际存储路径
删除数据卷 docker volume rm mysql-data 需先删除关联容器
清理无用数据卷 docker volume prune 删除未被使用的所有数据卷

4. 网络操作

操作 命令示例 关键说明
创建自定义网络 docker network create my-net 容器加入该网络可互通
运行容器加入网络 docker run -d --name app --network my-net myapp:1.0
查看网络 docker network ls
容器连接网络 docker network connect my-net mynginx 给已运行容器加网络
容器断开网络 docker network disconnect my-net mynginx

四、Dockerfile 核心指令(速查)

指令 作用 示例
FROM 指定基础镜像(必选) FROM python:3.9-slim
WORKDIR 设置工作目录(后续指令基于此) WORKDIR /app
COPY 复制本地文件到容器 COPY ./target/app.jar /app/
ADD 复制+解压(比COPY多解压功能) ADD app.tar.gz /app/
RUN 构建镜像时执行命令 RUN apt-get install -y nginx
CMD 容器启动时执行命令(可被覆盖) CMD ["java", "-jar", "app.jar"]
ENTRYPOINT 容器启动核心命令(不可被覆盖) ENTRYPOINT ["java", "-jar"] + CMD ["app.jar"]
ENV 设置环境变量 ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk
EXPOSE 声明容器端口(仅文档作用,不映射) EXPOSE 8080
VOLUME 声明数据卷(建议运行时用-v挂载) VOLUME ["/data"]
LABEL 添加镜像标签(备注信息) LABEL author="test" version="1.0"

示例:Java应用Dockerfile

dockerfile 复制代码
# 基础镜像
FROM openjdk:11-jre-slim
# 工作目录
WORKDIR /app
# 复制jar包
COPY ./target/demo-0.0.1-SNAPSHOT.jar app.jar
# 暴露端口
EXPOSE 8080
# 启动命令
CMD ["java", "-jar", "app.jar"]

五、Docker Compose 基础

1. 核心配置(docker-compose.yml)

yaml 复制代码
version: '3.8'  # Compose版本(适配Docker版本)
services:
  # 前端Nginx
  nginx:
    image: nginx:1.24
    ports:
      - "80:80"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d  # 挂载配置
      - ./nginx/html:/usr/share/nginx/html
    restart: always  # 容器异常自动重启
    networks:
      - my-net

  # 后端Java应用
  app:
    build: ./app  # 基于app目录下的Dockerfile构建
    ports:
      - "8080:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/test
      - SPRING_DATASOURCE_PASSWORD=123456
    depends_on:
      - mysql  # 依赖mysql,先启动mysql
    networks:
      - my-net

  # 数据库MySQL
  mysql:
    image: mysql:8.0
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=test
    restart: always
    networks:
      - my-net

# 数据卷定义
volumes:
  mysql-data:

# 网络定义
networks:
  my-net:
    driver: bridge

2. Compose 常用命令

操作 命令示例 说明
启动所有服务 docker-compose up -d -d后台运行
构建+启动 docker-compose up -d --build 重新构建镜像后启动
停止所有服务 docker-compose stop
停止并删除容器/网络 docker-compose down -v删除数据卷
查看服务状态 docker-compose ps
查看服务日志 docker-compose logs app -f实时跟踪
重启指定服务 docker-compose restart app

六、实战常见场景

1. 运行MySQL(持久化+中文)

bash 复制代码
docker run -d \
  --name mysql8 \
  -p 3306:3306 \
  -v mysql8-data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -e MYSQL_DATABASE=test \
  -e TZ=Asia/Shanghai \
  mysql:8.0 \
  --character-set-server=utf8mb4 \
  --collation-server=utf8mb4_unicode_ci

2. 运行Redis(密码+持久化)

bash 复制代码
docker run -d \
  --name redis \
  -p 6379:6379 \
  -v redis-data:/data \
  redis:7.0 \
  --requirepass "123456" \
  --appendonly yes  # AOF持久化

七、排错常用技巧

  1. 容器启动失败docker logs 容器名 查看日志,重点看报错信息(如端口占用、配置错误);

  2. 端口映射失败netstat -tulpn | grep 端口号 查主机端口是否被占用;

  3. 容器网络不通docker inspect 容器名 查容器IP,ping 容器IP 测试连通性;

  4. 镜像拉取失败 :换国内镜像源(如阿里云加速器):

    bash 复制代码
    # 编辑daemon.json
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
    }
    EOF
    # 重启Docker生效
    sudo systemctl daemon-reload && sudo systemctl restart docker
  5. 权限不足 :操作文件/目录时,容器内用户默认非root,可在Dockerfile加USER root,或运行时加--user root

八、避坑指南

  1. 不要用latest标签部署生产环境(版本不固定,易出问题),指定具体版本(如nginx:1.24);
  2. 容器内数据不要直接存储(容器删除即丢失),务必用数据卷(-v)持久化;
  3. Dockerfile中RUN指令尽量合并(减少镜像层),如RUN apt-get update && apt-get install -y nginx
  4. 生产环境不要暴露过多端口,仅开放业务必需端口;
  5. 避免容器启动后手动修改配置(重启失效),优先通过挂载配置文件/环境变量配置。
相关推荐
2401_831501732 小时前
Devops之Docker安装和使用
运维·docker·devops
初学者_xuan2 小时前
26、K8S-Sidecar代理
云原生·容器·kubernetes
❥ღ Komo·2 小时前
K8S-EFK日志收集实战指南
云原生·容器·kubernetes
Lethehong2 小时前
RAG-全链路问答系统:从零到容器化部署的终极指南
docker·云原生·cnb
承渊政道3 小时前
C++学习之旅【实战全面解析C++类和对象】
c++·笔记·学习
bing.shao3 小时前
Kubernetes 容错处理实战案例集锦
云原生·容器·kubernetes
丝斯20113 小时前
AI学习笔记整理(30)—— 计算机视觉之动作识别相关算法
人工智能·笔记·学习
AA陈超3 小时前
LyraStarterGame_5.6 Experience系统分析
开发语言·c++·笔记·学习·ue5·lyra
SadSunset3 小时前
(5)spring的set注入
java·笔记·spring·架构