当前位置: 首页 > news >正文

Docker的使用及核心命令

文章目录

  • Docker基础概念
  • 镜像管理命令
    • 镜像查看和搜索
    • 镜像下载和删除
    • 镜像构建
  • 容器生命周期管理
    • 创建和启动容器
    • 容器控制命令
    • 容器清理
  • 容器交互和调试
    • 进入容器
    • 文件操作
    • 日志和监控
  • 数据管理
    • 数据卷(Volume)
    • 绑定挂载
  • 网络管理
    • 网络基础操作
    • 端口映射
  • Dockerfile和Docker Compose的作用说明
    • Dockerfile的作用
    • Docker Compose的作用
  • 两者的关系
  • 总结

Docker基础概念

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

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

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

镜像管理命令

镜像查看和搜索

# 查看本地镜像列表
docker images
docker image ls# 搜索Docker Hub上的镜像
docker search nginx
docker search --limit 5 mysql  # 限制搜索结果数量

镜像下载和删除

# 下载镜像
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                   # 删除悬空镜像(推荐)

镜像构建

# 从Dockerfile构建镜像
docker build -t myapp:v1.0 .        # 构建并打标签
docker build -t myapp:latest --no-cache .  # 不使用缓存构建# 从容器创建镜像(不推荐,但有时有用)
docker commit container_name new_image:tag

容器生命周期管理

创建和启动容器

# 运行容器的基本命令
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

容器控制命令

# 查看容器状态
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        # 恢复容器

容器清理

# 删除容器
docker rm container_name             # 删除已停止的容器
docker rm -f container_name          # 强制删除运行中的容器
docker rm $(docker ps -aq)          # 删除所有容器# 自动清理
docker container prune               # 删除所有停止的容器
docker system prune                  # 清理未使用的镜像、容器、网络
docker system prune -a               # 更彻底的清理(包括未使用的镜像)

容器交互和调试

进入容器

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

文件操作

# 容器和主机之间复制文件
docker cp file.txt container_name:/app/     # 从主机复制到容器
docker cp container_name:/app/file.txt ./   # 从容器复制到主机# 查看容器文件系统变化
docker diff container_name

日志和监控

# 查看容器日志
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)

# 创建和管理数据卷
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

绑定挂载

# 挂载主机目录到容器
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

网络管理

网络基础操作

# 网络管理
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 # 断开网络连接

端口映射

# 各种端口映射方式
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. 自动化镜像制作

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

Docker Compose的作用

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

主要作用:

  1. 多容器编排管理

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

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

两者的关系

协作关系:

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

使用场景:

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

总结

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

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

http://www.dtcms.com/a/380019.html

相关文章:

  • Jmeter测试
  • 神经网络基本概念
  • 【打包app】uniapp打包ios端和安卓端app
  • 【LeetCode 每日一题】3000. 对角线最长的矩形的面积
  • 制造业档案管理混乱:档案宝如何破解?
  • 第4周 数组的概念和常见操作
  • vue,uniapp 实现卷帘对比效果
  • 鸿蒙 NEXT UI 性能优化实战:打造流畅用户界面的关键策略
  • 使用UniApp实现一个AI对话页面
  • 智能科技与搜索引擎优化关键词的新契机
  • 搜维尔科技:全身可穿戴Teslasuit动捕服的功能,自立式FES装置
  • Java 大视界 -- Java 大数据在智能医疗健康档案数据分析与个性化健康管理中的应用(410)
  • RK3588 Android12默认移除导航栏
  • HBuilder 运行编译器内存溢出
  • lesson59:JavaScript 控制流详解:分支结构与循环语句全指南
  • Avalonia 基础导航实现:从页面切换到响应式交互全指南
  • 【连载2】C# MVC 自定义错误页设计:404/500 处理与 SEO 优化
  • java jdbc连接sqlserver2008R2版本数据库报错,驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
  • 企业级AI大模型选型指南:从评估部署到安全实践
  • Spring Boot + Redis 缓存性能优化实战:从5秒到毫秒级的性能提升
  • 【Vue2手录09】购物车实战
  • 【论文阅读】Uncertainty Modeling for Out-of-Distribution Generalization (ICLR 2022)
  • PAT乙级_1111 对称日_Python_AC解法_无疑难点
  • Kafka面试精讲 Day 16:生产者性能优化策略
  • vue 批量自动引入并注册组件或路由
  • Kubernetes(K8s)详解
  • 趣味学solana(介绍)
  • Apache Thrift:跨语言服务开发的高性能RPC框架指南
  • Flutter 应用国际化 (i18n) 与本地化 (l10n) 完整指南
  • 第 5 篇:深入浅出学 Java 语言(JDK8 版)—— 精通类与对象进阶,掌握 Java 面向对象核心能力