1w字带你快速入门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 version

5.2 Windows 安装 Docker

下载安装包:

  • 从 Docker 官网下载适用于 Windows 的 Docker Desktop 安装程序:https://www.docker.com/get-started

安装 Docker Desktop:

  • 运行安装程序并按照说明进行安装

  • 安装过程中需要配置 WSL 2 和 Hyper-V

验证安装:

docker version

5.3 macOS 安装 Docker

下载安装包:

  • 从 Docker 官网下载适用于 macOS 的 Docker Desktop 安装程序:https://www.docker.com/get-started

安装 Docker Desktop:

  • 运行安装程序并按照说明进行安装

验证安装:

docker version

6. 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 --from=build /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_PASSWORD=password    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 web=3

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_URL=postgres://db:5432/mydb    depends_on:      - db  db:    image: postgres:latest    environment:      - POSTGRES_PASSWORD=password    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_PASSWORD=password 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-driver=none 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 部署流程

  1. 初始化 Swarm 集群

  2. 创建服务

  3. 部署服务

  4. 扩缩容服务

  5. 监控和管理服务

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 应用页面。

想要了解更多技术文章请关注公众号“职谷智享”,关注后回复关键字【秒杀】可以领取秒杀系统学习资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

太阳能光伏电池的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 光伏电池的基本结构 4.2 光伏电池的工作原理 5.完整工程文件 1.课题概述 太阳能光伏电池的simulink建模与仿真.分析不同光照温度&#xff0c;光照强度下的光伏电池的U-I特性曲线以及P-V特性曲线。 …

java VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城 小程序商城搭建

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

php安装kafka

我的开发环境是php7.3 ,先来部署两个php扩展&#xff0c;php7.3目录下放librdkafka.dll,ext/php_rdkafka.dll&#xff0c;php.ini增加,[rdkafka] extension php_rdkafka.dll php7.3对应的扩展包链接&#xff1a;PECL :: Package :: rdkafka 看自己php版本对应在这里找PECL :: …

OpenAI-Sora学习手册

通过Sora看2024红利&#xff1a;文生视频&#xff0c;虽然AI不一定是风口&#xff0c;但一定是未来深入到生活工作&#xff0c;乃至思考的必备工具。 目录 Sora介绍 Sora基础介绍 Sora官方网址 Sora的价值 1.物理世界的交互 2.创意世界的绽放 3.多角色、更精准、更细节…

Vue时间轴

之前有这样子的需求没有用第三方插件于是自己写一个简单的时间轴 时间轴滚动条并左右切换滚动条位置相对应移动 <div class"time-scrollbar"><div v-if"timeLineData.length>0" class"scrollbar-content"><div class"ar…

SAP PP学习笔记07 - 简单BOM,派生BOM,多重BOM,批量修改工具 CEWB

上一章讲了BOM的操作。 SAP PP学习笔记06 - BOM操作&#xff08;BOM 展开&#xff0c;BOM 使用先一览&#xff0c;BOM比较&#xff0c;批量更改BOM&#xff09;-CSDN博客 本章延续上一章&#xff0c;继续讲BOM操作。 主要讲 派生BOM&#xff0c;多重BOM&#xff0c;以及BOM批…

收费的Excel,不收费的国产WPS、Ever这4款加强版,谁口碑更好?

国产软件存在的问题不在少数&#xff0c;诸如“流氓捆绑”、“广告弹屏”、“APP乱象”、“大数据杀熟”等弊端&#xff0c;让许多人对其嗤之以鼻。 尽管国内软件往往免费&#xff0c;而国外软件需要付费&#xff0c;大家还是更愿意选择付费使用国外软件&#xff0c;并且许多国…

Selenium自动化测试-3.元素定位(1)

这次我们要分享的是对元素的定位&#xff0c;在一个页面中有很多不同的策略来定位一个元素&#xff0c;我们选择最合适的方法即可。 一个页面最基本组成单元是元素&#xff0c;想要定位一个元素&#xff0c;我们需要特定的信息来说明这个元素的唯一特征。 selenium 主要提供了…

用java实现A*寻路算法

