当前位置: 首页 > ds >正文

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 示例
# 使用官方 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"]
构建镜像命令
docker build -t my-python-app:latest .
镜像的存储与分发

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

查看本地镜像
docker images
删除镜像
docker rmi <image-id>

Docker 容器

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

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

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

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

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

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

Docker 仓库

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

Docker Hub

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

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

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

使用 Docker Registry

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

docker run -d -p 5000:5000 --name registry registry:2
推送镜像到私有仓库
docker tag my-image:latest localhost:5000/my-image:latest
docker push localhost:5000/my-image:latest
http://www.xdnf.cn/news/12629.html

相关文章:

  • keil编译工程,结合map文件和bin文件,实测C语言中不同类型的变量存储在不同的内存区域
  • 柴油发电机组接地电阻柜的作用
  • yolov8自训练模型作为预训练权重【增加新类别】注意事项
  • 我用Amazon Q写了一个Docker客户端,并上架了懒猫微服商店
  • Web 3D协作平台开发案例:构建制造业远程设计与可视化协作
  • PC端直接打印功能(包括两张图片合并功能)
  • html 滚动条滚动过快会留下边框线
  • 2022年CSP-S1提高级第一轮题解
  • C++11新增标准讲解(上)
  • 【递归、搜索与回溯】专题三 穷举vs暴搜vs回溯vs剪枝
  • 【Vue】指令补充+样式绑定+计算属性+侦听器
  • 6.6 打卡
  • 西门子 S7-1200 PLC 海外远程运维技术方案
  • vue3+TS+eslint9配置
  • 《强连通分量》题集
  • 如何在Windows本机安装Python并确保与Python.NET兼容
  • day46python打卡
  • 1.4 编译库:静态库、动态库
  • Java并发包中的管程:Lock和Condition
  • 基于STM32语音识别柔光台灯
  • 基于深度学习的无人机轨迹预测
  • 《ERP原理与应用教程》第3版习题和答案
  • VSCode - VSCode 放大与缩小代码
  • 嵌入式开发之STM32学习笔记day22
  • 深入解析:为什么 Redis 比 MySQL 快
  • 如何轻松、安全地管理密码(新手指南)
  • 创客匠人:如何通过精准定位实现创始人IP打造与知识变现
  • [C语言实战]C语言操作MySQL数据库(八)
  • Ubuntu18.6 学习QT问题记录以及虚拟机安装Ubuntu后的设置
  • 下载和安装Visual Studio(开发ASP.NET MVC应用)