网络工程师需要熟悉Docker吗?我觉得不需要精通,但是得懂基础

小公司应该选择docker swarm还是k8s 综上所述,对于小公司来说,如果团队对 Docker 生态熟悉、业务需求简单、短期内无明显扩展计划,并愿意承担一定的技术风险,可以选择 Docker Swarm 以快速部署和管理容器应用。然而,考虑到 Kubernetes 强大的功能、成熟的生态系统、广泛的支持和对未来扩展的良好适应性,即使初期学习和配置成本稍高,大多数情况下仍是更为推荐的选择。长远来看,Kubernetes 能更好地支撑业务增长和技术演化,减少技术栈迁移的风险。 阅读详情

Docker,这个字眼大家不陌生吧,不过作为网络工程师可能平时接触不到,如果在看文章的是运维人员,那么70%以上的运维人员都会跟Docker打交道。即使网工用不到,作为非常火爆热门的技术,也希望大家能坚持看50%的文章,熏陶一下技术。

Docker由Solomon Hykes于2013年推出,最初是一个开源项目,旨在简化开发人员在开发、测试和生产环境中部署应用程序的过程。Docker通过容器技术提供了一种轻量级的虚拟化解决方案,使应用程序可以在任何环境中一致地运行。随着Docker的普及,DevOps和云计算领域的工作方式发生了深刻变化,Docker已成为现代软件开发和部署的重要工具。

在现代软件开发中,快速迭代和持续交付变得至关重要。Docker的出现使得开发人员可以轻松创建、共享和运行应用程序,从而提高了开发效率,降低了环境不一致性带来的问题。此外,Docker的隔离特性增强了系统的安全性和稳定性,使其在微服务架构和云原生应用中得到了广泛应用。

目录:

  • 容器技术

  • 容器与虚拟机的区别

  • 容器化的优点

  • Docker的基本概念

  • 镜像 (Image)

  • 容器 (Container)

  • 仓库 (Repository)

  • Docker引擎 (Docker Engine)

  • Docker架构

  • Docker客户端与服务端

  • Docker的组件

  • 安装Docker

  • Docker镜像

  • Docker镜像的基础操作

  • 构建Docker镜像

  • 优化Docker镜像

  • 管理镜像

  • Docker容器

  • Docker容器的基本操作

  • 容器的生命周期管理

  • 容器网络

  • 容器日志与调试

  • Docker仓库与Docker Hub

  • 使用Docker Hub

  • 私有Docker仓库

  • Docker仓库的高级功能

  • Docker Compose

  • Docker Compose的基本概念

  • Docker Compose文件格式

  • Docker Compose的基本操作

  • Docker Compose的高级功能

  • Docker Swarm

  • Docker Swarm的基本概念

  • 设置和管理Docker Swarm集群

  • 创建和管理Swarm服务

  • ⏰写在最后

  • Docker的基础概念

  • Docker的基本操作

  • 数据管理与网络

  • Docker Compose

  • Docker Swarm

💡 如果已经有Docker基础的朋友,可以直接滑到最后总结部分进行查漏补缺!

容器技术

容器与虚拟机的区别

  • 虚拟机 (VM)

  • VM包含完整的操作系统,并在虚拟化层之上运行多个操作系统实例。

  • VM需要更多的系统资源(CPU、内存、存储)来管理这些操作系统实例。

  • 容器 (Container)

  • 容器共享主机操作系统的内核,具有独立的文件系统、进程和网络空间。

  • 容器更轻量级,启动速度快,占用资源少。

特性虚拟机容器
启动时间几分钟几秒
资源开销高(包含操作系统内核)低(共享主机操作系统内核)
性能中等高(更接近主机性能)
隔离级别强(完全隔离)较弱(共享内核)
适用场景多种操作系统和更高安全隔离需求快速部署、微服务、开发测试等

容器化的优点

  • 快速启动:容器可以在几秒钟内启动,提高了开发和部署效率。

  • 轻量级:容器共享主机操作系统内核,占用更少的系统资源。

  • 一致性:确保应用程序在开发、测试和生产环境中的行为一致,减少“环境问题”。

  • 便捷性:容器化应用可以打包成独立的单元,便于分发、复制和管理。

  • 可移植性:容器化应用可以在任何支持Docker的平台上运行,无需修改代码。

Docker的基本概念

镜像 (Image)

Docker镜像是一个轻量级、独立、可执行的软件包,包含了运行某个应用程序所需的全部内容,包括代码、运行时、库、环境变量和配置文件。镜像是只读的,当容器启动时,Docker会在镜像的顶部添加一个可写层。

容器 (Container)

容器是镜像的一个运行实例,它包括了镜像中的所有内容以及一个可写层。容器是独立的、可移植的单元,可以在任何支持Docker的平台上运行。

仓库 (Repository)

Docker仓库是存储和分发镜像的地方。Docker Hub是官方的公共仓库,用户也可以搭建私有仓库来存储自己的镜像。仓库中可以包含多个镜像,每个镜像可以有不同的标签(Tag)。

Docker引擎 (Docker Engine)

