Dockerfile、Image与Container三者的关系


什么是Dockerfile?

Dockerfile是一个用来构建Docker镜像的文本文件,其中包含了构建镜像所需的一系列指令与说明。可以把Dockerfile看作是一个构建脚本,通过它可以自动化地生成Docker镜像。

Dockerfile的基本结构通常包括四个部分:

  • 基础镜像信息:使用FROM指令指定一个基础镜像,这是构建新镜像的起点
  • 维护者信息:使用MAINTAINER指令指定镜像的维护者信息
  • 镜像操作指令:包括RUN、CMD、EXPOSE、ENV等指令,用于在基础镜像上进行各种操作
  • 容器启动指令:使用CMD或ENTRYPOINT指令指定容器启动时要执行的命令

简单比喻:Dockerfile就像是大楼的设计蓝图,定义了如何构建整个项目环境


什么是Image?

Image(镜像)是一个只读的模板,用于创建Docker容器。可以把Image看作是面向对象思想中的类,它包含了运行某个应用所需的所有文件和配置信息)。

Image的特点:

  • 只读性:镜像是不可变的,一旦创建就不能修改分层结构:镜像由一层一层的Layer组成,就像大楼的每一层
  • 包含内容:包含应用程序运行所需的一切,比如代码、运行时、库和环境变量等
  • 轻量级:共享主机操作系统内核,启动速度快,资源利用率高

简单比喻:Image就像是根据设计图盖好的大楼,里面有所有的设施,但还不能运作。


什么是Container?

Container(容器)是Docker的运行实例,它是Image的实例化。每个Container都是相互隔离的,保证了应用的安全性。可以把Container看作是面向对象思想中的对象,它是Image的具体运行实例。

Container的特点:

  • 隔离环境:是一个轻量级、可移植的、独立的环境,包含应用程序及其所有依赖项
  • 可写层:在镜像的基础上添加一个可写层,可以修改容器内的文件
  • 快速启动:启动时间极快,通常只需几秒钟
  • 资源共享:共享主机操作系统的内核,但具有隔离的用户空间

简单比喻:Container就像是运作中的大楼,人们可以进出并互动。

常用Docker命令

命令 功能 示例
docker run 启动一个新的容器并运行命令 docker run -d ubuntu
docker ps 列出当前正在运行的容器 docker ps
docker ps -a 列出所有容器(包括已停止的容器) docker ps -a
docker build 使用 Dockerfile 构建镜像 docker build -t my-image .
docker images 列出本地存储的所有镜像 docker images
docker pull 从 Docker 仓库拉取镜像 docker pull ubuntu
docker push 将镜像推送到 Docker 仓库 docker push my-image
docker exec 在运行的容器中执行命令 docker exec -it container_name bash
docker stop 停止一个或多个容器 docker stop container_name
docker start 启动已停止的容器 docker start container_name
docker restart 重启一个容器 docker restart container_name
docker rm 删除一个或多个容器 docker rm container_name
docker rmi 删除一个或多个镜像 docker rmi my-image
docker logs 查看容器的日志 docker logs container_name
docker inspect 获取容器或镜像的详细信息 docker inspect container_name
docker exec -it 进入容器的交互式终端 docker exec -it container_name /bin/bash
docker network ls 列出所有 Docker 网络 docker network ls
docker volume ls 列出所有 Docker 卷 docker volume ls
docker-compose up 启动多容器应用(从 docker-compose.yml 文件) docker-compose up
docker-compose down 停止并删除由 docker-compose 启动的容器、网络等 docker-compose down
docker info 显示 Docker 系统的详细信息 docker info
docker version 显示 Docker 客户端和守护进程的版本信息 docker version
docker stats 显示容器的实时资源使用情况 docker stats
docker login 登录 Docker 仓库 docker login
docker logout 登出 Docker 仓库 docker logout

常用选项说明:

  • -d:后台运行容器,例如 docker run -d ubuntu。
  • -it:以交互式终端运行容器,例如 docker exec -it container_name bash。
  • -t:为镜像指定标签,例如 docker build -t my-image .。

参考文章

Docker 容器使用 | 菜鸟教程

使用工具

Excalidraw Whiteboard