乐闻世界logo
搜索文章和话题

什么是 Docker?Docker 的核心概念和常用命令有哪些?

2月22日 14:31

答案

Docker 是一个开源的容器化平台,它可以将应用程序及其依赖项打包到一个轻量级、可移植的容器中,从而实现应用程序在任何环境中的快速部署和运行。

Docker 的核心概念

1. 镜像(Image)

Docker 镜像是一个只读的模板,包含了运行应用程序所需的所有内容:代码、运行时、库、环境变量和配置文件。镜像是分层构建的,每一层都是只读的。

特点:

  • 只读模板
  • 分层结构
  • 可复用和共享
  • 通过 Dockerfile 定义

2. 容器(Container)

容器是镜像的运行实例。它是一个轻量级、独立的可执行软件包,包含了运行应用程序所需的一切。容器共享宿主机的操作系统内核,但彼此隔离。

特点:

  • 轻量级(相比虚拟机)
  • 快速启动(秒级)
  • 资源隔离
  • 可移植性强

3. 仓库(Registry)

Docker 仓库用于存储和分发 Docker 镜像。最常用的是 Docker Hub,也可以搭建私有仓库。

常用仓库:

  • Docker Hub(官方公共仓库)
  • Docker Registry(私有仓库)
  • Harbor(企业级私有仓库)
  • AWS ECR、Google GCR(云厂商仓库)

Docker 与虚拟机的区别

特性Docker 容器虚拟机
启动速度秒级分钟级
资源占用MB 级GB 级
性能接近原生有一定损耗
隔离性进程级隔离硬件级隔离
可移植性中等
管理复杂度

Dockerfile 常用指令

dockerfile
# 基础镜像 FROM ubuntu:20.04 # 维护者信息 MAINTAINER yourname@example.com # 设置工作目录 WORKDIR /app # 复制文件 COPY . /app # 安装依赖 RUN apt-get update && apt-get install -y python3 # 设置环境变量 ENV PYTHONUNBUFFERED=1 # 暴露端口 EXPOSE 8080 # 运行命令 CMD ["python3", "app.py"]

常用指令说明:

  • FROM:指定基础镜像
  • RUN:执行命令
  • COPY/ADD:复制文件到镜像
  • CMD/ENTRYPOINT:容器启动时执行的命令
  • ENV:设置环境变量
  • EXPOSE:声明容器监听的端口
  • VOLUME:创建挂载点
  • WORKDIR:设置工作目录

Docker 常用命令

镜像操作

bash
# 搜索镜像 docker search nginx # 拉取镜像 docker pull nginx:latest # 查看本地镜像 docker images # 删除镜像 docker rmi nginx:latest # 构建镜像 docker build -t myapp:v1 .

容器操作

bash
# 运行容器 docker run -d -p 80:80 --name mynginx nginx # 查看运行中的容器 docker ps # 查看所有容器 docker ps -a # 停止容器 docker stop mynginx # 启动容器 docker start mynginx # 删除容器 docker rm mynginx # 查看容器日志 docker logs mynginx # 进入容器 docker exec -it mynginx /bin/bash

Docker 的优势

  1. 一致性:开发、测试、生产环境完全一致
  2. 可移植性:一次构建,到处运行
  3. 快速部署:秒级启动,快速扩展
  4. 资源效率:相比虚拟机占用更少资源
  5. 微服务架构:天然支持微服务部署
  6. 版本控制:镜像可以版本化管理
  7. 持续集成:易于集成到 CI/CD 流程

Docker 最佳实践

  1. 使用官方基础镜像:优先使用官方镜像,确保安全性
  2. 最小化镜像大小:使用 alpine 等轻量级基础镜像
  3. 多阶段构建:减少最终镜像大小
  4. 不要在容器中存储数据:使用 Volume 持久化数据
  5. 使用 .dockerignore:排除不必要的文件
  6. 一个容器一个进程:遵循单一职责原则
  7. 安全扫描:定期扫描镜像漏洞
  8. 标签管理:使用语义化版本标签

Docker 网络模式

  • bridge:默认模式,容器通过 Docker 网桥通信
  • host:容器使用宿主机网络栈
  • none:容器没有网络接口
  • container:容器共享另一个容器的网络栈
  • 自定义网络:创建用户定义的网络

Docker 数据持久化

bash
# 创建数据卷 docker volume create mydata # 挂载数据卷 docker run -v mydata:/data nginx # 挂载主机目录 docker run -v /host/path:/container/path nginx

Docker 是现代云原生应用的基础设施,它通过容器化技术极大地简化了应用程序的部署和管理,是 DevOps 工具链中不可或缺的重要组成部分。

标签:Devops