Docker引擎是一个轻量级的运行时和工具集,用于创建和管理容器。它包括以下组件:

  • Docker守护进程 (Docker Daemon):负责管理容器的生命周期。

  • Docker CLI (命令行界面):用于与Docker守护进程交互的命令行工具。

  • Docker Registries (镜像仓库):存储和分发Docker镜像。

Docker架构

Docker客户端与服务端

Docker采用了客户端-服务端(Client-Server)架构,客户端通过Docker CLI与服务端的Docker守护进程通信。Docker CLI发送命令给Docker守护进程,后者负责执行这些命令(如构建、运行和分发容器)。

Docker的组件

  • Docker守护进程 (Docker Daemon):后台进程,负责管理Docker对象(如镜像、容器、网络和卷)。

  • Docker CLI:命令行工具,用户通过它与Docker守护进程通信。

  • Docker Registries:存储和分发Docker镜像的地方,包含公共的Docker Hub和私有的Docker Registry。

安装Docker

  • Windows

  • 下载并安装Docker Desktop for Windows。

  • 启动Docker Desktop并进行基本配置。

  • 验证安装:在命令行中运行docker --version。

  • macOS

  • 下载并安装Docker Desktop for Mac。

  • 启动Docker Desktop并进行基本配置。

  • 验证安装:在终端中运行docker --version。

  • Linux

  • 更新APT包索引:sudo apt-get update

  • 安装必要的包:sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent 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 Engine:sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io

  • 验证安装:sudo docker --version

  • 以Ubuntu为例:

Docker镜像

Docker镜像是构建容器的基础,它包含了应用程序运行所需的所有依赖和配置。镜像是不可变的,每次运行镜像时都会生成一个新的容器实例。

常见的Docker镜像源包括:

  • Docker Hub:最广泛使用的公共镜像库,包含了大量官方和社区维护的镜像。

  • 私有镜像库:用户可以搭建自己的Docker Registry来存储和管理私有镜像。

Docker镜像的基础操作

拉取镜像 (docker pull)

docker pull命令用于从镜像仓库拉取镜像。语法如下:

docker pull <镜像名>:<标签>   

例如,拉取官方的nginx镜像:

docker pull nginx:latest   

查看镜像 (docker images)

docker images命令用于列出本地存储的所有Docker镜像。语法如下:

docker images   

示例输出:

删除镜像 (docker rmi)

docker rmi命令用于删除本地的Docker镜像。语法如下:

docker rmi <镜像ID或镜像名>:<标签>   

例如,删除nginx镜像:

docker rmi nginx:latest   

构建Docker镜像

Dockerfile是一个文本文件,包含了构建Docker镜像所需的一系列指令。每个指令在构建过程中创建镜像的一层。常用的Dockerfile指令包括:

  • FROM:指定基础镜像

  • RUN:在镜像内执行命令

  • COPY:将文件从宿主机复制到镜像内

  • CMD:指定容器启动时要执行的命令

Dockerfile指令
  • FROM
FROM ubuntu:20.04   

指定基础镜像为Ubuntu 20.04。

  • RUN
RUN apt-get update && apt-get install -y nginx   

在镜像内执行命令,安装nginx。

  • COPY
COPY . /app   

将当前目录下的所有文件复制到镜像内的/app目录。

  • CMD
CMD ["nginx", "-g", "daemon off;"]   

指定容器启动时执行的命令。

构建镜像 (docker build)

docker build命令用于根据Dockerfile构建镜像。语法如下:

docker build -t <镜像名>:<标签> <Dockerfile路径>   

例如,构建一个名为mynginx的镜像:

docker build -t mynginx:latest .   

优化Docker镜像

多阶段构建

多阶段构建可以在一个Dockerfile中使用多个FROM指令,减少最终镜像的大小。例如:

# 第一阶段:构建应用程序   FROM golang:1.16 as builder   WORKDIR /app   COPY . .   RUN go build -o myapp      # 第二阶段:创建最终镜像   FROM alpine:latest   WORKDIR /app   COPY --from=builder /app/myapp .   CMD ["./myapp"]   
镜像瘦身技巧
  • 使用轻量级基础镜像:如Alpine Linux。

  • 减少镜像层数:合并多个RUN指令。

  • 清理不必要的文件:在Dockerfile中删除临时文件。

管理镜像

标签用于标识镜像的不同版本。通过标签,用户可以方便地管理和拉取特定版本的镜像。例如:

docker tag nginx:latest mynginx:v1.0   

通过合理使用标签和版本控制系统(如Git),可以有效管理镜像的不同版本,确保应用程序在各个环境中的一致性。

Docker容器

Docker容器是运行在Docker引擎上的独立运行环境。每个容器都是从一个镜像启动的,并在镜像的基础上添加一个可写层。容器提供了应用程序的隔离环境,使其运行所需的所有依赖和配置都封装在容器内。

镜像是静态的文件系统和应用程序配置的组合,而容器是镜像的运行实例。当我们启动一个容器时,Docker会在镜像的基础上创建一个可写层,从而使容器变得可操作。镜像可以被多次使用来创建多个容器。

Docker容器的基本操作

创建并启动容器 (docker run)

docker run命令用于创建并启动一个容器。语法如下:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]   

例如,运行一个nginx容器:

