本文详细介绍了Docker的基本概念和使用方法,包括Docker是什么、如何安装、基本命令以及Dockerfile的编写。文章还探讨了Docker在Web应用部署、数据库容器化和微服务架构中的应用场景,并提供了最佳实践和安全建议。
Docker简介Docker 是一款开源的应用容器引擎,它允许开发者将应用及其依赖项打包成一个可移植的容器。通过 Docker,这些容器可以在任何支持 Linux 的系统上运行,无需额外安装操作系统。容器利用 Linux 内核提供的 cgroups 和 namespaces 功能实现资源隔离和限制。cgroups 用于管理进程的资源使用情况,而 namespaces 则提供了一个独立的、隔离的环境。
# 更新系统包 sudo apt-get update # 安装必要的包 sudo apt-get install apt-transport-https ca-certificates curl software-properties-common # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 添加Docker官方仓库 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # 安装Docker CE(社区版) sudo apt-get update sudo apt-get install docker-ce
# 更新系统包 sudo apt-get update # 安装必要的包 sudo apt-get install -y apt-transport-https ca-certificates curl # 添加Docker官方GPG密钥 sudo apt-get update sudo apt-get install -y software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 添加Docker官方仓库 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" # 安装Docker CE(社区版) sudo apt-get update sudo apt-get install docker-ce
# 安装必要的包 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加Docker官方仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装Docker CE sudo yum install -y docker-ce
# 安装必要的包 sudo yum install -y dnf-plugins-core # 添加Docker官方仓库 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装Docker CE sudo yum install -y docker-ce
sudo systemctl start docker
docker --versionDocker基本命令
docker pull <image_name>
docker images
docker rmi <image_id_or_name>
docker build -t <image_name> .
docker run -d --name <container_name> -p 8080:80 <image_name>
docker ps
docker stop <container_id_or_name>
docker rm <container_id_or_name>
docker network ls
docker network create --driver bridge my_network
docker volume ls
docker volume create my_volumeDockerfile入门
Dockerfile 是一个文本文件,包含了构建 Docker 镜像所需的指令。通过 Dockerfile,可以自动化构建 Docker 镜像,提高构建效率和一致性。
# 使用官方的 Python 基础镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 复制应用代码到工作目录 COPY app.py requirements.txt /app/ # 安装应用依赖 RUN pip install --no-cache-dir -r requirements.txt # 暴露应用需要监听的端口 EXPOSE 8080 # 设置环境变量 ENV NAME World # 定义启动命令 CMD ["python", "app.py"]
可以将整个 Web 应用程序及其依赖项打包到一个 Docker 镜像中,然后部署到任何有 Docker 支持的环境中。这样可以确保在不同环境中的应用程序行为一致,避免环境依赖问题。
示例:使用 Flask 搭建一个简单的 Web 应用
pip install 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')
# 使用官方 Python 基础镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 将当前目录下的 `app.py` 文件复制到容器的 `/app` 目录下 COPY app.py /app/ # 暴露应用程序外部需要监听的端口 EXPOSE 8080 # 设置环境变量 ENV NAME World # 定义启动时需要执行的命令 CMD ["python", "app.py"]
# 构建 Docker 镜像 docker build -t flask-app . # 运行容器 docker run -d --name flask-container -p 8080:8080 flask-app
可以将数据库服务(如 MySQL、PostgreSQL)容器化,通过 Dockerfile 自动化部署,简化数据库环境的搭建过程。
示例:使用 MySQL 搭建数据库容器
# 使用官方 MySQL 基础镜像 FROM mysql:5.7 # 设置环境变量 ENV MYSQL_ROOT_PASSWORD=root # 将初始化数据库脚本复制到容器中 COPY init.sql /docker-entrypoint-initdb.d/init.sql
# init.sql CREATE DATABASE mydb; CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin123'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost'; FLUSH PRIVILEGES;
# 构建 Docker 镜像 docker build -t mydb . # 运行容器 docker run -d --name mydb-container -p 3306:3306 mydb
在微服务架构中,每个服务可以独立地部署和扩展。使用 Docker 可以将每个微服务及其依赖项打包成一个镜像,然后在容器中运行。
示例:使用 Docker 搭建一个简单的微服务架构
# 使用官方 Python 基础镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 将当前目录下的 `app.py` 文件复制到容器的 `/app` 目录下 COPY app.py /app/ # 暴露应用需要监听的端口 EXPOSE 8080 # 设置环境变量 ENV NAME World # 定义启动命令 CMD ["python", "app.py"]
# 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')
# 构建 Docker 镜像 docker build -t microservice . # 运行容器 docker run -d --name microservice-container -p 8080:8080 microserviceDocker最佳实践
USER
指令限制容器运行时的用户权限。通过以上教程,你可以轻松掌握 Docker 的基本使用方法,并能够将其应用到实际项目中。希望本文能够帮助你更好地理解和使用 Docker。