云原生(二)、Docker基础

Docker

Docker 是一种开源的容器化平台,用于开发、部署和运行应用程序。它允许开发者将应用程序及其所有依赖项打包到一个可移植的容器中,这个容器可以在任何支持 Docker 的环境中运行,无论是开发人员的个人笔记本电脑、测试环境、生产服务器还是云环境。

以下是 Docker 的一些主要特性和概念:

  1. 容器化技术: Docker 使用容器化技术,通过隔离进程和资源来打包应用程序及其依赖项。每个容器都是一个独立的运行环境,与宿主系统隔离,但与其他容器共享主机内核。这使得容器能够在各种环境中以一致的方式运行。

  2. 轻量级: 容器相对于传统的虚拟机来说更为轻量级,因为它们共享主机操作系统的内核,无需启动完整的操作系统实例。这使得容器的启动速度更快,占用更少的系统资源。

  3. 可移植性: Docker 容器可以在任何支持 Docker 的环境中运行,无论是在开发者的本地开发环境、测试环境还是生产服务器,以及公有云或私有云环境。

  4. 易于部署: Docker 容器可以通过 Docker 镜像进行部署。镜像是一个只读的模板,包含了运行容器所需的所有内容,包括代码、运行时环境、库、环境变量等。开发者可以轻松地创建、共享和更新镜像,使得应用程序的部署变得简单和可重复。

  5. 可扩展性: Docker 提供了丰富的 API 和生态系统,使得开发者可以扩展和定制 Docker 功能,满足特定的需求。

总的来说,Docker 提供了一种简单而强大的方式来打包、交付和运行应用程序,使得开发者能够更快速、更可靠地构建和部署软件。

1、安装Docker

1、官网安装参考手册:https://docs.docker.com/engine/install/centos/

2、保证操作系统环境符合要求

3、卸载旧的docker

bash 复制代码
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

4、国内服务器安装需要配置仓库地址

bash 复制代码
sudo yum install -y yum-utils  
# 外网地址 卡
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

#国内镜像
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5、安装docker

bash 复制代码
#更新yum索引
yum makecache  fast
#安装docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

6、启动与测试

bash 复制代码
sudo systemctl start docker

sudo docker run hello-world

7、卸载

bash 复制代码
systemctl stop docker

sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

2、镜像源配置

服务器在国内的,需要配置镜像源,提升下载速度。在服务器所在的云平台中搜索"容器镜像服务"。找到其中的镜像加速器。根据提示设置加速镜像源。

以华为云为例:(每个人加速器的地址不同)

执行docker info,当Registry Mirrors字段的地址为加速器的地址时,说明加速器已经配置成功。

bash 复制代码
[root@hcss-ecs-8f46 ~]# docker info
Client: Docker Engine - Community
 Version:    25.0.4
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.13.0
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.24.7
    Path:     /usr/libexec/docker/cli-plugins/docker-compose
 。。。
 Registry Mirrors:
  https://xxxxxxxxxxxxxxxxxxxx.mirror.swr.myhuaweicloud.com/
 Live Restore Enabled: false

3、Hello-World 干了什么

使用 "sudo docker run hello-world" 完成了什么事?

1、寻找镜像(在本地仓库寻找镜像,存在则通过镜像启动容器,不存在则去dockerhub仓库寻找并下载镜像)

2、下载镜像(存在则下载到本地,不存在则超时报错 )

bash 复制代码
Unable to find image 'asfiuhfiasufhawfasgijig:latest' locally
docker: Error response from daemon: pull access denied for asfiuhfiasufhawfasgijig, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.

3、仓库-镜像-容器

4、查看本地存在的镜像

