本文详细介绍了Docker环境部署学习的全过程,从Docker的安装步骤到基本概念,再到常用命令和环境配置,帮助读者全面掌握Docker的使用方法。文章还通过实战案例展示了如何部署一个简单的Web应用,进一步加深了对Docker环境部署学习的理解。Docker环境部署学习不仅涵盖了理论知识,还包括了实际操作和配置技巧。
Docker 是一个开源的应用容器引擎,它让开发者可以将应用及其依赖封装到一个可移植的容器中。Docker 使用客户端-服务器 (CLI-Server) 架构,客户端可以发送请求到 Docker 守护进程 (Docker daemon)。守护进程负责处理这些请求,并返回应答。Docker 容器是独立的、轻量级的、可移植的、自包含的运行环境,用于运行应用。Docker 为应用提供一个标准的生命周期管理,从开发、测试到部署。
安装 Docker 的步骤因操作系统而异。这里以安装在 Ubuntu 上为例。
sudo apt-get update sudo apt-get upgrade
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
sudo systemctl start docker
sudo systemctl enable docker
sudo docker --version
安装完成后,运行以下命令验证 Docker 安装是否成功:
sudo docker --version
输出类似:
Docker version 20.10.0, build e790763
这表明 Docker 已经成功安装。
Docker 镜像是一个只读模板,用于创建 Docker 容器。镜像包含运行一个容器时需要的所有文件和配置。Docker 镜像通过 Dockerfile 来构建。
Dockerfile 示例:
# 使用官方的 Python 运行时作为父镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 复制当前目录下的app.py文件到镜像的工作目录下 COPY app.py /app # 安装运行程序所需的依赖 RUN pip install --no-cache-dir Flask # 指定运行时程序的入口 CMD ["python", "./app.py"]
Docker容器是镜像的运行实例。容器是轻量级的、独立的、可移植的运行环境,用于运行应用。容器从镜像创建时获得其环境和配置。
Docker仓库是存放镜像的地方,Docker Hub 是官方提供的公共仓库,用户可以在其中查找和上传镜像。此外,也可以使用私有仓库来存储和分发镜像。
使用 Dockerfile 构建镜像后,可以通过以下命令来创建并运行容器:
# 构建镜像 docker build -t myapp . # 启动容器 docker run -d -p 4000:5000 myapp
# 启动容器并使用容器ID或容器名称查看日志 docker logs <container_id_or_name>
查看正在运行的容器:
docker ps
查看所有容器(包括停止的):
docker ps -a
列出所有本地镜像:
docker images
删除镜像:
docker rmi <image_id>
从 Docker Hub 拉取镜像:
docker pull nginx:latest
删除所有不再使用的镜像:
docker image prune
Docker容器可以通过在启动命令中设置环境变量来改变其运行时的行为。环境变量可以使用 -e
选项来定义。
示例:
docker run -e ENV_VAR=value my_image
Docker 提供了多种网络模式,包括桥接网络、主机网络、和容器网络(也称为用户自定义网络)。其中,用户自定义网络允许容器间通过网络进行通信,而无需直接使用宿主机的网络接口。
创建用户自定义网络:
docker network create my_network
启动容器并关联网络:
docker run --network=my_network --name=my_container -d my_image
Docker 使用 daemon.json
文件来配置 Docker 守护进程。该文件通常位于 /etc/docker/daemon.json
。
示例配置文件:
{ "exec-ids": ["a", "b"], "hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"], "insecure-registries": ["myregistry.example.com"], "mtu": 1400, "log-opts": { "max-size": "10m", "max-file": "3" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override青山程序猿: 在"Docker容器的持久化存储"部分添加了具体的使用示例: ### Docker容器的持久化存储 #### 数据卷的使用 数据卷是 Docker 容器中持久存储数据的机制。数据卷可以不受容器生命周期的影响,即使容器被销毁,数据卷中的数据仍然保留。 **创建并使用数据卷**: ```bash docker run -v /host:/container my_image
数据卷容器专门用于存储数据,可以被其他容器挂载。创建一个数据卷容器:
docker create --name data_volumes --volume /data alpine
启动并挂载数据卷容器中的数据卷:
docker run -it --volumes-from data_volumes my_image
通过使用数据卷,多个容器可以共享相同的数据卷。这样,即使容器被销毁,数据依然可以被其他容器访问。
示例:
# 创建数据卷容器 docker create --name my_data --volume /data alpine # 启动第一个容器并挂载数据卷 docker run -it --volumes-from my_data my_image # 启动第二个容器并挂载相同的数据卷 docker run -it --volumes-from my_data my_image
选择一个适合应用的官方或第三方Docker镜像。这里以使用 Python Flask 应用为例,选择 python:3.8-slim
作为基础镜像。
根据应用特性编写相应的 Dockerfile。以下是一个简单的 Flask 应用的 Dockerfile 示例:
# 使用官方的 Python 运行时作为父镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 复制应用代码到镜像的工作目录 COPY app.py /app # 安装运行程序所需的依赖 RUN pip install --no-cache-dir Flask # 指定运行时程序的入口 CMD ["python", "./app.py"]
构建 Docker 镜像:
docker build -t my_flask_app .
运行容器:
docker run -d -p 4000:5000 my_flask_app
http://localhost:4000
,查看 Flask 应用是否正常运行。