Docker 概念与容器化技术
Docker 是一种容器化平台,能够将应用程序及其依赖项打包成一个容器,确保在任何环境中都能一致运行。容器化技术通过操作系统级别的虚拟化,为应用程序提供了一个独立的运行环境。
容器化技术的核心优势
- 一致性:Docker 容器确保了开发、测试和生产环境的一致性,减少了环境差异带来的问题。
- 隔离性:每个容器都是独立运行的,互不影响,提升了系统的安全性和稳定性。
- 便携性:Docker 镜像可以在任何支持 Docker 的环境中运行,无需额外配置。
- 高效性:Docker 容器共享宿主机的内核,资源占用更少,启动速度更快。
Docker 架构概述
Docker 的架构包括以下几个核心组件:
- Docker Client:用户与 Docker 交互的接口,用于发送命令。
- Docker Daemon:后台运行的进程,负责创建、运行和管理容器。
- 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 提供了多种网络模式,包括:
- bridge:默认模式,容器运行在独立的网络栈中,通过 Docker 的网桥进行通信。
- host:容器使用宿主机的网络栈。
- 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