docker run -d -p 80:80 nginx   

此命令会下载nginx镜像(如果本地没有),然后在后台运行一个nginx容器,并将主机的80端口映射到容器的80端口。

停止与重启容器 (docker stop, docker start)
  • 停止容器
docker stop <容器ID或容器名>   

例如,停止一个名为mynginx的容器:

docker stop mynginx   
  • 重启容器
docker start <容器ID或容器名>   

例如,重启mynginx容器:

docker start mynginx   
进入容器 (docker exec, docker attach)
  • 使用docker exec进入容器

docker exec命令用于在运行的容器内执行命令。语法如下:

docker exec -it <容器ID或容器名> <命令>   

例如,进入一个正在运行的容器的bash环境:

docker exec -it mynginx /bin/bash   
  • 使用docker attach连接到容器

docker attach命令用于连接到一个运行中的容器。语法如下:

docker attach <容器ID或容器名>   

例如,连接到mynginx容器:

docker attach mynginx   

容器的生命周期管理

容器的状态管理
  • 查看运行中的容器
docker ps   

该命令列出所有正在运行的容器。

  • 查看所有容器(包括停止的)
docker ps -a   

  • 删除容器
docker rm <容器ID或容器名>   

例如,删除mynginx容器:

docker rm mynginx   
持久化存储 (Volumes)

Docker容器中的数据默认是临时的,当容器删除时,数据也随之删除。为了持久化数据,我们可以使用卷(Volumes)。

  • 创建卷
docker volume create <卷名>   

例如,创建一个名为myvolume的卷:

docker volume create myvolume   
  • 使用卷

在运行容器时挂载卷:

docker run -d -p 80:80 -v myvolume:/data nginx   

该命令将myvolume挂载到容器内的/data目录。

  • 查看卷
docker volume ls   

  • 删除卷
docker volume rm <卷名>   

容器网络

Docker的网络模式

Docker提供了多种网络模式,用于配置容器之间的通信。

  • 桥接网络 (Bridge Network)

默认网络模式。每个容器连接到一个桥接网络,可以通过容器IP进行通信。

docker run --network bridge <镜像>   
  • 主机网络 (Host Network)

容器与主机共享网络栈。

docker run --network host <镜像>   
  • 无网络 (None Network)

容器不连接到任何网络。

docker run --network none <镜像>   
自定义网络
  • 创建自定义桥接网络
docker network create <网络名>   

例如,创建一个名为mynetwork的自定义桥接网络:

docker network create mynetwork   
  • 将容器连接到自定义网络
docker run --network mynetwork <镜像>   
容器间通信

通过自定义网络,可以使用容器名直接进行通信。例如,在mynetwork中运行两个容器,一个容器可以通过另一个容器的名字进行通信:

docker run -d --network mynetwork --name container1 nginx   docker run -d --network mynetwork --name container2 nginx   

此时,container2可以通过ping container1与container1通信。

容器日志与调试

容器日志查看 (docker logs)

docker logs命令用于查看容器的日志。语法如下:

docker logs <容器ID或容器名>   

例如,查看mynginx容器的日志:

docker logs mynginx   
容器调试技巧
  • 查看容器内进程
docker top <容器ID或容器名>   
  • 检查容器的资源使用情况
docker stats <容器ID或容器名>   
  • 导出容器的元数据
docker inspect <容器ID或容器名>   

Docker仓库与Docker Hub

Docker仓库用于存储和分发Docker镜像,方便开发团队之间共享应用程序。Docker仓库分为公共仓库和私有仓库。公共仓库如Docker Hub,提供了大量的开源镜像资源;私有仓库则用于存储企业内部的专有镜像,保障安全和合规。

Docker Hub是最广泛使用的Docker公共仓库,提供了海量的官方和社区镜像。用户可以从Docker Hub拉取、推送镜像,并使用Docker Hub的CI/CD集成功能。

使用Docker Hub

创建Docker Hub账户
  1. 访问 Docker Hub https://hub.docker.com。

  1. 点击“Sign Up”按钮进行注册。

  2. 填写相关信息并完成账户注册。

登录Docker Hub

在命令行中使用docker login命令登录Docker Hub:

docker login   

输入Docker Hub的用户名和密码即可完成登录。

拉取镜像 (docker pull)

从Docker Hub拉取镜像非常简单,使用docker pull命令:

docker pull <镜像名>:<标签>   

例如,拉取官方的Python镜像:

docker pull python:3.9   

推送镜像 (docker push)

要推送镜像到Docker Hub,首先需要给镜像打标签,然后推送:

  1. 给镜像打标签:
docker tag <本地镜像ID或名称>:<标签> <Docker Hub用户名>/<镜像名>:<标签>   

例如,将本地镜像myapp打标签为Docker Hub的myapp:

docker tag myapp:latest myusername/myapp:latest   
  1. 推送镜像:
docker push <Docker Hub用户名>/<镜像名>:<标签>   

例如,推送myapp镜像:

docker push myusername/myapp:latest   
管理镜像库

在Docker Hub网站上可以管理自己的镜像库,包括创建新的仓库、设置仓库的可见性(公共或私有)、查看镜像的详细信息和下载次数等。

