本文详细介绍了Docker课程的基础知识和应用方法,涵盖了Docker的安装、基本概念、常用命令、创建与管理Docker镜像,以及网络配置和数据卷的使用。通过实际案例演示了如何使用Docker来运行Web应用和数据库服务,帮助读者快速掌握Docker课程中的关键技能和操作步骤。
Docker 是一个开源的容器化平台,它通过提供一致的开发、构建、部署和管理应用程序的环境,使得应用程序能够在几乎任何环境中运行。Docker 通过在操作系统层实现虚拟化,使用称为容器的技术来封装应用程序及其依赖项,这样可以确保应用程序在不同的环境中具有相同的行为。
Docker 具有以下主要优点:
Docker 的安装过程依赖于你的操作系统。以下是如何在不同的操作系统上安装 Docker 的简要说明:
Linux: 你可以通过以下命令安装 Docker。
# 更新包列表 sudo apt-get update # 安装 Docker sudo apt-get install docker-ce docker-ce-cli containerd.io # 验证 Docker 是否安装成功 sudo docker --version
Windows: 你可以从 Docker 官方网站直接下载 Windows 版本的 Docker 安装包。
安装完成后,你可以通过命令行验证 Docker 是否正确安装:
docker --version
镜像是 Docker 容器的基础。镜像可以看作是一组文件的集合,其中包含了应用程序的依赖、运行环境等所有所需信息。镜像可以通过 Docker 的命令行工具创建,或者从 Docker Hub(一个公共的注册表仓库)下载。
# 基于官方的 Ubuntu 镜像创建一个新的镜像 docker pull ubuntu:latest docker run -it ubuntu:latest /bin/bash
容器是镜像的运行实例。容器提供了独立的运行环境,包括操作系统、库、文件系统等。每个容器都是从一个镜像创建的,并且可以独立启动、停止、删除。
# 启动一个新的 Ubuntu 容器 docker run -it ubuntu:latest /bin/bash
仓库是一个存放镜像的地方,可以理解为一个大仓库,里面存放了各种各样的镜像。Docker Hub 是一个官方的公共镜像仓库,用户可以从 Docker Hub 下载官方镜像,也可以上传自己构建的镜像到 Docker Hub。
# 从 Docker Hub 下载 Ubuntu 的最新镜像 docker pull ubuntu:latest
用户可以通过 Docker Hub 搜索镜像,并根据需要下载到本地。例如,搜索 MySQL 镜像:
docker search mysql
用户可以使用 docker pull
命令下载已有的镜像。例如,下载官方 MySQL 镜像:
docker pull mysql:latest
用户可以使用 docker run
命令来创建一个新的容器并启动它。例如,创建一个新的 MySQL 容器:
docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:latest
-d
:以分离模式运行容器,即后台运行--name my-mysql
:指定容器的名字-e MYSQL_ROOT_PASSWORD=my-secret-pw
:设置环境变量,这里设置 MySQL 的 root 密码mysql:latest
:指定使用的镜像名用户可以使用 docker start
命令启动已经创建的容器。例如,启动之前创建的 MySQL 容器:
docker start my-mysql
如果需要进入容器执行命令,可以使用 docker exec
命令进入正在运行的容器。例如,进入 MySQL 容器并执行 MySQL 命令:
docker exec -it my-mysql mysql -u root -p
Dockerfile 是一个文本文件,包含了构建 Docker 镜像的所有指令。它描述了如何将一个基础镜像逐步构建为最终的应用镜像。
# 使用官方的 Python 镜像作为基础镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 将当前目录下的 Python 应用代码复制到容器中 COPY . /app # 设置环境变量 ENV PYTHONUNBUFFERED=1 # 安装依赖 RUN pip install --no-cache-dir -r requirements.txt # 暴露容器运行时使用的端口 EXPOSE 8000 # 定义运行容器时要执行的命令 CMD ["python", "app.py"]
使用 docker build
命令来构建 Docker 镜像。例如,使用上面的 Dockerfile 构建一个新的镜像:
docker build -t my-python-app:latest .
-t
:为构建的镜像指定标签my-python-app:latest
:镜像名称和版本标签.
:Dockerfile 所在的目录使用 docker push
命令将镜像上传到 Docker Hub 或其他私有仓库。
docker push my-python-app:latest
Docker 提供了多种网络模式来连接容器,常见的有 host
、bridge
和 overlay
网络等。
# 创建一个自定义网络 docker network create my-net # 创建并连接到该网络的容器 docker run -d --name my-nginx --network my-net -p 8080:80 nginx:latest
docker network create my-net
:创建一个新的网络,命名为 my-net
--network my-net
:将容器连接到指定的网络-p 8080:80
:将容器内的 80 端口映射到主机的 8080 端口数据卷是 Docker 容器的数据持久化解决方案。数据卷可以存储容器内的数据,并且这些数据不会随着容器的删除或重建而丢失。
# 创建一个名为 my-volume 的数据卷 docker volume create my-volume # 启动一个容器,并将本地数据卷挂载到容器内 docker run -d --name my-nginx -v my-volume:/data nginx:latest
docker volume create my-volume
:创建一个新的数据卷,命名为 my-volume
-v my-volume:/data
:将容器内的 /data
目录挂载到数据卷 my-volume
你可以使用 Docker 来运行一个简单的 Python Flask Web 应用。以下是一个简化的示例。
# app.py from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello, World!" if __name__ == "__main__": app.run(host='0.0.0.0', port=8080)
# 使用官方的 Python 镜像作为基础镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 将当前目录下的 Python 应用代码复制到容器中 COPY . /app # 设置环境变量 ENV FLASK_APP=app.py # 暴露容器运行时使用的端口 EXPOSE 8080 # 定义运行容器时要执行的命令 CMD ["flask", "run", "--host=0.0.0.0"]
# 构建 Docker 镜像 docker build -t my-flask-app:latest . # 运行 Docker 容器 docker run -d --name my-flask-app -p 8080:8080 my-flask-app:latest
下面是一个 MySQL 数据库服务的 Docker 实现。
# 下载 MySQL 镜像 docker pull mysql:latest # 启动 MySQL 容器 docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 mysql:latest
mysql:latest
:使用 mysql:latest
镜像启动容器-e MYSQL_ROOT_PASSWORD=my-secret-pw
:设置 MySQL 的 root 密码3306:3306
:将容器内的 3306 端口映射到主机的 3306 端口你可以使用 mysql
命令来访问 MySQL 数据库:
# 进入 MySQL 容器 docker exec -it my-mysql mysql -u root -p # 在 MySQL 中创建一个新的数据库 CREATE DATABASE mydb;