bash 复制代码
[root@hcss-ecs-8f46 ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    d2c94e258dcb   10 months ago   13.3kB

4、Docker命令

bash 复制代码
docker version
docker info #查看docker详细信息
1、帮助命令
bash 复制代码
docker --help
Common Commands:
  run         Create and run a new container from an image
  exec        Execute a command in a running container
  ps          List containers
  build       Build an image from a Dockerfile
  pull        Download an image from a registry
  push        Upload an image to a registry
  images      List images
  login       Log in to a registry
  logout      Log out from a registry
  search      Search Docker Hub for images
  version     Show the Docker version information
  info        Display system-wide information

Management Commands:
  builder     Manage builds
  buildx*     Docker Buildx (Docker Inc., v0.13.0)
  compose*    Docker Compose (Docker Inc., v2.24.7)
  container   Manage containers
  context     Manage contexts
  image       Manage images
  manifest    Manage Docker image manifests and manifest lists
  network     Manage networks
  plugin      Manage plugins
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Swarm Commands:
  swarm       Manage Swarm

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  wait        Block until one or more containers stop, then print their exit codes

Global Options:
      --config string      Location of client config files (default "/root/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with
                           "docker context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket to connect to
  -l, --log-level string   Set the logging level ("debug", "info", "warn", "error", "fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit
2、镜像命令

docker images 展示列表

  • docker images -a 展示所有镜像
  • docker images -q 只展示镜像的id
  • docker images -aq 展示所有镜像的id

docker search 搜索镜像

  • docker search 镜像名称
  • docker search 镜像名称 --filter=Stars=50 收藏数大于50的镜像

docker pull 拉取镜像

  • docker pull 镜像名称:版本号 不带版本号则拉取最新版本

docker rmi 删除镜像

  • docker rmi 镜像名称/id(不一定输全,唯一即可)
  • docker rmi -f 镜像名称 强制删除
  • docker rmi -f $(docker images -aq) 删除所有镜像
3、容器命令

**docker run -itd 镜像名 ** 运行并在后台执行一个镜像

  • -d 后台启动
  • -i 让容器以交互的方式启动
  • -t 给容器分配一个终端使用
  • -p 指定端口映射
  • -P 随机暴露一个端口

查看容器命令

  • docker ps 查看运行的容器
  • docker ps -a 查看所有容器
  • docker ps -q 只查看id
bash 复制代码
# 运行并进入一个centos
docker run -itd centos

#进入容器内部后。exit退出容器,会停止运行该容器,使用Ctrl+P+Q,不会停止运行容器


#如果容器没有前台程序,-d后台启动后,仍旧无法保持容器启动状态
docker run -d centos

启动停止删除容器命令

  • docker start 容器名称/id 启动
  • docker restart 容器名称/id 重启
  • docker stop 容器名称/id 停止
  • docker kill 容器名称/id 强制停止
  • docker rm 容器名称/id 删除
  • docker rm -f 容器名称/id 强制删除
  • docker rmi -f $(docker ps -aq) 强制删除所有容器
4、其他常用命令

日志文件

  • docker logs
  • docker logs -tf 容器名称/id t时间戳,f打印最新日志
bash 复制代码
root@hcss-ecs-8f46 ~]# docker run -d centos /bin/sh -c "while true; do echo dayinlog;sleep 1;done"
8eb953c156567ebb444c61db8549e41abc1b655c29789df7cf0bc27c1eefd1fb
[root@hcss-ecs-8f46 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
8eb953c15656   centos    "/bin/sh -c 'while t..."   3 seconds ago    Up 3 seconds              infallible_mendel
8cc23452f957   centos    "/bin/bash"              14 minutes ago   Up 14 minutes             relaxed_wilbur
[root@hcss-ecs-8f46 ~]# docker logs -tf --tail 10 8eb953c15656
2024-03-13T11:41:36.417181845Z dayinlog
2024-03-13T11:41:37.418470622Z dayinlog
2024-03-13T11:41:38.420130400Z dayinlog
2024-03-13T11:41:39.421476353Z dayinlog
2024-03-13T11:41:40.423128221Z dayinlog
2024-03-13T11:41:41.424750606Z dayinlog
2024-03-13T11:41:42.426067446Z dayinlog
2024-03-13T11:41:43.427389098Z dayinlog
2024-03-13T11:41:44.428763016Z dayinlog

进程命令

  • docker top 容器名称/id

产看容器源数据 (经常使用)

能看到容器的镜像、日志、配置等详细数据

  • docker inspect 容器名称/id

进入容器

  • docker exec -it 容器名称/id /bin/bash

  • docker attach 容器名称/id 进入容器正在执行的终端,

    如果容器在执行死循环,则退不出来(卡死),例:

bash 复制代码
docker run -d centos /bin/sh -c "while true; do echo dayinlog;sleep 1;done"

拷贝

docker cp 容器id:/容器路径 宿主机路径

  • docker cp id:/home/test.go /root
5.一个简单的应用示例

启动nginx,并通过服务器ip:端口号的形式访问nginx初始页面

bash 复制代码
docker run -d --name my-Nginx -p 3500:80 nginx
bash 复制代码
#进入容器
docker exec -it my-Nginx /bin/bash

5.docker可视化界面

开放给公网的9000端口。docker自集成的一个可视化界面

bash 复制代码
[root@hcss-ecs-8f46 ~]# docker run -p 9000:9000 -p 8000:8000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /mydata/portainer/data:/data -d portainer/portainer:linux-amd64-2.0.1

# 安装并运行
Unable to find image 'portainer/portainer:linux-amd64-2.0.1' locally
linux-amd64-2.0.1: Pulling from portainer/portainer
b890dbc4eb27: Pull complete 
81378af8dad0: Pull complete 
Digest: sha256:77917f339201db91aa25e9498bc130aaf46faa69d16c78088d422df85ce114b1
Status: Downloaded newer image for portainer/portainer:linux-amd64-2.0.1
ae910af73e4f3af40568812a09cbe1af316dd9db3178849c31ba0a4a42cf2745
[root@hcss-ecs-8f46 ~]# 

6.docker镜像底层分析

Docker 镜像加载涉及到一系列步骤和概念。下面是一个简要的概述:

  1. Docker 镜像是什么?

    Docker 镜像是一个只读的模板,它包含了创建 Docker 容器所需的所有文件和元数据。镜像可以包含操作系统、应用程序和相关依赖。

  2. 镜像的存储和分发

    Docker 镜像存储在 Docker Registry 中,比如 Docker Hub。当你使用 docker pull 命令时,Docker 会从 Registry 中下载镜像到本地。这个过程通常是通过 HTTP 或 HTTPS 进行的。

  3. 镜像加载

    当你使用 docker run 命令来启动一个容器时,如果指定的镜像在本地不存在,Docker 会自动从 Registry 下载该镜像。然后,Docker 将这个镜像加载到本地的文件系统中。

  4. 联合文件系统 (Union File System)

    Docker 使用联合文件系统来构建镜像。这意味着一个镜像可以由多个文件系统层组成,每个文件系统层都可以看作是一个增量改变。当你启动一个容器时,Docker 会将这些文件系统层叠加在一起,使其看起来像一个完整的文件系统。

  5. 容器启动

    一旦镜像加载到本地,Docker 就可以使用这个镜像来创建和运行容器。容器是镜像的运行实例,它可以被启动、停止、删除等操作。

bash 复制代码
docker inspect centos

#能看到镜像分片下载的片段。每一个片段可以复用,当其他镜像使用该片段时,不会重复下载
 "RootFS": {
  "Type": "layers",
  "Layers": [
      "sha256:9eb82f04c782ef3f5ca25911e60d75e441ce0fe82e49f0dbf02c81a3161d1300",
      "sha256:6427e36e38734cc5f8172a32837f1a7089fb3e3ae8b5c12f6882cb6466d6b482",
      "sha256:1a4bac3ca47c45b2341b866d4403690c45c4a87e8cb897afda5dd6be52f37eda",
      "sha256:7c06655789f2bd431a94e2cf7d363afbe3497ba18ca4565dc772ba82ade0cb74",
      "sha256:411bb8845b78ec534f51535976d2a0c055c892e04d7f4fa67924c3a00a291f9e",
      "sha256:902a5f810181e3b8b2f7c5e39013d1e4acceb917f1f778ac199d495abba1e9f3",
      "sha256:52d9c23a9a201b21e95fed351c1ba1418a54ba1bd2ba26f5238d8bd8f38fd328",
      "sha256:9ffac285cc4fa861d7843807b42d509e216a8a107f694c4ac68f2a2d670332c7",
      "sha256:5ba1eb4d2ba5041fcc90b141f7942ff4e59570dddc8dc1786f2fe32d7d19c41d",
      "sha256:9ba725af2ff003dfa3fa052c2a9d8580f46b78bb603986d3428037c328811a3f",
      "sha256:d5455ab92c3f4a8a72d62f8ae5557440a8e5d09c6580e45f0f8f2747bb79c07d",
      "sha256:7c77abddd30092838eb397a4c64e73ee743eca8bf2412c9914e8ad2e6191bed9"
  ]
},

7.容器数据卷

Docker 容器数据卷是用于在容器和宿主机之间共享持久化数据的机制。这个概念最初在 Docker 0.7 版本中引入。

数据卷的主要作用是允许容器之间或容器与宿主机之间共享数据,并且这些数据可以在容器被销毁后仍然保留。数据卷可以用于存储应用程序的配置、日志、数据库文件等等。使用数据卷的优势包括数据的持久化、容器之间的数据共享、以及方便地对数据进行备份和恢复。

在 Docker 中,数据卷可以通过以下几种方式创建:

  1. 使用 -v 参数 :可以在 docker run 命令中使用 -v 参数来创建数据卷,并将宿主机上的目录或文件挂载到容器内部的指定路径上。例如:docker run -v /host/path:/container/path ...

  2. 使用 --mount 参数 :从 Docker 1.13 版本开始,推荐使用 --mount 参数来创建数据卷。这个参数提供了更加灵活的选项,可以指定数据卷的类型、读写权限等。例如:docker run --mount type=bind,source=/host/path,target=/container/path ...

  3. Dockerfile 中声明 :在 Dockerfile 中使用 VOLUME 命令来声明数据卷。这样在容器运行时,Docker 将自动创建对应的数据卷。例如:

    FROM image:tag
    VOLUME /container/path
    

无论采用哪种方式,一旦数据卷被创建,容器内的数据变动将会直接反映到宿主机上,并且即使容器被删除,数据卷中的数据也会保留下来,直到手动删除数据卷为止。

bash 复制代码
# 将本机/home/ceshi 挂在至容器内的/root下
docker run -it -v /home/ceshi:/root centos /bin/bash

#在本机与容器中各自新建文件,会发现容器内外都同时生成该文件
touch test.go

#docker rm -f centos 删除容器后,外部文件仍然存在
1、匿名挂载与具名挂载

在 Docker 中,有两种主要的数据卷挂载方式:匿名挂载和具名挂载。

  1. 匿名挂载

    • 匿名挂载是通过 -v--volume 参数或者 --mount 参数而不指定目标路径来创建的挂载。例如:docker run -v /host/path ...
    • 在匿名挂载中,Docker 会自动生成一个随机的目录,并将它挂载到容器内指定的路径上。这样的挂载方式对用户来说是透明的,用户无需关心实际挂载的目录是什么。
    • 匿名挂载对于临时存储数据或者不关心数据存储位置的场景非常有用。
  2. 具名挂载

    • 具名挂载是通过 -v--volume 参数或者 --mount 参数来指定宿主机上的目录与容器内部的目录进行挂载的方式。例如:docker run -v /host/path:/container/path ...
    • 具名挂载中,用户需要明确指定宿主机上的路径和容器内的路径,这样就可以将宿主机上的目录挂载到容器内部。这样的挂载方式更加灵活,可以控制数据的存储位置和访问权限。
    • 具名挂载适用于需要持久化存储数据或者对数据存储位置有特定要求的场景。
bash 复制代码
docker volume inspect 容器名称/id
2、数据卷容器

匿名挂载数据卷时,如果直接启动两个相同的容器,容器内的数据挂载是不互通的。即容器1挂载完成后。容器2挂载相同目录的数据卷。容器1中挂载的数据变化后。容器2无变化。

  • 容器卷继承 --volumes-from
bash 复制代码
#在多个相同的容器中,如果想要共享数据,使用数据卷容器,将容器作为一个父数据卷
#其他容器来挂载到父卷下,就可以实现共享来
docker run -it --name docker02 --volumes-from docker01 my/centos

8.DockerFile

dockerfile是用来构Docker镜像的构建文件,是由一系列命令和参数构建的脚本文件。

构建步骤:

  • 编写dockerfile文件
  • Docker build 构建镜像
  • docker run 运行容器
DOckerFile 指令
bash 复制代码
FROM        # 是基于哪个镜像的基础镜像,当前新镜像
MAINTAINER	# 镜像维护者的姓名混合邮箱地址
RUN					# 容器构建时需要运行的命
EXPOSE			# 当前容器对外保留出的端口
WORKDIR			# 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
ENV					# 用来在构建镜像过程中设置环境变量
ADD					# 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY				# 类似ADD,拷贝文件和目录到镜像中!
VOLUME			# 容器数据卷,用于数据保存和持久化工作
CMD					# 指定一个容器启动时要运行的命令,dockerFile中可以有多个CMD指令,但只有最后一个生效
ENTRYPOINT	# 指定一个容器启动时要运行的命令!和CMD一样
ONBUILD			# 当构建一个被继承的DockrFi1e时运行命令,父镜像在被子镜像继承后,父镜像ONBUILD被触发
DockerFile构建过程

基础知识:

1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数

2、指令按照从上到下,顺序执行

3、# 表示注释

4、每条指令都会创建一个新的镜像层,并对镜像进行提交

流程:

1、docker从基础镜像运行一个容器

2、执行一条指令并对容器做出修改

3、执行类似 docker commit 的操作提交一个新的镜像层

4、Docker再基于刚提交的镜像运行一个新容器

5、执行dockerfile中的下一条指令,直到所有指令执行完成

9.简单的实践示例,发行自己版本的centos

Docker Hub 中99% 的镜像都是通过在base镜像(Scratch)中安装和配置需要的软件构建出来的

Scratch镜像很赞,它简洁、小巧而且快速,它没有bug、安全漏洞、延缓的代码或技术债务。除了被Docker添加了metadata之外,它

基本上是空的。

我们在使用Dockerfile构建docker镜像时,一种方式是使用官方预先配置好的容器镜像。优点是我们不用从头开始构建,节省了很多工

作量,但付出的代价是需要下载很大的镜像包。

如果我们的需求是 在构建一个符合我们实际业务需求的Docker镜像的前提下,确保镜像尺寸尽可能的小,应该怎么做呢?

思路是使用空镜像scratch,可以说是真正的从零干始构建属于自己的镜像

创建dockerfile文件
dockerfile 复制代码
FROM centos
# 作者信息
MAINTAINER MYNAME<MYEMAIL@email.com>
#设置一个路径变量
ENV MYPATH /usr/local
#工作地址
WORKDIR $MYPATH


#在基础的centos上,添加自己的一些工具
RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "---------end-------"
CMD /bin/bash
构建镜像

最后一个.代表全部执行

bash 复制代码
docker build -f dockerfile-mycentos -t mycentos:1.0 .

报错centos8中镜像仓库中appstream不存在。替换仓库源,成功构建镜像

bash 复制代码
FROM centos
# 作者信息
MAINTAINER MYNAME<MYEMAIL@email.com>
#设置一个路径变量
ENV MYPATH /usr/local
#工作地址
WORKDIR $MYPATH

#解决centos8的问题,替换镜像源
RUN cd /etc/yum.repos.d/
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum makecache
RUN yum update -y


#在基础的centos上,添加自己的一些工具
RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "---------end-------"
CMD /bin/bash

docker history 可以查看镜像的变更历史

镜像发布

公用仓库 dockerhub https://hub.docker.com/

bash 复制代码
docekr login -u 用户名  -p  密码
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

#登录成功

#上传镜像需要打标签
docker tag 8732db9fe584 bukel/mycentos:1.0
docker push bukel/mycentos:1.0

#结束后,向全世界共享了你的镜像
镜像本地打包与加载
bash 复制代码
docker save
docker load

总结

相关推荐
VinciYan32 分钟前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
tntlbb1 小时前
Ubuntu20.4 VPN+Docker代理配置
运维·ubuntu·docker·容器
Gabriel_liao2 小时前
Docker安装Neo4j
docker·容器·neo4j
有一个好名字2 小时前
zookeeper分布式锁模拟12306买票
分布式·zookeeper·云原生
Anna_Tong5 小时前
云原生大数据计算服务 MaxCompute 是什么?
大数据·阿里云·云原生·maxcompute·odps
豆豆豆豆变5 小时前
Docker轻量级可视化工具Portainer
docker·容器·自动化运维
花晓木5 小时前
k8s etcd 数据损坏处理方式
容器·kubernetes·etcd
运维&陈同学5 小时前
【模块一】kubernetes容器编排进阶实战之基于velero及minio实现etcd数据备份与恢复
数据库·后端·云原生·容器·kubernetes·etcd·minio·velero
花晓木5 小时前
k8s备份 ETCD , 使用velero工具进行备份
容器·kubernetes·etcd
大熊程序猿5 小时前
xxl-job docker 安装
运维·docker·容器