Docker的使用及核心命令

文章目录

Docker基础概念

在深入命令之前,先理解几个关键概念:

  • 镜像(Image):应用的只读模板,包含运行应用所需的所有内容
  • 容器(Container):镜像的运行实例,是应用的实际运行环境
  • 仓库(Repository):存储和分发镜像的地方,如Docker Hub

简单类比:镜像就像是"类",容器就是"类的实例对象"。

镜像管理命令

镜像查看和搜索

bash 复制代码
# 查看本地镜像列表
docker images
docker image ls

# 搜索Docker Hub上的镜像
docker search nginx
docker search --limit 5 mysql  # 限制搜索结果数量

镜像下载和删除

bash 复制代码
# 下载镜像
docker pull nginx                    # 下载最新版本
docker pull nginx:1.20              # 下载指定版本
docker pull mysql:8.0               # 下载MySQL 8.0

# 删除镜像
docker rmi nginx:latest              # 删除指定镜像
docker rmi $(docker images -q)      # 删除所有镜像(慎用)
docker image prune                   # 删除悬空镜像(推荐)

镜像构建

bash 复制代码
# 从Dockerfile构建镜像
docker build -t myapp:v1.0 .        # 构建并打标签
docker build -t myapp:latest --no-cache .  # 不使用缓存构建

# 从容器创建镜像(不推荐,但有时有用)
docker commit container_name new_image:tag

容器生命周期管理

创建和启动容器

bash 复制代码
# 运行容器的基本命令
docker run hello-world               # 运行测试容器

# 常用参数组合
docker run -d --name mynginx -p 8080:80 nginx
# -d: 后台运行
# --name: 指定容器名称
# -p: 端口映射 (主机端口:容器端口)

# 交互式运行
docker run -it ubuntu:20.04 /bin/bash
# -i: 交互模式
# -t: 分配伪终端

# 挂载数据卷
docker run -d --name myapp -v /host/path:/container/path nginx
docker run -d --name mydb -v myvolume:/var/lib/mysql mysql:8.0

容器控制命令

bash 复制代码
# 查看容器状态
docker ps                           # 查看运行中的容器
docker ps -a                        # 查看所有容器(包括停止的)
docker ps -q                        # 只显示容器ID

# 启动和停止容器
docker start container_name          # 启动已停止的容器
docker stop container_name           # 优雅停止容器
docker kill container_name           # 强制停止容器
docker restart container_name        # 重启容器

# 暂停和恢复容器
docker pause container_name          # 暂停容器
docker unpause container_name        # 恢复容器

容器清理

bash 复制代码
# 删除容器
docker rm container_name             # 删除已停止的容器
docker rm -f container_name          # 强制删除运行中的容器
docker rm $(docker ps -aq)          # 删除所有容器

# 自动清理
docker container prune               # 删除所有停止的容器
docker system prune                  # 清理未使用的镜像、容器、网络
docker system prune -a               # 更彻底的清理(包括未使用的镜像)

容器交互和调试

进入容器

bash 复制代码
# 在运行的容器中执行命令
docker exec -it container_name /bin/bash    # 进入容器交互终端
docker exec container_name ls /app          # 在容器中执行单条命令
docker exec -u root container_name /bin/bash # 以root用户身份进入

文件操作

bash 复制代码
# 容器和主机之间复制文件
docker cp file.txt container_name:/app/     # 从主机复制到容器
docker cp container_name:/app/file.txt ./   # 从容器复制到主机

# 查看容器文件系统变化
docker diff container_name

日志和监控

bash 复制代码
# 查看容器日志
docker logs container_name           # 查看容器日志
docker logs -f container_name        # 实时跟踪日志
docker logs --tail 100 container_name # 查看最后100行日志
docker logs -t container_name        # 显示时间戳

# 查看容器详细信息
docker inspect container_name        # 查看容器详细配置
docker stats                        # 实时查看所有容器资源使用情况
docker stats container_name         # 查看指定容器资源使用

数据管理

数据卷(Volume)

bash 复制代码
# 创建和管理数据卷
docker volume create myvolume        # 创建数据卷
docker volume ls                     # 列出所有数据卷
docker volume inspect myvolume      # 查看数据卷详情
docker volume rm myvolume           # 删除数据卷

