Docker 容器化基础:镜像、容器与仓库的本质解析

Docker 概念与容器化技术

Docker 是一种容器化平台,能够将应用程序及其依赖项打包成一个容器,确保在任何环境中都能一致运行。容器化技术通过操作系统级别的虚拟化,为应用程序提供了一个独立的运行环境。

容器化技术的核心优势
  1. 一致性:Docker 容器确保了开发、测试和生产环境的一致性,减少了环境差异带来的问题。
  2. 隔离性:每个容器都是独立运行的,互不影响,提升了系统的安全性和稳定性。
  3. 便携性:Docker 镜像可以在任何支持 Docker 的环境中运行,无需额外配置。
  4. 高效性:Docker 容器共享宿主机的内核,资源占用更少,启动速度更快。
Docker 架构概述

Docker 的架构包括以下几个核心组件:

  1. Docker Client:用户与 Docker 交互的接口,用于发送命令。
  2. Docker Daemon:后台运行的进程,负责创建、运行和管理容器。
  3. Docker Hub:Docker 镜像的中央仓库,用户可以从中拉取或推送镜像。

Docker 镜像

Docker 镜像是容器运行的基础,一个只读的模板,包含了构建容器所需的代码、配置文件和依赖项。

镜像的结构

Docker 镜像由多个层组成,每一层都是只读的,通过联合文件系统(UnionFS)叠加在一起,形成最终的文件系统。这种分层结构使得镜像的构建、存储和传输更加高效。

镜像的命名规则

Docker 镜像的命名格式为:仓库名/镜像名:标签。其中:

  • 仓库名:镜像所属的仓库,通常是用户名或组织名。
  • 镜像名:镜像的名称,通常是应用程序或服务的名称。
  • 标签 :用于标识镜像的版本或特定配置,默认为 latest
构建 Docker 镜像

Docker 镜像可以通过 Dockerfile 构建。Dockerfile 是一个文本文件,包含了一系列构建镜像的指令。

Dockerfile 示例
dockerfile 复制代码
# 使用官方 Python 镜像作为基础
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制当前目录的 requirements.txt 到工作目录
COPY requirements.txt .

# 安装依赖项
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用程序代码
COPY . .

# 暴露端口
EXPOSE 8000

# 设置环境变量
ENV PYTHONUNBUFFERED=1

# 运行命令
CMD ["python", "app.py"]
构建镜像命令
bash 复制代码
docker build -t my-python-app:latest .
镜像的存储与分发

Docker 镜像可以存储在本地,也可以推送到 Docker 仓库(如 Docker Hub)中,以便在其他环境中使用。

查看本地镜像
bash 复制代码
docker images
删除镜像
bash 复制代码
docker rmi <image-id>

Docker 容器

Docker 容器是从 Docker 镜像创建的运行实例,每个容器都是一个独立的进程,拥有自己的文件系统、网络栈和进程空间。

创建与运行容器
从镜像创建容器并运行
bash 复制代码
docker run -it --name my-container my-image:latest /bin/bash
  • -it:允许交互式 shell。
  • --name:指定容器名称。
  • /bin/bash:容器启动时执行的命令。
后台运行容器
bash 复制代码
docker run -d --name my-container my-image:latest
  • -d:后台运行。
容器的生命周期管理
查看运行中的容器
bash 复制代码
docker ps
停止容器
bash 复制代码
docker stop my-container
启动容器
bash 复制代码
docker start my-container
重启容器
bash 复制代码
docker restart my-container
删除容器
bash 复制代码
docker rm my-container
容器的资源限制

Docker 提供了多种方式来限制容器的资源使用,例如 CPU、内存等。

限制 CPU 资源
bash 复制代码
docker run -it --cpus=2 my-image:latest
限制内存资源
bash 复制代码
docker run -it --memory=512m my-image:latest
容器的网络配置

Docker 提供了多种网络模式,包括:

  1. bridge:默认模式,容器运行在独立的网络栈中,通过 Docker 的网桥进行通信。
  2. host:容器使用宿主机的网络栈。
  3. none:容器没有网络栈,适用于不需要网络通信的场景。
示例:暴露端口
bash 复制代码
docker run -p 8000:8000 my-image:latest
  • -p:将容器的 8000 端口映射到宿主机的 8000 端口。

Docker 仓库

Docker 仓库是存储和分发 Docker 镜像的地方,常用的有 Docker Hub 和私有仓库。

Docker Hub

Docker Hub 是 Docker 官方提供的公共仓库,用户可以在其中拉取和推送镜像。

从 Docker Hub 拉取镜像
bash 复制代码
docker pull python:3.9-slim
推送镜像到 Docker Hub
bash 复制代码
docker tag my-image:latest <your-username>/my-image:latest
docker push <your-username>/my-image:latest
私有仓库

私有仓库可以用于存储内部的镜像,确保安全性和控制权。

使用 Docker Registry

Docker Registry 是一个官方提供的私有仓库镜像,可以用于搭建私有仓库。

bash 复制代码
docker run -d -p 5000:5000 --name registry registry:2
推送镜像到私有仓库
bash 复制代码
docker tag my-image:latest localhost:5000/my-image:latest
docker push localhost:5000/my-image:latest
相关推荐
一个向上的运维者2 小时前
详细解读k8s的kind中service与pod的区别
容器·k8s
Davie_Liu7 小时前
【Docker Buildx】docker buildx本地构建多架构镜像,拉取镜像时的网络延迟问题(已解决)
网络·docker·buildx
_Walli_7 小时前
k8s集群搭建(三)-------- Dashboard UI
云原生·容器·kubernetes
target酱11 小时前
Docker部署全流程
前端·docker
橙*^O^*安13 小时前
Kubernetes集群部署Jenkins指南
云原生·容器·kubernetes·jenkins·devops
Anthony_23113 小时前
MySQL的常用命令
运维·数据库·mysql·adb·docker
傻傻虎虎13 小时前
【Docker】常用帮忙、镜像、容器、其他命令合集(1)
运维·docker·容器
2301_7943339114 小时前
Docker Compose 运行 Milvus (Mac) 并与 python 连接测试
macos·docker·milvus
三十_19 小时前
【Docker】学习 Docker 的过程中,我是这样把镜像越做越小的
前端·后端·docker
Lin_Aries_042120 小时前
使用阿里云容器镜像服务 ACR
linux·阿里云·docker·云原生·centos·云计算