前言&#xff1a; 最近的开发中遇到了寻路这个知识点&#xff0c;然后去了解了一下最常见的A算法&#xff0c;本会会结合我的理解&#xff0c;用最通俗易懂的话语讲解A算法的原理&#xff0c;下面会给出代码示例。 说到寻路算法&#xff0c;就涉及到了图的遍历&#xff0c;然…

代码学习记录14

随想录日记part14 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.07 主要内容&#xff1a;今天的主要内容是二叉树的第三部分&#xff0c;主要涉及二叉树最大深度&#xff1b;二叉树最小深度&#xff1b;完全二叉树的节点个数。 104.二叉树的最大深度111.二…

Jmeter基础使用---Token鉴权接口关联

接口测试流程&#xff1a; 查看API接口文档&#xff0c;熟悉接口业务&#xff08;地址、端口、参数、鉴权、状态码&#xff09;设计接口测试用例&#xff08;正例&#xff1a;正确的结果&#xff1b;反例&#xff1a;鉴权异常、参数异常、兼容异常、其他异常&#xff09;使用接…

受投资人青睐,易鑫租赁深交所再发8.10亿ABS,利率再创新低

近日&#xff0c;上海易鑫融资租赁有限公司&#xff08;以下简称“易鑫租赁”&#xff09;成功发行“天风-易鑫租赁惠民4期资产支持专项计划”&#xff0c;募集资金8.10亿元&#xff08;人民币&#xff0c;下同&#xff09;。此次发行利率再创易鑫ABS历史新低。 2023年1月&…

windows安装程序无法将windows配置为此计算机

目录 问题描述 问题原因 解决办法 方法一 方法二 方法三&#xff1a; 问题描述 重装系统时显示windows安装程序无法将windows配置在此计算机硬件上. 问题原因 安装介质已损坏 如果可引导的安装介质&#xff08;如DVD或USB驱动器&#xff09;损坏或损坏&#xff0c;安装过…

17-Java解释器模式 ( Interpreter Pattern )

Java解释器模式 摘要实现范例 解释器模式&#xff08;Interpreter Pattern&#xff09;实现了一个表达式接口&#xff0c;该接口解释一个特定的上下文 这种模式被用在 SQL 解析、符号处理引擎等 解释器模式提供了评估语言的语法或表达式的方式&#xff0c;它属于行为型模式 …

buildadmim生成代码时让菜单有层级

当我们使用buildadmin生成代码的时候&#xff0c;在菜单的部分&#xff0c; 有时希望它生的是一个带有层级的菜单&#xff0c;有时候则想生成一个没有层级的菜单 like this 经过本人测试 如果我们要生成没有层级的菜单 我们可以在高级设置中的 相对位置处更改&#xff0c;同时…

使用java批量写入环境变量

环境需求 jdk版本&#xff1a;1.8 jna依赖&#xff1a; <dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>5.10.0</version></dependency><dependency><groupId>net.java.…

ServletContext

ServletContext 1.共享数据 ServletContext servletContext this.getServletContext(); String username "徐凤年"; servletContext.setAttribute("username",username);ServletContext servletContext this.getServletContext(); String username (…

因果学习篇(2)-Causal Attention for Vision-Language Tasks(文献阅读)

Causal Attention for Vision-Language Tasks 引言 这篇论文是南洋理工大学和澳大利亚莫纳什大学联合发表自2021年的CVPR顶会上的一篇文献&#xff0c;在当前流行的注意力机制中增加了因果推理算法&#xff0c;提出了一种新的注意力机制&#xff1a;因果注意力(CATT)&#xff…

航芯防护组合拳「MCU+安全」,让数字资产加倍安全!

在这个万物互联的时代&#xff0c;数据安全的“飓风”正在袭来。随着集成电路的广泛应用&#xff0c;安全问题也日益凸显。从芯片漏洞到硬件攻击&#xff0c;这些问题都给集成电路的应用带来了严峻的挑战。一旦安全防线被突破&#xff0c;智能设备的数字资产安全将面临威胁。 …

电动自行车易着火的启示

电动自行车起火情况不时发生&#xff0c;上海雷卯EMC小哥分析原因&#xff0c;或许对您有所启示。 电动自行车容易发生起火的原因可能是由于电池管理系统&#xff08;BMS&#xff09;的保护功能不足或者电池质量问题导致的。要改进BMS的保护功能以减少火灾风险&#xff0c; 可…