阳江网站制作公司,计算机基础网页制作教程,wordpress 不更新,wordpress链接 颜色1. 什么是容器
容器是一种轻量级的、可移植的、自包含的软件单元#xff0c;它包含运行应用程序所需的所有内容#xff0c;包括代码、运行时、系统工具、系统库和设置。容器与虚拟机类似#xff0c;但它们更加轻量级#xff0c;并且依赖于宿主内核。容器可以使用 Docker 等…1. 什么是容器
容器是一种轻量级的、可移植的、自包含的软件单元它包含运行应用程序所需的所有内容包括代码、运行时、系统工具、系统库和设置。容器与虚拟机类似但它们更加轻量级并且依赖于宿主内核。容器可以使用 Docker 等工具进行创建、管理和部署。
容器的优势: 轻量级: 容器比虚拟机更轻量级因为它们不需要包含完整的操作系统。 可移植: 容器可以在任何支持 Docker 的平台上运行而无需进行修改。 快速启动: 容器启动速度比虚拟机快得多。 资源隔离: 容器可以相互隔离并限制其使用的资源。 易于管理: 容器可以使用 Docker 等工具进行轻松管理。
2. 容器与虚拟机的区别
容器和虚拟机都是用于运行应用程序的技术但它们之间存在一些关键差异 \容器虚拟机虚拟化级别操作系统级别硬件级别依赖性依赖于宿主内核拥有独立的内核体积轻量级较重启动速度快慢资源消耗低高 3. Docker 镜像与容器的基本概念
Docker 镜像: 镜像是一个只读的模板它包含构建容器所需的所有文件和配置。镜像可以从 Docker Hub 等公共仓库下载也可以自行构建。
Docker 容器: 容器是镜像的运行实例它是一个独立的、沙盒化的环境拥有自己的文件系统、网络、进程空间等。容器可以创建、启动、停止、删除等。
4. Docker 的基本命令 docker images: 查看本地镜像 docker pull: 拉取镜像 docker push: 推送镜像 docker build: 构建镜像 docker run: 运行容器 docker ps: 查看运行中的容器 docker stop: 停止容器 docker rm: 删除容器 docker exec: 进入容器 docker logs: 查看容器日志
5. 在不同操作系统上安装 Docker
5.1 Linux 安装 Docker
下载安装包: 从 Docker 官网下载适用于您 Linux 发行版的安装包https://www.docker.com/get-started 也可以使用以下命令下载最新版本的 Docker 社区版 (CE): curl -fsSL https://get.docker.com | sh安装 Docker: 按照下载脚本的说明进行安装 对于某些发行版可能需要额外添加用户组: sudo groupadd docker
sudo usermod -aG docker $USER验证安装: docker version5.2 Windows 安装 Docker
下载安装包: 从 Docker 官网下载适用于 Windows 的 Docker Desktop 安装程序https://www.docker.com/get-started
安装 Docker Desktop: 运行安装程序并按照说明进行安装 安装过程中需要配置 WSL 2 和 Hyper-V
验证安装: docker version5.3 macOS 安装 Docker
下载安装包: 从 Docker 官网下载适用于 macOS 的 Docker Desktop 安装程序https://www.docker.com/get-started
安装 Docker Desktop: 运行安装程序并按照说明进行安装
验证安装: docker version6. Docker 基本配置
6.1 配置镜像加速器: 镜像加速器可以提高镜像拉取速度建议配置国内镜像加速器例如阿里云镜像加速器: {registry-mirrors: [https://docker.mirrors.ustc.edu.cn]
}将上述内容写入 ~/.docker/daemon.json 文件
6.2 配置日志和存储: 可以通过 --log-opt 参数配置容器日志的存储位置和格式 可以通过 -v 参数将宿主目录挂载到容器中用于持久化数据存储
使用案例: 使用 Docker 运行一个简单的 Web 应用程序: # 拉取 Nginx 镜像
docker pull nginx# 运行 Nginx 容器
docker run -p 80:80 nginx访问 http://localhost:80 即可看到 Nginx 的欢迎页面
7.Docker 容器生命周期管理
7.1. 创建容器
7.1.1 使用 docker create 命令
docker create 命令用于创建容器但不启动容器。该命令允许用户指定镜像、配置参数、挂载数据卷等为容器的启动做好准备。
命令格式: docker create [OPTIONS] IMAGE [COMMAND] [ARG...]参数说明: OPTIONS: 创建容器的选项例如 -p 端口映射、-v 数据卷挂载、-e 环境变量设置等 IMAGE: 要创建的镜像名称 COMMAND: 容器启动时要执行的命令 ARG: 传递给容器的参数
最佳实践: 使用 docker inspect 命令检查容器配置是否符合预期。 尽量使用配置文件而非命令行参数进行配置以提高可读性和维护性。 仅在必要时才指定 COMMAND 和 ARG 参数以便保持容器的灵活性。
7.1.2 使用 Dockerfile 构建镜像
Dockerfile 是一种文本文件用于定义镜像的构建过程。通过编写 Dockerfile可以自动化镜像构建过程并确保镜像的一致性和可重复性。
Dockerfile 示例:
FROM nginxRUN echo Hello World index.html
最佳实践: 使用多阶段构建优化镜像大小和性能。 缓存构建步骤以提高构建效率。 使用 RUN 命令安装应用程序和依赖项。 使用 CMD 命令设置容器启动时默认执行的命令。
7.1.3. 多阶段构建
多阶段构建是一种将镜像构建过程分解为多个阶段的技术。每个阶段都包含一组特定的指令用于完成特定的任务。例如可以将编译和运行时环境分离成不同的阶段。
优势: 提高镜像构建效率: 并行执行不同阶段的构建任务显著缩短构建时间。 减少镜像大小: 仅包含运行时所需的依赖项降低镜像体积优化资源占用。 增强镜像安全性: 隔离构建过程中的敏感信息提升镜像安全性降低潜在风险。
使用示例:
FROM golang:1.18-alpine AS build
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o main
FROM nginx:alpine
COPY --frombuild /app/main /usr/bin/nginx
CMD [nginx, -conf, /etc/nginx/conf.d/default.conf]定义两个阶段build 和 main。 build 阶段: 使用 golang:1.18-alpine 镜像作为基础镜像。 编译 Go 代码并生成可执行文件 main。 main 阶段: 使用 nginx:alpine 镜像作为基础镜像。 复制 main 可执行文件到 /usr/bin/nginx 目录。 设置容器启动命令为 nginx -conf /etc/nginx/conf.d/default.conf。
7.2. 启动容器
7.2.1 使用 docker run 命令
docker run 命令用于启动容器并运行应用程序。该命令可以根据镜像创建并运行容器并可以指定端口映射、环境变量、数据卷等参数。
命令格式:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
参数说明: OPTIONS: 运行容器的选项与 docker create 命令相同 IMAGE: 要运行的镜像名称 COMMAND: 容器启动时要执行的命令 ARG: 传递给容器的参数
最佳实践: 使用 -d 参数以守护进程模式运行容器以便在后台运行应用程序。 使用 -p 参数映射容器端口到宿主机的端口以便访问应用程序。 使用 -v 参数挂载数据卷以便持久化容器数据。 使用 -e 参数设置环境变量以便配置应用程序。
7.2.2 使用 docker start 命令
docker start 命令用于启动已创建但未运行的容器。
命令格式:
docker start CONTAINER_ID
参数说明: CONTAINER_ID: 要启动的容器 ID
最佳实践: 在启动容器之前检查容器的状态和配置是否正确。 使用 docker logs 命令查看容器启动日志以便排查问题。
7.3. 运行容器
7.3.1 容器内操作 使用 docker exec 命令进入容器以便进行调试、维护等操作。
命令格式:
docker exec -it CONTAINER_ID /bin/bash
参数说明: -it: 分配伪tty并保持连接 CONTAINER_ID: 要进入的容器 ID 使用 docker attach 命令连接到正在运行的容器以便实时查看容器输出。
命令格式:
docker attach CONTAINER_ID
参数说明: CONTAINER_ID: 要连接的容器 ID
7.3.2 容器监控 使用 docker stats 命令查看容器的资源使用情况例如 CPU、内存、网络等。
命令格式:
docker stats CONTAINER_ID
参数说明: CONTAINER_ID: 要查看的容器 ID 使用 docker logs 命令查看容器的日志输出。
命令格式:
docker logs CONTAINER_ID
参数说明: CONTAINER_ID: 要查看的容器 ID
最佳实践: 使用监控工具监控容器的运行状况例如 Prometheus、Grafana 等。
8. 从 Docker Hub 拉取镜像
8.1.1 使用 docker pull 命令
docker pull 命令用于从 Docker Hub 等镜像仓库拉取镜像。
命令格式:
docker pull [OPTIONS] REPOSITORY/IMAGE[:TAG]
参数说明: OPTIONS: 拉取镜像的选项例如 --insecure-registry 绕过安全检查 REPOSITORY/IMAGE: 镜像仓库/镜像名称 TAG: 镜像标签用于指定镜像版本
使用案例:
# 拉取最新版本的 Nginx 镜像docker pull nginx
# 拉取指定版本的 Nginx 镜像docker pull nginx:1.17
最佳实践: 尽量使用官方镜像或可靠的第三方镜像以确保镜像的安全性和稳定性。 使用 docker images 命令查看本地镜像列表以便管理镜像。 使用 docker tag 命令为镜像添加标签以便方便地引用和管理不同版本的镜像。
8.2. 创建自定义镜像
8.2.1 使用 docker build 命令构建镜像
docker build 命令用于根据 Dockerfile 构建镜像。
命令格式:
docker build [OPTIONS] PATH | URL
参数说明: OPTIONS: 构建镜像的选项例如 -t 指定镜像名称 PATH: Dockerfile 文件所在的目录 URL: Dockerfile 文件的 URL 地址
使用案例:
# 构建当前目录下的 Dockerfile 镜像docker build -t my-nginx .
# 构建指定 URL 的 Dockerfile 镜像docker build -t my-nginx https://github.com/my-project/my-nginx/Dockerfile 最佳实践: 使用多阶段构建优化镜像大小和性能。 缓存构建步骤以提高构建效率。 使用 RUN 命令安装应用程序和依赖项。 使用 CMD 命令设置容器启动时默认执行的命令。
8.3. 推送镜像
8.3.1 使用 docker push 命令
docker push 命令用于将镜像推送到 Docker Hub 等镜像仓库。
命令格式:
docker push [OPTIONS] REPOSITORY/IMAGE[:TAG]
参数说明: OPTIONS: 推送镜像的选项例如 --username 和 --password 用于身份验证 REPOSITORY/IMAGE: 镜像仓库/镜像名称 TAG: 镜像标签用于指定镜像版本
使用案例:
# 将本地镜像推送到 Docker Hubdocker push nginx
# 将本地镜像推送到指定仓库docker push my-registry/my-nginx
# 将本地镜像推送到指定仓库的指定版本docker push my-registry/my-nginx:1.0
最佳实践: 仅推送安全可靠的镜像到公共仓库。 使用私有仓库来存储敏感或内部使用的镜像。 使用镜像签名来确保镜像的完整性和安全性。
8.4. 删除镜像
8.4.1 使用 docker rmi 命令
docker rmi 命令用于删除本地镜像。
命令格式:
docker rmi [OPTIONS] IMAGE[:TAG]
参数说明: OPTIONS: 删除镜像的选项例如 -f 强制删除 IMAGE[:TAG] 要删除的镜像名称和标签
使用案例:
# 删除所有本地镜像docker rmi -f $(docker images -a -q)
# 删除指定镜像docker rmi nginx
# 删除指定版本的镜像docker rmi nginx:1.17最佳实践: 定期清理本地镜像以节省存储空间。 仅删除不再使用的镜像以避免意外删除。
9.Docker Compose
Docker Compose 是用于定义和运行多容器应用程序的工具。它使用 YAML 文件 来描述应用程序的组成部分以及它们之间的关系。通过 Docker Compose您可以轻松地启动、停止、缩放和管理由多个容器组成的应用程序。
9.1. 编写 Docker Compose 文件的基本语法
Docker Compose 文件的语法由以下几个部分组成 版本: 指定 Docker Compose 文件的版本。 服务: 定义应用程序中的每个服务。 网络: 定义应用程序使用的网络。 卷: 定义应用程序使用的卷。 环境: 定义应用程序的环境变量。
服务 是 Docker Compose 文件的核心部分。它描述了一个容器的配置包括: 镜像: 要使用的镜像名称。 容器名称: 容器的名称。 端口: 容器暴露的端口。 环境: 容器的环境变量。 volumes: 容器使用的卷。 depends_on: 容器启动依赖的其他容器。
以下是一个简单的 Docker Compose 文件示例:
version: 3
services: web: image: nginx ports: - 80:80 db: image: postgres environment: - POSTGRES_PASSWORDpassword volumes: - db-data:/var/lib/postgresql/data
volumes: db-data:
在这个例子中我们定义了两个服务 web: 使用 nginx 镜像暴露 80 端口。 db: 使用 postgres 镜像并设置环境变量 POSTGRES_PASSWORD 为 password使用卷 db-data 存储数据库数据。
9.2. 容器编排和管理
Docker Compose 提供以下命令来管理容器: docker-compose up: 启动所有定义的容器。 docker-compose down: 停止所有定义的容器。 docker-compose ps: 列出所有运行的容器。 docker-compose logs: 查看容器的日志。 docker-compose build: 构建镜像。 docker-compose scale: 缩放服务中的容器数量。
以下是一些使用 Docker Compose 进行容器编排和管理的示例: 启动所有容器:
docker-compose up 停止所有容器:
docker-compose down 查看所有运行的容器:
docker-compose ps 查看容器的日志:
docker-compose logs 构建镜像:
docker-compose build 缩放服务中的容器数量:
docker-compose scale web3
9.3.多容器应用的编排和运行示例 一个完整的 Web 应用:
我们将以一个完整的 Web 应用为例演示如何使用 Docker Compose 进行编排和运行。该应用包含以下组件: Nginx 作为 Web 服务器 Python Flask 应用程序 PostgreSQL 数据库
步骤一创建 Docker Compose 文件
version: 3
services: web: image: nginx:latest ports: - 80:80 volumes: - ./app:/app depends_on: - app app: image: python:3.9-slim command: [python, -u, ./app.py] volumes: - ./app:/app environment: - DATABASE_URLpostgres://db:5432/mydb depends_on: - db db: image: postgres:latest environment: - POSTGRES_PASSWORDpassword volumes: - db-data:/var/lib/postgresql/data
volumes: db-data:步骤二构建镜像
docker-compose build
步骤三启动应用
docker-compose up
步骤四访问应用
在浏览器中访问 http://localhost:80即可看到应用界面。
步骤五停止应用
docker-compose down
扩展应用 添加新的服务例如缓存服务、搜索服务等。 使用不同的网络模式例如将应用与外部数据库连接。 使用配置文件来管理环境变量和配置。
故障排除 查看容器日志: docker-compose logs 检查容器状态: docker-compose ps 使用 docker-compose troubleshoot 命令获取帮助
10.Docker 网络 bridge: 默认模式将容器连接到虚拟网桥可与外部网络通信。 host: 将容器连接到宿主机网络共享宿主机 IP 和网络配置。 none: 不创建任何网络容器之间无法通过网络通信。 overlay: 用于构建多主机网络可跨越多个 Docker 主机连接容器。 macvlan: 将容器连接到虚拟局域网 (VLAN)可与其他 VLAN 中的设备通信。 bridge: 创建虚拟网桥容器拥有独立 IP 地址。 可通过端口映射与外部网络通信。 常用于开发、测试和生产环境。
host: 容器共享宿主机 IP 和网络配置。 适合需要访问宿主机资源的应用。 不适用于需要网络隔离的应用。
none: 容器不连接任何网络。 仅用于需要完全隔离的应用。 高级网络模式
overlay: 用于构建多主机网络。 可跨越多个 Docker 主机连接容器。 常用于微服务架构和分布式应用。
macvlan: 将容器连接到虚拟局域网 (VLAN)。 可与其他 VLAN 中的设备通信。 常用于需要网络隔离和安全性的应用。
示例一使用 bridge 模式构建 Web 应用
FROM nginx:latest
COPY index.html /usr/share/nginx/html
CMD [nginx, -g, daemon off;]docker run -d -p 80:80 nginx 使用 bridge 模式启动 Nginx 容器。 容器暴露 80 端口可通过浏览器访问。
示例二使用 host 模式部署数据库
FROM postgres:latest
ENV POSTGRES_PASSWORD password
CMD [postgres, -D, /var/lib/postgresql/data]
docker run -d --name db -e POSTGRES_PASSWORDpassword postgres 使用 host 模式启动 Postgres 数据库容器。 容器共享宿主机 IP 和网络配置可直接通过 localhost 访问。
11. Docker 数据管理持久化与共享
11.1 数据卷持久化存储
数据卷是一种用于在容器之间共享数据或将数据持久化到宿主机的存储机制。数据卷独立于容器的生命周期而存在可以被多个容器挂载提供以下优势 数据持久化容器删除后数据仍然保留
# 创建数据卷docker volume create db-data
# 启动数据库容器docker run -d -v db-data:/var/lib/postgresql/data postgres
# 访问数据库psql -h localhost -U postgres -d mydb 数据共享多个容器可以访问同一个数据卷
# 创建配置文件vim config.yaml
# 创建数据卷docker volume create app-config
# 启动应用容器docker run -d -v app-config:/app/config my-app
# 更新配置文件vim config.yaml
# 重启应用容器docker restart my-app 数据一致性即使容器更新数据也能保持一致
11.2 绑定挂载灵活传递数据
绑定挂载允许将宿主机的目录或文件挂载到容器中提供了一种便捷的方式将数据从宿主机传递到容器常用于以下场景 配置文件将配置文件挂载到容器无需修改容器镜像
# 创建配置文件vim /etc/app/config.yaml
# 启动应用容器docker run -d -v /etc/app/config:/app/config my-app 数据迁移将宿主机的现有数据迁移到容器
# 将宿主机数据复制到容器docker run -v /data:/data my-app cp -r /data/* /app/data
# 访问容器中的数据docker exec -it my-app ls /app/data 日志存储将容器日志挂载到宿主机方便查看和分析
11.3 临时卷便捷存储
临时卷是一种临时性存储在容器删除后会被自动删除常用于存储以下数据 日志存储容器运行过程中的日志信息
# 启动应用容器docker run -d --log-drivernone my-app
# 查看容器日志docker logs my-app 缓存存储临时数据例如数据库缓存
# 启动应用容器docker run -d -v /tmp/cache:/app/cache my-app
# 清理缓存docker exec -it my-app rm -rf /app/cache/* 临时文件存储容器运行过程中产生的临时文件
11.4 数据管理最佳实践提升可靠性 优先使用数据卷进行数据持久化确保数据安全 使用绑定挂载传递配置文件或静态数据提高灵活性 使用临时卷存储日志和缓存优化资源利用 定期清理数据卷和临时卷节省存储空间
11.5. 高级数据管理扩展应用能力 使用 Docker Volume Plugin 扩展数据卷功能支持更多存储类型 使用分布式存储系统例如 GlusterFS 或 Ceph实现大规模数据存储 使用数据备份和恢复工具确保数据安全
12.Docker 安全构建安全可靠的容器应用
12.1.1.镜像安全 镜像是构建容器的基础因此镜像安全至关重要。 应尽量使用官方镜像或来自可信来源的镜像。 可以使用镜像扫描工具扫描镜像中的漏洞和安全风险。
12.1.2 容器安全 容器运行时应配置必要的安全选项例如隔离、授权和审计。 应使用最小特权原则仅授予容器运行所需的权限。 应定期更新容器镜像和软件包修复已知的安全漏洞。
12.1.3 网络安全 应使用合适的网络模式隔离容器之间的网络通信。 应限制容器对外暴露的端口和服务。 应使用防火墙和入侵检测系统等安全措施保护容器网络。
12.1.4 数据安全 敏感数据应加密存储并限制对数据的访问权限。 应定期备份数据以防数据丢失或损坏。
12.2 配置容器的安全选项
12.2.1 使用安全选项 Docker 提供了多种安全选项用于配置容器的安全属性。 常用安全选项包括 --cap-add 和 --cap-drop: 限制容器的能力 --security-opt: 配置安全策略 --user: 设置容器运行用户 --read-only: 将容器设置为只读模式
12.2.2 使用安全配置文件 可以使用安全配置文件来定义容器的安全配置。 安全配置文件可以包含以下内容 用户和组 权限控制 SELinux 或 AppArmor 配置
12.2.3 使用 Docker 安全扫描工具 Docker 安全扫描工具可以帮助您扫描镜像和容器中的安全漏洞和风险。 常用安全扫描工具包括 Clair Trivy Anchore
13.Docker Swarm 进行容器编排
Docker Swarm 是官方提供的原生容器编排工具可以将多个 Docker 主机组成一个集群并以统一的方式管理和调度容器。Swarm 提供强大的功能帮助您轻松部署和管理复杂的分布式应用。
13.1.使用 Docker Swarm 进行容器编排
13.1.1 Swarm 集群概述
Swarm 集群由以下几个主要组件组成 管理器: 负责集群的管理和调度 工作节点: 运行容器的节点 服务: 由多个容器组成的应用
13.1.2 Swarm 部署流程 初始化 Swarm 集群 创建服务 部署服务 扩缩容服务 监控和管理服务
13.1.3 Swarm 编排优势 高可用性: Swarm 集群可以自动故障转移确保应用高可用性 扩展性: Swarm 集群可以轻松扩展满足应用不断增长的需求 安全性: Swarm 提供强大的安全功能帮助您构建安全可靠的应用
13.2. 使用 Docker Swarm 部署安全的多主机环境
13.2.1 安全实践 使用安全镜像 配置安全选项 使用网络隔离 使用 RBAC 授权 使用 TLS 加密
13.2.2 部署示例
示例一部署一个安全的 Web 应用 创建一个包含 Nginx 和 Web 应用程序的镜像
FROM nginx:latest
RUN apt-get update apt-get install -y openssl
COPY index.html /usr/share/nginx/html
CMD [nginx, -g, daemon off;]配置 Nginx 使用 HTTPS
conf.d/default.conf
server { listen 443 ssl; server_name localhost;ssl_certificate /etc/ssl/nginx.pem; ssl_certificate_key /etc/ssl/nginx.key;location / { root /usr/share/nginx/html; index index.html; }} 生成 SSL 证书
openssl req -newkey rsa:2048 -new -nodes -keyout nginx.key -out nginx.csr
openssl x509 -req -days 365 -in nginx.csr -signkey nginx.key -out nginx.pem 将镜像推送到 Docker 仓库
docker build -t my-secure-web-app .
docker push my-secure-web-app 创建服务
docker service create --name my-secure-web-app \ -p 443:443 \ my-secure-web-app 配置 RBAC 授权
docker swarm init --advertise-addr swarm-manager-ip
docker secret create my-secret \ --file nginx.pem
docker config create my-config \ --file conf.d/default.conf
docker service create --name my-secure-web-app \ -p 443:443 \ --secret my-secret \ --config my-config \ my-secure-web-app 访问 Web 应用
浏览器访问 https://swarm-manager-ip:443即可看到 Web 应用页面。
想要了解更多技术文章请关注公众号“职谷智享”关注后回复关键字【秒杀】可以领取秒杀系统学习资料