私有Docker仓库

搭建私有仓库

Docker官方提供了一个开源的私有仓库实现——Docker Registry。可以使用官方的Registry镜像快速搭建一个私有仓库。

  1. 拉取Registry镜像:
docker pull registry:2   
  1. 运行Registry容器:
docker run -d -p 5000:5000 --name myregistry registry:2   

此时,私有仓库将运行在本地主机的5000端口。

推送和拉取私有仓库的镜像
  1. 给镜像打标签:
docker tag <本地镜像ID或名称>:<标签> localhost:5000/<镜像名>:<标签>   

例如,将本地镜像myapp打标签为私有仓库的myapp:

docker tag myapp:latest localhost:5000/myapp:latest   
  1. 推送镜像:
docker push localhost:5000/myapp:latest   
  1. 拉取镜像:
docker pull localhost:5000/myapp:latest   
安全性配置

为了提高私有仓库的安全性,可以启用SSL/TLS和基础认证。

  • 启用SSL/TLS

需要生成自签名证书或从CA获取证书,并配置Registry容器使用这些证书。

生成自签名证书:

mkdir -p certs   openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt   

启动Registry容器时挂载证书:

docker run -d -p 5000:5000 --name myregistry \     -v $(pwd)/certs:/certs \     -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \     -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \     registry:2   
  • 启用基础认证

需要创建一个包含用户名和密码的htpasswd文件,并配置Registry容器使用这个文件。

安装htpasswd工具:

sudo apt-get install apache2-utils   

创建htpasswd文件:

mkdir -p auth   htpasswd -Bc auth/htpasswd myusername   

启动Registry容器时挂载htpasswd文件:

docker run -d -p 5000:5000 --name myregistry \     -v $(pwd)/auth:/auth \     -e "REGISTRY_AUTH=htpasswd" \     -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \     -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \     registry:2   

Docker仓库的高级功能

自动构建

Docker Hub提供了自动构建功能,可以与GitHub或Bitbucket集成,当代码库有新的提交时自动构建并推送镜像。

  • 设置自动构建
  1. 在Docker Hub上创建新的仓库,选择自动构建。

  2. 连接到GitHub或Bitbucket,选择代码库和分支。

  3. 配置Dockerfile的路径和构建规则。

Webhooks

Webhooks允许Docker Hub在镜像构建完成后向指定的URL发送HTTP请求,用于触发后续的CI/CD流程。

  • 配置Webhooks
  1. 在Docker Hub仓库的设置页面,找到Webhooks。

  2. 添加新的Webhook,填写目标URL。

镜像扫描

Docker Hub提供了镜像扫描功能,可以扫描镜像中的已知漏洞,帮助提高应用程序的安全性。

  • 启用镜像扫描在Docker Hub仓库的设置页面,启用镜像扫描功能。每次推送新镜像时,Docker Hub将自动进行安全扫描,并提供扫描报告。

Docker Compose

Docker Compose 是用于定义和运行多容器Docker应用程序的工具。通过一个简单的YAML文件,用户可以配置应用程序需要的所有服务,并使用单个命令启动和停止这些服务。Compose 是开发、测试和部署微服务架构应用的利器。

Docker Compose 通常与Docker一起安装,但也可以单独安装。以下是在不同平台上的安装步骤:

  • Linux:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose   sudo chmod +x /usr/local/bin/docker-compose   

  • MacOS: 使用 Homebrew 安装
brew install docker-compose   
  • Windows: Docker Desktop 自带Docker Compose,安装 Docker Desktop 即可。

Docker Compose的基本概念

服务(Services)

在Docker Compose中,服务定义了一个容器的配置。一个服务可以是数据库、Web服务器等。Compose文件通过services关键字定义多个服务,每个服务对应一个容器。

网络(Networks)

Compose允许定义多个网络,服务可以连接到这些网络中进行通信。默认情况下,Compose会为所有服务创建一个默认网络。

卷(Volumes)

卷用于持久化存储。Compose允许定义卷,并将其挂载到服务的容器中。

Docker Compose文件格式

一个简单的docker-compose.yml文件示例如下:

version: '3'   services:     web:       image: nginx       ports:         - "80:80"     db:       image: mysql:5.7       environment:         MYSQL_ROOT_PASSWORD: example   
版本(Version)

Compose文件的版本定义了语法的格式,不同版本支持的功能有所不同。建议使用最新的版本(如3或3.8)。

version: '3.8'   
服务配置详解
  • image: 指定使用的镜像

  • build: 指定构建镜像的上下文路径和Dockerfile

  • ports: 端口映射

  • environment: 环境变量

  • volumes: 卷的挂载

services:     web:       image: nginx       ports:         - "80:80"       volumes:         - ./html:/usr/share/nginx/html     db:       image: mysql:5.7       environment:         MYSQL_ROOT_PASSWORD: example       volumes:         - db_data:/var/lib/mysql   
网络配置

默认情况下,所有服务都连接到一个名为default的网络。可以定义自定义网络:

networks:     frontend:     backend:   

并将服务连接到这些网络:

services:     web:       networks:         - frontend     db:       networks:         - backend   
卷配置

在Compose文件中可以定义卷:

