【Docker基础】Docker核心概念:容器(Container)与镜像(Image)的区别与联系

目录

引言

[1 Docker镜像(Image)](#1 Docker镜像(Image))

[1.1 镜像的定义](#1.1 镜像的定义)

[1.2 镜像的特点](#1.2 镜像的特点)

[1.3 镜像的创建](#1.3 镜像的创建)

[1.4 镜像的结构](#1.4 镜像的结构)

[1.5 镜像结构描述](#1.5 镜像结构描述)

[2 Docker容器(Container)](#2 Docker容器(Container))

[2.1 容器的定义](#2.1 容器的定义)

[2.2 容器的特点](#2.2 容器的特点)

[2.3 容器的创建与运行](#2.3 容器的创建与运行)

[2.4 容器的生命周期流程](#2.4 容器的生命周期流程)

[2.5 容器生命周期流程描述](#2.5 容器生命周期流程描述)

[3 镜像与容器的区别与联系](#3 镜像与容器的区别与联系)

[3.1 区别](#3.1 区别)

[3.2 联系](#3.2 联系)

[3.3 镜像与容器的关系](#3.3 镜像与容器的关系)

[4 总结](#4 总结)


引言

随着容器化技术的快速发展,Docker已经成为开发和运维领域中不可或缺的工具。Docker 的核心概念包括容器(Container)和镜像(Image),这两个概念虽然紧密相关,但有着本质的区别。理解它们的区别与联系,对于深入掌握Docker技术至关重要。

1 Docker镜像(Image)

1.1 镜像的定义

Docke镜像是一个 只读模板,用于创建Docker容器。
镜像包含了运行某个软件所需的所有文件系统、库、环境变量和配置文件。可以将其类比为传统虚拟机中的"快照"或"模板",但镜像更加轻量级,因为它只包含必要的文件,而不是整个操作系统。

1.2 镜像的特点

  • 只读性:镜像一旦创建,就不能被修改。任何修改都需要通过创建一个新的镜像来实现
  • 分层结构:镜像由多个只读层组成,每一层代表了对前一层的一个修改(如添加文件、修改配置等),这种分层结构使得镜像的构建和分发更加高效
  • 可复用性:镜像可以在不同的环境中复用,确保了应用在不同环境中的一致性

1.3 镜像的创建

镜像通常通过Dockerfile定义并构建,Dockerfile是一个文本文件,包含了一系列指令,用于自动化构建镜像,例如:

复制代码
# 使用官方 Ubuntu 基础镜像
FROM ubuntu:20.04

# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive

# 安装软件包
RUN apt-get update && apt-get install -y \
    curl \
    wget \
    && rm -rf /var/lib/apt/lists/*

# 复制文件到镜像中
COPY app.py /app/app.py

# 暴露端口
EXPOSE 80

# 设置容器启动时执行的命令
CMD ["python", "/app/app.py"]
  • 通过 docker build****命令,可以基于Dockerfile构建镜像:

    docker build -t my-image .

1.4 镜像的结构

1.5 镜像结构描述

  • Base Image:基础镜像,通常是官方提供的操作系统镜像(如Ubuntu)
  • Layer 1 :安装软件包层,包含所有通过RUN指令安装的软件包
  • Layer 2 :文件复制层,包含通过COPY或ADD指令复制到镜像中的文件
  • Layer 3 :环境配置层,包含通过ENV、WORKDIR等指令设置的环境变量和配置
  • Final Image:最终构建的镜像,由所有层叠加而成

2 Docker容器(Container)

2.1 容器的定义

Docker容器是镜像的 运行实例。
容器是轻量级的、独立的、可执行的应用包,包含了运行应用所需的所有东西:代码、运行时、系统工具、系统库和设置
容器可以看作是一个隔离的进程,运行在宿主机的操作系统之上

2.2 容器的特点

  • 可运行性:容器是镜像的运行实例,可以启动、停止、重启和删除
  • 隔离性:容器提供了进程级别的隔离,每个容器都有自己的文件系统、网络栈和进程空间
  • 可移植性:容器可以在任何支持 Docker 的环境中运行,确保了应用的一致性

2.3 容器的创建与运行

  • 容器可以通过docker run命令基于镜像创建并运行,例如:

    docker run -d -p 8080:80 --name my-container my-app

  • -d:后台运行容器
  • -p 8080:80:将宿主机的8080端口映射到容器的80端口
  • --name my-container:为容器指定名称
  • my-image:使用的镜像名称

2.4 容器的生命周期流程

2.5 容器生命周期流程描述

  • Create Container:基于镜像创建容器,但此时容器并未运行
  • Start Container:启动容器,使其进入运行状态
  • Container Running:容器正在运行,可以执行应用逻辑
  • Stop Container :通过docker stop命令停止容器,容器进入退出状态
  • Kill Container :通过docker kill命令强制终止容器,容器进入退出状态
  • Container Exited:容器已退出,可以重新启动或删除
  • Restart Container :通过docker restart命令重新启动已退出的容器
  • Remove Container :通过docker rm命令删除容器,释放资源

3 镜像与容器的区别与联系

3.1 区别

|------|--------------|-------------------|
| 维度 | 镜像(Image) | 容器(Container) |
| 存在形式 | 静态模板 | 动态实例 |
| 存储特性 | 只读分层 | 可写层+只读层 |
| 生命周期 | 长期存储 | 临时运行 |
| 创建方式 | docker build | docker run/create |
| 数量关系 | 1:N | 1:1 |
| 磁盘占用 | 较大(包含完整环境) | 较小(增量存储) |
| 修改影响 | 创建新镜像 | 实时生效 |

3.2 联系

  • 镜像与容器的关系:容器是镜像的运行实例,没有镜像就无法创建容器,镜像为容器提供了运行环境,容器则是镜像的具体执行
  • 镜像的复用性:同一个镜像可以创建多个容器实例,每个容器实例都是独立的,互不影响
  • 容器的可变性 :容器在运行过程中可以修改文件系统、环境变量等,但这些修改不会影响原始镜像,如果需要将容器的修改保存为新的镜像,可以使用docker commit命令

3.3 镜像与容器的关系

4 总结

Docker镜像和容器是Docker技术的核心概念,理解它们的区别与联系对于掌握Docker至关重要。

  • 镜像是一个只读模板,用于创建容器
  • 容器是镜像的运行实例, 具有生命周期和可变性,通过Dockerfile可以自动化构建镜像,而docker run命令则用于基于镜像创建并运行容器
    掌握镜像和容器的概念,可以帮助开发者更高效地打包、分发和运行应用,提高开发和运维的效率。
相关推荐
小码过河.4 分钟前
CentOS 搭建 Docker 私有镜像仓库
linux·docker·centos
飞询3 小时前
部署 coze-loop
docker·coze
龙卷风04053 小时前
使用本地IDEA连接服务器远程构建部署Docker服务
后端·docker
呉師傅3 小时前
佳能iR-ADV C5560复印机如何扫描文件到电脑
运维·网络·windows·计算机外设·电脑
半梦半醒*4 小时前
Linux网络管理
linux·运维·网络·centos·运维开发
破刺不会编程4 小时前
linux线程概念和控制
linux·运维·服务器·开发语言·c++
Nightwish55 小时前
Linux随记(二十一)
linux·运维·服务器
IT成长日记7 小时前
【自动化运维神器Ansible】Ansible常用模块之File模块详解
运维·自动化·ansible·file·常用模块
獭.獭.7 小时前
Linux -- 文件【上】
linux·运维·服务器·进程·pcb
不会敲代码的XW7 小时前
高可用集群KEEPALIVED的详细部署
运维·云原生