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
相关推荐
JavaPub-rodert1 小时前
我又把自己的 Go 后台管理系统升级了一遍:文件管理、2GB 上传、私有文件预览、Docker 镜像全安排上了
开发语言·docker·golang·shiyuadmin
爱码少年2 小时前
嗯,腾讯云个人小站Docker镜像下载功能已下线,压力给到阿里云镜像站
docker
Zhu7582 小时前
在docker环境部署frp
运维·docker·容器
承渊政道5 小时前
飞牛NAS部署Immich:搭建家庭相册并实现远程访问
运维·服务器·docker·内网穿透·cpolar·nas·immich
x-cmd5 小时前
用 Rust 打造 AI 时代的 SQL:把重复任务变成可执行文件
数据库·人工智能·sql·ai·容器·rust·workflow
ruofu336 小时前
如何让docker使用提前下载好的镜像,而不是在线拉取
java·spring cloud·docker
童槿顏丶20 小时前
docker自动化部署脚本
docker·eureka·自动化
爱莉希雅&&&1 天前
K8s NFS+StorageClass+PV/PVC+Deployment 实战笔记
笔记·容器·kubernetes
GlueNa2SiO31 天前
06-Docker存储与数据持久化
笔记·学习·docker
一位正在转型AI全栈的前端工程师1 天前
前端转全栈:从 502 到 200,我的第一个 Docker+Nginx+Node.js 项目
docker·容器