volumes:     db_data:   

并将其挂载到服务的容器中:

services:     db:       volumes:         - db_data:/var/lib/mysql   

Docker Compose的基本操作

启动和停止服务 (docker-compose up, docker-compose down)
  • 启动服务:
docker-compose up   

该命令将启动Compose文件中定义的所有服务,并在控制台中输出日志。

  • 后台运行服务:
docker-compose up -d   
  • 停止服务:
docker-compose down   
查看服务状态 (docker-compose ps)

docker-compose ps命令用于查看当前运行的服务状态:

docker-compose ps   
重启服务 (docker-compose restart)

docker-compose restart命令用于重启服务:

docker-compose restart <服务名>   
查看服务日志 (docker-compose logs)

docker-compose logs命令用于查看服务的日志:

docker-compose logs <服务名>   

Docker Compose的高级功能

多环境配置

通过使用多个Compose文件,可以为不同的环境(如开发、测试、生产)定义不同的配置。

  • 基础Compose文件 (docker-compose.yml):
version: '3.8'   services:     web:       image: nginx       ports:         - "80:80"   
  • 覆盖Compose文件 (docker-compose.override.yml):
version: '3.8'   services:     web:       environment:         - NGINX_ENV=development   
  • 启动服务时,会自动应用覆盖文件:
docker-compose up   
  • 自定义环境Compose文件:

例如,为生产环境创建docker-compose.prod.yml:

version: '3.8'   services:     web:       environment:         - NGINX_ENV=production   

启动时指定环境文件:

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d   
扩展服务

通过scale选项可以扩展服务的副本数量,用于负载均衡和高可用。

  • 扩展服务副本:
docker-compose up -d --scale web=3   

以上命令将启动3个web服务的副本。

依赖管理

可以通过depends_on选项管理服务启动的依赖关系。例如,web服务依赖于db服务:

services:     web:       image: nginx       depends_on:         - db     db:       image: mysql:5.7       environment:         MYSQL_ROOT_PASSWORD: example   

假设我们要构建一个简单的Web应用程序,包括一个前端服务(使用nginx)、一个后端服务(使用Node.js)和一个数据库服务(使用MySQL)。

创建一个docker-compose.yml文件,定义前端、后端和数据库服务:

version: '3.8'   services:     frontend:       image: nginx:latest       ports:         - "80:80"       volumes:         - ./frontend:/usr/share/nginx/html       networks:         - app-network        backend:       build:         context: ./backend         dockerfile: Dockerfile       ports:         - "3000:3000"       networks:         - app-network        db:       image: mysql:5.7       environment:         MYSQL_ROOT_PASSWORD: example         MYSQL_DATABASE: appdb       volumes:         - db_data:/var/lib/mysql       networks:         - app-network      networks:     app-network:      volumes:     db_data:   

创建必要的目录和文件:

  • 前端目录结构:
frontend/   └── index.html   
  • 后端目录结构:
backend/   ├── Dockerfile   └── app.js   

编写前端的index.html:

<!DOCTYPE html>   <html>   <head>       <title>My App</title>   </head>   <body>       <h1>Hello from Nginx</h1>   </body>   </html>   

编写后端的Dockerfile:

FROM node:14   WORKDIR /app   COPY package*.json ./   RUN npm install   COPY . .   EXPOSE 3000   CMD ["node", "app.js"]   

编写后端的app.js:

`const express = require('express');   const app = express();   const port = 3000;      app.get('/', (req, res) => {     res.send('Hello from Node.js');   });      app.listen(port, () => {     console.log(`Server is running on http://localhost:${port}`);   });   `

启动应用:

docker-compose up -d   

此时,应用的前端服务通过http://localhost访问,后端服务通过http://localhost:3000访问。

Docker Swarm

Docker Swarm是Docker原生的容器编排工具,用于在多主机上管理和编排Docker容器。Swarm集群由多个Docker引擎组成,提供了高可用性、扩展性和负载均衡等功能。使用Swarm,开发者可以像管理单个Docker实例一样,管理整个集群中的多个节点和容器。

Docker Swarm和Kubernetes是两种主要的容器编排工具。Swarm集成在Docker中,使用简单,适合中小型项目;Kubernetes功能强大,适合大规模复杂应用。根据项目需求选择合适的编排工具,是提升开发和运维效率的关键。

Docker Swarm的基本概念

节点(Nodes)

Swarm集群由多个节点组成。每个节点都是一个运行Docker的主机,分为管理节点(Manager Node)和工作节点(Worker Node)。管理节点负责集群管理和任务调度,工作节点负责实际运行容器。

服务(Services)

服务是Swarm管理的基本单位。服务定义了应用程序的容器镜像、运行参数和数量。Swarm会根据服务定义在集群中部署和管理容器。

任务(Tasks)

任务是服务的具体实例。每个任务对应一个运行中的容器,Swarm负责调度和管理任务,确保服务的高可用性和负载均衡。

堆栈(Stacks)

堆栈是由多个服务组成的应用程序。使用堆栈,开发者可以定义和管理整个应用的服务、网络和卷。堆栈文件类似于Compose文件,但适用于Swarm集群。

设置和管理Docker Swarm集群

