跳到主要内容

Docker 基本概念

介绍

Docker 是一个开源平台,用于开发、部署和运行应用程序。它通过容器化技术,将应用程序及其依赖项打包到一个轻量级、可移植的容器中,从而确保应用程序在任何环境中都能一致运行。Docker 的核心概念包括容器、镜像、Dockerfile 和 Docker Hub 等。

容器(Container)

容器是 Docker 的核心概念之一。它是一个轻量级、独立的可执行软件包,包含运行应用程序所需的所有内容:代码、运行时、系统工具、系统库和设置。容器与虚拟机不同,它们共享主机操作系统的内核,因此更加轻量级和高效。

提示

容器是隔离的,这意味着一个容器中的应用程序不会影响其他容器或主机系统。

容器的生命周期

  1. 创建:使用 docker create 命令创建一个容器。
  2. 启动:使用 docker start 命令启动一个已创建的容器。
  3. 停止:使用 docker stop 命令停止一个正在运行的容器。
  4. 删除:使用 docker rm 命令删除一个容器。
bash
# 创建一个容器
docker create --name my_container nginx

# 启动容器
docker start my_container

# 停止容器
docker stop my_container

# 删除容器
docker rm my_container

镜像(Image)

镜像是容器的模板。它包含运行应用程序所需的所有文件和依赖项。镜像是一个只读文件,容器是从镜像创建的实例。你可以从 Docker Hub 下载现有的镜像,也可以使用 Dockerfile 创建自定义镜像。

备注

镜像可以看作是容器的“蓝图”,而容器是镜像的“实例”。

拉取镜像

使用 docker pull 命令从 Docker Hub 拉取镜像:

bash
docker pull nginx

列出镜像

使用 docker images 命令列出本地所有的镜像:

bash
docker images

删除镜像

使用 docker rmi 命令删除本地镜像:

bash
docker rmi nginx

Docker file

Dockerfile 是一个文本文件,包含一系列指令,用于构建 Docker 镜像。通过 Dockerfile,你可以定义应用程序的环境、依赖项和配置。

示例 Dockerfile

dockerfile
# 使用官方的 Python 镜像作为基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制当前目录下的所有文件到容器的 /app 目录
COPY . /app

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

# 暴露端口
EXPOSE 80

# 运行应用程序
CMD ["python", "app.py"]

构建镜像

使用 docker build 命令根据 Dockerfile 构建镜像:

bash
docker build -t my-python-app .

Docker Hub

Docker Hub 是一个公共的镜像仓库,类似于 GitHub,但用于 Docker 镜像。你可以从 Docker Hub 下载现有的镜像,也可以将自己的镜像推送到 Docker Hub。

推送镜像到 Docker Hub

首先,使用 docker login 登录 Docker Hub:

bash
docker login

然后,使用 docker tag 为镜像打标签,并使用 docker push 推送镜像:

bash
docker tag my-python-app username/my-python-app
docker push username/my-python-app

实际案例

假设你正在开发一个 Python Web 应用程序,并且希望在不同的环境中部署它。使用 Docker,你可以创建一个包含所有依赖项的镜像,并在任何支持 Docker 的环境中运行它。

  1. 开发环境:在本地开发时,使用 Docker 容器运行应用程序,确保环境一致性。
  2. 测试环境:在测试服务器上使用相同的镜像进行测试,确保测试环境与开发环境一致。
  3. 生产环境:在生产服务器上使用相同的镜像部署应用程序,确保生产环境与开发和测试环境一致。

总结

Docker 通过容器化技术,提供了一种轻量级、可移植的方式来打包和运行应用程序。理解 Docker 的基本概念,如容器、镜像、Dockerfile 和 Docker Hub,是掌握 Docker 的关键。通过使用 Docker,你可以确保应用程序在任何环境中都能一致运行,从而提高开发和部署的效率。

附加资源

练习

  1. 使用 docker pull 命令拉取一个 Ubuntu 镜像,并运行一个交互式容器。
  2. 编写一个简单的 Dockerfile,构建一个包含 Python 应用程序的镜像,并运行它。
  3. 将你构建的镜像推送到 Docker Hub,并在另一台机器上拉取并运行它。