什么是 Docker?
Docker 是一个开源的容器化平台,它能将应用程序及其依赖(如库、配置文件等)打包到标准化单元(容器)中,确保应用在任何支持 Docker 的环境中都能一致运行。与传统虚拟机不同,容器不需要模拟完整的操作系统,而是共享宿主机器的内核,因此更轻量、启动更快、资源占用更低。
Docker 的核心原理
Docker 基于 Linux 内核的三大核心技术实现容器化:
-
Namespace(命名空间)
用于隔离容器的运行环境,包括进程、网络、文件系统、用户等。每个容器都有独立的命名空间,使其看起来拥有自己的 “独立系统”,但实际共享宿主内核。 -
Cgroups(控制组)
限制容器对 CPU、内存、磁盘 I/O 等资源的使用,防止单个容器占用过多资源影响其他容器或宿主。 -
UnionFS(联合文件系统)
一种分层文件系统,允许将多个目录(层)挂载到同一个目录下。Docker 镜像通过分层存储,每层只读,容器运行时在镜像层之上添加可写层,实现高效的镜像复用和版本管理。
Docker 的核心概念
- 镜像(Image):应用的 “模板”,包含运行所需的代码、依赖、配置等,只读不可修改。
- 容器(Container):镜像的运行实例,可读写,是独立的应用运行单元。
- 仓库(Repository):存储和分发镜像的平台(如 Docker Hub 公共仓库,或私有仓库)。
- Dockerfile:用于构建镜像的文本文件,包含一系列构建指令(如安装依赖、复制文件等)。
如何使用 Docker?
1. 安装 Docker
- Windows/Mac:安装 Docker Desktop(内置 Docker 引擎、CLI 等工具)。
- Linux:通过包管理器安装 Docker Engine(如
apt install docker-ce或yum install docker-ce)。
验证安装:
docker --version # 查看版本
docker run hello-world # 运行测试容器,成功则安装正常
2. 基本操作命令
| 功能 | 命令示例 |
|---|---|
| 拉取镜像 | docker pull 镜像名:标签(如 docker pull nginx:latest) |
| 查看本地镜像 | docker images |
| 运行容器 | docker run --name 容器名 -d -p 宿主端口:容器端口 镜像名(如 docker run --name mynginx -d -p 80:80 nginx) |
| 查看运行中的容器 | docker ps(加 -a 查看所有容器) |
| 停止 / 启动容器 | docker stop 容器名/ID / docker start 容器名/ID |
| 进入容器内部 | docker exec -it 容器名/ID /bin/bash |
| 删除容器 | docker rm 容器名/ID(需先停止容器) |
| 删除镜像 | docker rmi 镜像名/ID(需先删除依赖它的容器) |
如何用 Docker 部署程序?
以部署一个简单的 Python 应用为例,步骤如下:
1. 准备应用代码
创建 app.py:
python
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Docker!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
创建 requirements.txt(依赖列表):
flask==2.0.1
2. 编写 Dockerfile
创建 Dockerfile(无扩展名),定义镜像构建规则:
dockerfile
# 基础镜像(Python 环境)
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY app.py .
# 暴露容器端口(与应用端口一致)
EXPOSE 5000
# 启动命令
CMD ["python", "app.py"]
3. 构建镜像
在 Dockerfile 所在目录执行:
docker build -t my-python-app:v1 . # -t 给镜像命名和打标签,. 表示当前目录
4. 运行容器部署应用
docker run -d -p 8080:5000 --name myapp my-python-app:v1
-d:后台运行-p 8080:5000:将宿主机器的 8080 端口映射到容器的 5000 端口--name myapp:给容器命名
5. 访问应用
打开浏览器访问 http://localhost:8080,即可看到 "Hello, Docker!"。
进阶:发布与部署到服务器
-
推送镜像到仓库(如 Docker Hub):
docker login # 登录 Docker Hub docker tag my-python-app:v1 你的用户名/my-python-app:v1 # 打标签 docker push 你的用户名/my-python-app:v1 # 推送镜像 -
在服务器部署:
在目标服务器上安装 Docker 后,拉取镜像并运行:docker pull 你的用户名/my-python-app:v1 docker run -d -p 80:5000 你的用户名/my-python-app:v1
通过 Docker,你可以轻松实现应用的 “一次构建,到处运行”,极大简化了开发、测试和生产环境的一致性问题。
Docker容器化技术全面解析
2419

被折叠的 条评论
为什么被折叠?