初始化Swarm集群

在主机上初始化Swarm集群,使用docker swarm init命令:

docker swarm init --advertise-addr <管理节点IP>   

初始化成功后,命令行会输出加入Swarm集群的命令和token。

加入和离开Swarm集群

在工作节点上,使用docker swarm join命令加入集群:

docker swarm join --token <worker-token> <管理节点IP>:2377   

使用docker swarm leave命令离开集群:

docker swarm leave   

在管理节点上使用docker swarm leave --force命令强制离开并停止集群:

docker swarm leave --force   
管理节点和角色
  • 查看节点列表:
docker node ls   
  • 提升节点为管理节点:
docker node promote <节点ID>   
  • 降级管理节点为工作节点:
docker node demote <节点ID>   

创建和管理Swarm服务

创建服务

使用docker service create命令创建服务:

docker service create --name <服务名> --replicas <副本数量> <镜像>   

例如,创建一个运行nginx的服务:

docker service create --name web --replicas 3 -p 80:80 nginx   
更新服务

使用docker service update命令更新服务:

docker service update --replicas <新的副本数量> <服务名>   

例如,将web服务的副本数量更新为5:

docker service update --replicas 5 web   
删除服务

使用docker service rm命令删除服务:

docker service rm <服务名>   

例如,删除web服务:

docker service rm web   
查看服务状态

使用docker service ls命令查看服务列表:

docker service ls   

使用docker service ps命令查看服务的任务状态:

docker service ps <服务名>   

Swarm支持服务的滚动更新,确保应用程序在更新过程中保持高可用性。使用docker service update命令并指定更新参数:

docker service update --image <新镜像> <服务名>   

例如,更新web服务的镜像:

docker service update --image nginx:latest web   

如果服务更新出现问题,可以使用docker service rollback命令回滚到上一个版本:

docker service rollback <服务名>   

Swarm支持创建覆盖网络,使容器可以跨主机通信。使用docker network create命令创建覆盖网络:

docker network create --driver overlay <网络名>   

然后在服务创建时指定网络:

docker service create --name <服务名> --network <网络名> <镜像>   

Swarm支持配置和密钥管理,确保敏感信息安全地传递给服务。使用docker config和docker secret命令管理配置和密钥。

例如,创建一个配置:

echo "my-config-data" | docker config create my-config -   

在服务创建时使用配置:

docker service create --name <服务名> --config source=my-config,target=/path/in/container <镜像>   

⏰写在最后

Docker作为现代容器化技术的核心,极大地改变了软件开发、测试和部署的方式。

最后我们来个简单的总结,方便大家快速的掌握本文内容,能看到最后的勇士,可以好好记总结部分。

Docker的基础概念

  • 容器(Container):轻量级、独立的可执行软件包,包括应用程序及其所有依赖项。

  • 镜像(Image):不可变的容器模板,用于创建容器。

  • Docker引擎(Docker Engine):运行Docker容器的核心引擎。

  • Dockerfile:构建Docker镜像的脚本,定义了镜像的构建过程。

Docker的基本操作

  • 镜像操作:

  • docker pull:从Docker Hub拉取镜像。

  • docker build:根据Dockerfile构建镜像。

  • docker push:将镜像推送到Docker Hub。

  • 容器操作:

  • docker run:启动容器。

  • docker stop:停止容器。

  • docker rm:删除容器。

  • docker exec:在运行中的容器内执行命令。

数据管理与网络

  • 卷(Volume):持久化存储,独立于容器生命周期。

  • 创建和管理卷:docker volume create、docker volume ls、docker volume rm。

  • 卷挂载:在docker run命令中使用-v选项。

  • 网络(Network):容器之间通信的桥梁。

  • 创建和管理网络:docker network create、docker network ls、docker network rm。

  • 网络模式:Bridge、Host、Overlay等。

Docker Compose

  • 定义和运行多容器应用:

  • 使用YAML文件定义服务、网络和卷。

  • 启动和管理服务:docker-compose up、docker-compose down、docker-compose ps。

  • 高级功能:

  • 多环境配置:通过多个Compose文件支持不同环境配置。

  • 扩展服务:通过docker-compose scale扩展服务副本。

Docker Swarm

  • 集群管理和编排:

  • 初始化Swarm集群:docker swarm init。

  • 加入和离开集群:docker swarm join、docker swarm leave。

  • 管理节点和服务:docker node、docker service。

  • 高级功能:

  • 服务滚动更新和回滚:docker service update、docker service rollback。

  • 配置和密钥管理:docker config、docker secret。

  • 多主机网络:通过Overlay网络实现跨主机通信。

`黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

【鸿蒙实战开发】HarmonyOS申请调试签名证书过程 这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。 阅读详情

相关推荐

FPGA—ZYNQ_BD Block Design学习(一)

1.第一步:打开Vivado软件,创建或打开一个工程。2.第二步:在Block Design中添加arm核心,并将其配置为IP核。3.第三步:配置arm核心的外设信息,如DDR接口、时钟频率、UART接口等。4.第四步:完成Block Design中的模块互联,生成PL端的比特流。 5.第五步:导出PS端的硬件信息,包括arm IP核的外设、速度、引脚和地址等信息。1创建bd 需要有ddr以及uart和时钟配置外设io口,这里就是zynq的管脚规定好的,根据原理图用哪个个勾选哪一个。 对外设uart的配

m0_58129662的博客 1028

Java最全云原生时代必须具备的核心技能之Docker高级篇(Swarm),程序员怎样优雅度过35岁中年危机

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

2401_84584522的博客 1082

【医学影像】超声(UltraSound)影像的增强与目标检测

文章目录1 综述1.1 超声发展简史1.2 超声类型2 超声影像的去噪与增强2.1 各向异性扩散去噪模型2.2 色彩恢复的视网膜增强算法SSR和MSR2.3 MSRCR增强算法(基于MSR算法改进版)2.4 参考文献3 超声影像的目标识别3.1 基于跨模态数据迁移进行DL训练3.2 参考文献 1 综述 因工作需要,最近调研了超声(UltraSound)影像的相关知识,包含超声类型、超声影像的去噪和增强,目标检测等,并对相关资料文献进行梳理整合。 本人另外一篇博文主要讲了UltraSound 影像与CT/MR

muyijames的博客 1万+

云原生之容器化:Docker三剑客之Docker Swarm

Docker Swarm看这一篇就够了!

LQ的博客 681

从‘炼丹’到‘讲理’:物理信息神经网络(PINN)的硬约束 vs 软约束,我该选哪个?

本文深入探讨了物理信息神经网络(PINN)中硬约束与软约束的选择策略,帮助研究者在深度学习中有效融入物理先验知识。通过对比两种约束方法的实现复杂度、数据效率和计算性能,提供了针对材料科学和流体动力学等领域的实用决策指南,并介绍了自适应约束和混合约束等前沿技术。

weixin_42535703的博客 527

大数据工程中的多模态数据处理技术

模态”(Modality)指的是数据的表现形式文本(Text):新闻、评论、文案等;图像(Image):照片、截图、医学影像等;音频(Audio):语音、音乐、环境声音等;视频(Video):短视频、监控视频、电影等(本质是图像+音频的组合);数值/结构化数据(Numerical/Structured):用户年龄、商品价格、传感器数据等;时间序列(Time Series):股票价格、物流轨迹、心率数据等。多模态数据(Multimodal Data)是指包含两种或以上模态的数据集。

AI云原生与云计算技术学院 1273

2022年 Docker Swarm还有什么存在的意义 ?

Docker Swarm 解释: Docker Swarm 是一组物理机或虚拟机,它们运行 Docker 应用程序并已配置为加入集群。将一组机器集群在一起后,您仍然可以运行您习惯的 Docker 命令,但它们现在将由集群中的机器执行。集群的活动由 swarm manager 控制,加入集群的机器称为节点。Docker swarm 是一个容器编排工具,这意味着它允许用户管理部署在多个主机上的多个容器。与 docker swarm 操作相关的主要好处之一是为应用程序提供的高可用性。在 docker swarm

爱死亡机器人 1214

PX4/ArduPilot源码克隆提速秘籍:国内镜像与子模块优化全攻略

本文详细介绍了PX4/ArduPilot源码克隆的提速秘籍,包括使用国内镜像源和子模块优化技巧。通过阿木实验室、华为云等国内镜像,克隆速度可提升20倍,同时提供子模块替换和并行编译等实用方法,大幅提升开发效率。

weixin_29251567的博客 524

自制RV1106图传摄像头--WSL+Docker开发环境搭建

搭建RV1106的WSL+Docker开发环境

qq_42933477的博客 2302

多模态RAG实战:为LLM装上视觉之眼,实现图文混合文档智能问答

检索增强生成(RAG)技术通过结合外部知识库,有效缓解了大语言模型(LLM)的幻觉问题,并扩展了其知识边界。其核心原理是将文档切分、向量化后存入向量数据库,在问答时通过语义检索召回相关上下文,辅助LLM生成更精准的答案。这项技术的核心价值在于,它为大模型应用提供了一种低成本、高效率的知识注入与实时更新方案,广泛应用于智能客服、知识库问答、文档分析等场景。随着应用深入,纯文本RAG在处理产品手册、学术论文、设计图纸等富含视觉信息的文档时面临瓶颈。本文聚焦的**多模态RAG**和**视觉理解**技术,正是为了解

weixin_30698527的博客 722

RK3588 平台imx334 驱动调试记录

rk3588调试imx334

xiaoning132的专栏 1790

Docker网络,网络工程师还不赶紧收藏!

学习Docker网络前建议清空所有环境 docker rmi -f $(docker images -aq ) 每启动一个docker容器,docker就会给docker容器分配一个ip。 只要安装了docker,就会有一个网卡docker0 ( 桥接模式,使用的是evth-pair技术 ) 什么是Evth-pair Evth-pair就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连.正因为这个特性,evth-pair 充当一个桥梁,连接各种虚拟网络设备。 OpenStac,Dock

LiBai'S BLOG 4万+

Android 12.0 kenel中修改rom系统内部存储的大小

在12.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小方面作假,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部分的值最好了,接下来分析下计算rom容量的 相关代码,然后做出相关的修改,来实现功能

安卓兼职framework和app工程师的博客 1678

Docker命令,网络工程师专属教程。

????身为新时代的网络工程师,传统的路由交换已经满足不了日常。SDN、网络自动化、虚拟化、容器化的出现已经慢慢的代替了传统的数据通信。NetDevOps更是要求现代的网络工程师让编程和自动化成为日常的口袋技能。这个趋势下,我们不得不让自己有闪光点,不然迟早会被淘汰!???? ????欢迎点赞 ???? 收藏 ⭐留言 ???? 如有错误敬请指正! ????未来很长,值得我们全力奔赴更美好美好的生活✨ ????本文有Linux基础看的话更容易些,没基础也无大碍。✊ ????往期精彩 ????Docker简介

LiBai'S BLOG 4220

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Docker网络,网络工程师还不赶紧收藏!_网络工程师要学习docker吗

容器的接口与连接到Bridge上的veth接口,形成veth-pair,默认的Bridge网络,网关默认是docker0。默认的Bridge网络,docker0的地址是172.17.0.1/24,而第一个接入的设备,则IP地址为172.17.0.2/24…以此内推。一、 自定义与默认的bridge的关系图示:二、命令:docker network create -d bridge --subnet x.x.x.x/x(子网地址) --gateway x.x.x.x bridge-net1。

2401_84301853的博客 913

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Docker架构都不知道?这不很尴尬吗

Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。 主要由images、Container和Registry组成,图示如下: 1.概述: 由Linux Kernel、Base Image、自定义Image组成。Image是分层的,并且每一层都可以添加改变删除文件,成为一个新的image。不同的image可以共享相同的layer。image本身是read-only的。图示: 2.Linux Kernel(bootfs): 这个必须是Linux内核,大概10多M,

2401_84301389的博客 949

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

网络工程师的Docker容器化实践指南

容器化技术作为现代云计算基础设施的核心组件,通过轻量级隔离机制实现了应用服务的快速部署与弹性扩展。Docker作为主流容器引擎,其网络模型支持bridge、host、overlay等多种模式,能够满足不同场景下的网络连通性需求。对于网络工程师而言,掌握容器网络原理与配置技巧,可以将传统网络服务(如DHCP、DNS)快速迁移到容器环境,同时保持与物理网络设备的无缝集成。通过自定义网络、MTU优化和流量监控等实践,既能发挥容器化部署的环境隔离和快速回滚优势,又能确保网络性能满足数据中心级要求。特别是在金融、电信

weixin_34320159的博客 547

网络工程师转linux好吗,为什么网络工程师需要学习Linux系统

导读:为什么网络工程师需要学习Linux系统 最近有很多关于网络工程师应该学习如何保持相关性的讨论。虽然这个领域正在迅速变化,但我将建议我们作为网络工程师可以关注的最重要的领域之一是Linux。我的理由是双重的。首先,越来越明显的是,大多数网络操作系统都基……为什么网络工程师需要学习Linux系统最近有很多关于网络工程师应该学习如何保持相关性的讨论。虽然这个领域正在迅速变化,但我将建议我们作为网络...

weixin_39980129的博客 549

Docker网络,网络工程师还不赶紧收藏!_网络工程师要学习docker吗(3)

一、 自定义与默认的bridge的关系图示:二、命令:docker network create -d bridge --subnet x.x.x.x/x(子网地址) --gateway x.x.x.x bridge-net1,创建一个名为bridge-net1的网络。

2401_84297944的博客 1125

Docker网络,网络工程师还不赶紧收藏!_网络工程师要学习docker吗(1)

一、 自定义与默认的bridge的关系图示:二、命令:docker network create -d bridge --subnet x.x.x.x/x(子网地址) --gateway x.x.x.x bridge-net1,创建一个名为bridge-net1的网络。

2401_84301853的博客 978

Docker命令,网络工程师专属教程。_docker怎么看md5

由于inspect信息是一个大列表,内部是字典,本条命令的含义是,提起列表中0号元素(字典),的NetworkSettings键对应值中,IPAddress键对应的值。并且退出以后容器不会停止。:将一个容器导出为文件,再使用docker import命令将容器导入成为一个新的镜像,但是相比docker save命令容器文件会丢失所有源数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。(容器名):进入一个运行的容器的pts0号口,一般情况下从pts0接口登陆容器,都无法进行操作,因为主进程一直在运行。

2401_87298694的博客 1237

网络工程师眼中的docker

网络工程师眼中的docker好多年前,“云计算”这个名词刚出现的时候,好多概念还真是“云里雾里”、“虚无缥缈”,好多时候,大家把“云计算”等同于“网格计算”、“分布式计算”。似乎那个时候更注重是“计算”两字,或者可以说那个时候大家对云的理解还不够透彻,不知道“云”到底是啥玩意。又过了几年,“云计算”的概念清晰了许多,好多人认为“虚拟化”就是云计算,搞个workstation...

weixin_34061042的博客 282
上一篇: 【工具分享】一款用于指纹识别的Burp插件
下一篇: 现在有什么副业可以让人快速上岸? 可以试试这个行业,上岸其实不难!!
网络安全大白
博客等级 码龄5年 7305粉丝 698原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值