本文介绍了Docker的基本概念、安装方法、常用命令以及镜像和容器的管理,帮助新手快速掌握Docker的使用。文章详细解释了如何搭建Docker环境、管理镜像和容器,以及使用Docker Compose部署多容器应用。通过实战案例,展示如何将一个简单的Python Web应用程序容器化部署。本文为初学者提供了全面的指导,涵盖了从环境搭建到部署的应用全过程。
Docker 是一个开源的应用容器引擎,可以将应用及其依赖打包成一个可移植的容器,方便在任何支持Docker的环境中运行,如Linux、Windows等。容器之间完全隔离,并且具有资源利用率高、启动速度快等特点。
使用 Docker 之前,了解一些基本概念和术语是必要的:
Docker 的主要特点包括:
Docker 支持多种操作系统,安装步骤略有不同。以下是安装 Docker 的常见步骤:
对于基于 Debian 的系统(如 Ubuntu),可以通过以下命令安装 Docker:
sudo apt-get update sudo apt-get install docker.io
对于基于 RHEL 的系统(如 CentOS),可以通过以下命令安装 Docker:
sudo yum install -y docker sudo systemctl start docker sudo systemctl enable docker
Docker 提供了图形界面的安装程序,可以从 Docker 官方网站下载安装包并按照提示进行安装。
安装完成后,可以通过以下命令开始使用 Docker:
docker --version
docker images
docker ps -a
docker run -it ubuntu:latest /bin/bash
使用 docker pull
命令下载镜像:
docker pull ubuntu:latest
使用 docker run
命令运行容器:
docker run -d -p 8080:80 nginx
-d
:后台运行容器。-p
:端口映射,将宿主机的 8080 端口映射到容器的 80 端口。使用 docker ps
命令查看正在运行的容器:
docker ps
使用 docker ps -a
查看所有容器(包括停止的):
docker ps -a
使用 docker stop
命令停止容器:
docker stop <container_id>
使用 docker rm
命令删除容器:
docker rm <container_id>
使用 docker pull
命令下载镜像:
docker pull nginx:latest
创建镜像的基本步骤如下:
docker build
命令构建镜像。首先,创建一个目录并进入该目录:
mkdir myapp cd myapp
然后,在该目录下创建一个 Dockerfile
文件,内容如下:
# 使用官方 Python 运行时作为父镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 复制当前目录下的 myapp 文件夹内容到容器的 /app 目录 COPY . /app # 安装应用所需的依赖 RUN pip install --no-cache-dir flask # 定义环境变量 ENV NAME World # 运行应用 CMD ["python", "app.py"]
接下来,构建镜像:
docker build -t myapp:latest .
-t
:指定镜像的标签。.
:表示 Dockerfile 所在目录。docker login
docker tag myapp:latest <username>/myapp:latest
docker push <username>/myapp:latest
运行容器的基本命令如下:
docker run -d -p 8080:80 nginx
停止容器:
docker stop <container_id>
查看正在运行的容器:
docker ps
查看所有容器(包括停止的):
docker ps -a
使用 -p
参数进行端口映射:
docker run -d -p 8080:80 nginx
使用 --network
参数指定网络:
docker run --network=my_network myapp
使用 -v
参数进行卷映射:
docker run -d -v /host/path:/container/path nginx
查看卷信息:
docker volume ls
Docker Compose 是一个用来定义和运行多容器 Docker 应用的工具。使用 Dockerfile 来定义环境,用 docker-compose.yml
来配置运行环境。Docker Compose 可以定义多个容器的启动和依赖关系,简化了多容器应用的部署过程。
docker-compose.yml
文件来配置所有容器的启动参数,便于管理和维护。docker-compose.yml
文件假设我们有一个简单的 Python 应用,需要一个 Web 服务器容器和一个数据库容器。以下是一个简单的 docker-compose.yml
文件示例:
version: '3' services: web: build: ./web ports: - "80:80" depends_on: - db db: image: postgres:latest environment: POSTGRES_PASSWORD: example
version
:指定 Docker Compose 文件的版本。services
:定义服务容器。web
:定义一个 web 服务容器。
build
:指定 Dockerfile 所在的目录。ports
:端口映射。depends_on
:指定 web 服务依赖的其他服务。db
:定义一个数据库服务容器。
image
:指定使用的镜像。environment
:设置环境变量。使用 docker-compose up
启动所有服务:
docker-compose up
使用 docker-compose down
停止并清理所有服务:
docker-compose down
选择一个简单的应用程序,例如一个 Python Web 应用程序,使用 Flask 框架。
首先,创建应用目录结构:
mkdir myapp cd myapp
在 myapp
目录下创建 app.py
文件,内容如下:
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' if __name__ == '__main__': app.run(host='0.0.0.0', port=80)
创建 Dockerfile
文件,内容如下:
# 使用官方 Python 运行时作为父镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 复制当前目录下的 myapp 文件夹内容到容器的 /app 目录 COPY . /app # 安装应用所需的依赖 RUN pip install --no-cache-dir flask # 定义环境变量 ENV NAME World # 运行应用 CMD ["python", "app.py"]
构建镜像:
docker build -t myapp:latest .
使用 docker run
命令启动容器:
docker run -d -p 8080:80 myapp:latest
-d
:后台运行容器。-p
:端口映射,将宿主机的 8080 端口映射到容器的 80 端口。打开浏览器,访问 http://localhost:8080
,可以看到 "Hello, World!" 页面。
总结,通过以上步骤,我们成功地将一个简单的 Python Web 应用程序使用 Docker 进行了容器化部署。这为后续更复杂的项目提供了基础。