# 使用数据卷
docker run -d --name webapp -v myvolume:/app/data nginx

绑定挂载

bash 复制代码
# 挂载主机目录到容器
docker run -d --name dev-env -v $(pwd):/workspace node:14
docker run -d --name logs -v /var/log:/container/logs nginx

# 只读挂载
docker run -d --name readonly-app -v /host/config:/app/config:ro nginx

网络管理

网络基础操作

bash 复制代码
# 网络管理
docker network ls                    # 列出所有网络
docker network create mynetwork     # 创建自定义网络
docker network inspect mynetwork    # 查看网络详情
docker network rm mynetwork         # 删除网络

# 容器连接到网络
docker run -d --name app1 --network mynetwork nginx
docker network connect mynetwork container_name    # 将已存在容器连接到网络
docker network disconnect mynetwork container_name # 断开网络连接

端口映射

bash 复制代码
# 各种端口映射方式
docker run -d -p 8080:80 nginx              # 映射到指定端口
docker run -d -p 127.0.0.1:8080:80 nginx    # 映射到指定IP
docker run -d -P nginx                       # 随机映射所有暴露端口

# 查看端口映射
docker port container_name

Dockerfile和Docker Compose的作用说明

Dockerfile的作用

Dockerfile是什么?

Dockerfile是一个文本文件,包含了一系列指令,用来自动化构建Docker镜像。它就像是"镜像的制作配方"。

主要作用:

  1. 标准化环境构建:确保每次构建的环境完全一致,让团队成员使用相同的运行环境。

  2. 自动化镜像制作

    dockerfile 复制代码
    FROM node:16             # 选择基础环境
    WORKDIR /app             # 设置工作目录
    COPY package.json ./     # 复制依赖文件
    RUN npm install          # 安装依赖
    COPY . .                 # 复制源代码
    CMD ["npm", "start"]     # 设置启动命令

Docker Compose的作用

Docker Compose是什么?

Docker Compose是用来定义和管理多容器应用的工具,通过一个YAML文件描述整个应用的架构。

主要作用:

  1. 多容器编排管理

    yaml 复制代码
    services:
      web:        # Web服务
        image: nginx
      db:         # 数据库服务
        image: mysql
      cache:      # 缓存服务
        image: redis
  2. 简化复杂应用部署:只用一个命令启动整个应用栈、自动处理容器间依赖关系和统一管理网络和数据卷。

  3. 服务间通信管理:自动创建内部网络、服务间可通过服务名直接通信、统一管理端口映射。

两者的关系

协作关系:

  • Dockerfile负责"如何制作镜像"
  • Docker Compose负责"如何编排容器"
  • 通常在docker-compose.yml中引用Dockerfile

使用场景:

场景 使用工具 原因
单个应用容器化 Dockerfile 只需要构建一个镜像
微服务架构部署 Dockerfile + Docker Compose 需要编排多个服务
开发环境搭建 Docker Compose 需要数据库、缓存等多个服务
CI/CD流水线 主要用Dockerfile 构建和推送镜像

总结

  • Dockerfile = "制作配方":告诉Docker如何一步步构建你的应用镜像
  • Docker Compose = "指挥家":协调多个容器协同工作,形成完整的应用系统

两者结合使用,能够实现从单个应用的容器化到复杂系统的自动化部署,是现代软件开发中不可或缺的工具组合。

相关推荐
闲云自留地1 小时前
K8s 的记忆大脑!ETCD 集群部署、etcdctl 命令与备份恢复全通关
容器·kubernetes·etcd
讯捷蓝达2 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
爱和冰阔落4 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
lisanmengmeng5 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮5 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹5 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器
孙克旭_6 小时前
k8s基础组件与创建资源
运维·docker·容器·kubernetes
孙克旭_6 小时前
云原生基础之Containerd容器运行时
运维·云原生
分布式存储与RustFS6 小时前
RustFS 自建对象存储实战目录:110 篇按场景分类(持续更新)
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
无忧_wy6 小时前
MoneyPrinterTurbo 自动化视频生成实战指南
运维·人工智能·自动化·音视频