本文详细介绍了Docker环境部署教程,涵盖了Docker的基本概念、安装方法、基本操作和常用命令。文章还深入探讨了Docker的环境配置,包括配置文件和环境变量设置,并提供了部署简单Web应用和数据库服务的实例。此外,还介绍了Docker Compose的基础使用方法,帮助读者更好地理解和使用Docker。
Docker简介Docker 是一个开源的应用容器引擎,它可以让开发者将应用程序和其依赖项打包到一个轻量级、可移植的容器中,以便在任何环境中一致地运行。Docker 容器运行在通用 Linux 内核的主机操作系统上,这使得它们在资源消耗、启动速度和性能方面都优于虚拟机。
# 使用官方的 Python 运行时作为父镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 将当前目录下的所有文件复制到容器内 /app 目录下 COPY . /app # 安装所需的依赖 RUN pip install --no-cache-dir -r requirements.txt # 容器启动时执行的命令 CMD ["python", "app.py"]安装Docker
以 Ubuntu 为例:
sudo apt-get update
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 docker-ce-cli containerd.io
sudo docker run hello-world
使用 docker pull
命令从 Docker Hub 拉取镜像:
docker pull nginx:latest
使用 docker run
命令运行容器:
docker run -d --name my-nginx -p 8080:80 nginx:latest
-d
:后台运行容器--name
:指定容器的名称-p
:端口映射,将容器内的 80 端口映射到主机的 8080 端口使用 docker ps
命令来查看正在运行的容器:
docker ps
使用 docker ps -a
命令查看所有容器,包括已停止的容器:
docker ps -a
使用 docker stop
命令来停止正在运行的容器:
docker stop my-nginx
使用 docker rm
命令来删除容器:
docker rm my-nginxDocker常用命令
docker images
:列出所有本地镜像docker inspect
:查看容器或镜像的详细信息docker logs
:查看容器的日志输出docker commit
:将容器保存为新的镜像查看本地镜像:
docker images
查看容器的详细信息:
docker inspect <container-id>
查看容器的日志输出:
docker logs <container-id>
将容器保存为新的镜像:
docker commit <container-id> my-custom-imageDocker环境配置
Docker 配置文件通常位于 /etc/docker/daemon.json
,用于指定 Docker 的一些全局设置。例如,可以设置 Docker 的监听地址和存储位置:
{ "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"], "storage-driver": "overlay2", "log-level": "warn" }
可以使用环境变量来配置 Docker 的运行时行为。例如,在启动容器时设置环境变量:
docker run -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d --name my-mysql mysql:5.7
Docker 支持多种网络模式,包括 bridge
、host
、overlay
和 none
。可以通过 docker network
命令来创建和管理网络。
创建一个桥接网络:
docker network create my-bridge-network
将容器连接到一个网络:
docker run -d --name my-nginx --network my-bridge-network -p 8080:80 nginx:latest
查看网络列表:
docker network ls
查看网络详细信息:
docker network inspect my-bridge-network
# 使用官方的 Python 运行时作为父镜像 FROM python:3.8-slim # 设置环境变量 ENV PYTHONUNBUFFERED=1 # 设置工作目录 WORKDIR /app # 将当前目录下的所有文件复制到容器内 /app 目录下 COPY . /app # 安装所需的依赖 RUN pip install --no-cache-dir -r requirements.txt # 容器启动时执行的命令 CMD ["python", "app.py"]Docker实践案例
假设有一个简单的 Flask 应用,首先创建一个 Flask 应用:
# 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=8080)
创建一个 requirements.txt
文件,列出应用依赖:
Flask==2.0.1
创建 Dockerfile,将应用打包成镜像:
# 使用官方的 Python 运行时作为父镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 将当前目录下的所有文件复制到容器内 /app 目录下 COPY . /app # 安装所需的依赖 RUN pip install --no-cache-dir -r requirements.txt # 容器启动时执行的命令 CMD ["python", "app.py"]
构建并运行容器:
docker build -t my-flask-app . docker run -d --name my-flask-app -p 8080:8080 my-flask-app
以 MySQL 数据库为例,部署一个 MySQL 数据库容器:
docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:5.7
连接到 MySQL 数据库:
docker exec -it my-mysql mysql -uroot -p
在 MySQL 数据库中创建一个新的数据库:
CREATE DATABASE mydb;
创建一个简单的表:
CREATE TABLE mydb.users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(150) NOT NULL );
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。首先创建一个 docker-compose.yml
文件:
version: '3' services: web: image: nginx:latest container_name: my-nginx ports: - "8080:80" depends_on: - db db: image: mysql:5.7 container_name: my-mysql environment: MYSQL_ROOT_PASSWORD: my-secret-pw MYSQL_DATABASE: mydb
使用 Docker Compose 启动容器:
docker-compose up -d
停止并清除容器:
docker-compose down总结
本文介绍了 Docker 的基本概念、安装方法、基本操作、常用命令、环境配置及一些实践案例。通过本文,你可以了解到如何安装 Docker、如何使用 Docker 部署应用和数据库服务,以及如何使用 Docker Compose 管理多容器应用。希望这些内容能帮助你更好地理解和使用 Docker。