培训第三十九天(了解docker-compose,docker-compose编排容器,配置harbor服务)

news2024/11/16 15:32:41

一、回顾

1、拉取私有仓库镜像

 # 配置docker
 docker pull 10.0.0.10:5000/centosnginx:v0

2、容器网络类型

 brideg(net) default
 # docker启动之后会生成新的虚拟网卡,网卡的名称docker0
 # 网段默认是172.17.0.1
 # 所有的容器都桥接docker0,通过桥接共享网络
 brctrl show
   yum -y install bridge-utils
 host
   # 使用方便,直接使用宿主机的ip
   # 无法并发运行多个同类的容器
   docker run -it --network bridge|host|none   centos:latest /bin/bash
 none

3、跨主机容器网络(两台不同主机上的容器的连接)

 # A主机上的a1容器可以访问B主机上的b1容器
 # flanneld技术
 # 使用flanneld分配网段,被分配的网段都可以ping通
 # 步骤
 node11
   docker
   etcd(数据库,被flanneld保存网络地址网段等信息)
      yum -y install etcd
      # 1、配置文件
      /etc/etcd/etcd.conf
      # 修改了发布服务的端口和介绍请求的端口4001,2379
      ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
      ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379,http://10.0.0.11:4001"
      # 2、启动服务
      systemctl start etcd
      # 3、测试服务
      netstat -lntup | grep 2379
      netstat -lntup | grep 4001
      etcdctl set a 123
      etcdctl get a
      # 4、检查安全
      etcdctl -C http://10.0.0.10:4001 cluster-health
   flanneld
      yum -y install flanneld
      # 5、配置连接数据库
      vim /etc/sysconfig/flanneld 
      FLANNEL_ETCD_ENDPOINTS="http://10.0.0.11:2379"
      # 在启动之前要在etcd数据库中添加指定网段
      172.20.0.0/16
      etcdctl mk /atomic.io/network/config '{ "Network" : "172.20.0.0/16" }'
      # 6、启动服务,在启动flanneld服务的时候,会先读取etcd中的network信息,确定要创建的网段
      systemctl start flanneld
      # 7、查看分配的网段
      ifconfig|ip a s查看新的flannel0网卡
      # 8、如果不配置docker的daemon.json文件,那么默认docker容器的IP地址是172.17.0.1,需要修改daemon.json并且重启docker服务,让docker0这个网卡的网段和flannel0网卡的网段一致
      cat /run/flannld/subnet.env
      vim /etc/docker/daemon.json
      {
      ...,
      "bip" : "172.20.x.x",
      "mtu" : 1472
      }
      # 9、重启docker服务,查看docker0的网段
      systemctl restart docker
      ifconfig docker0
 node22
   # 1、安装docker
   # 2、安装flanneld
   yum -y install flanneld
   # 3、配置/etc/sysconfig/flanneld,从node11中的etcd数据库中读取网络信息
   # 4、启动flanneld
   # 5、ip a s flannel0 分配了一个新的网段
   # 6、修改node22下面的daemon 添加两个key bip mtu
   # 7、重启docker服务
   # 8、docker0的ip地址和flannel0的ip地址保持一致

二、使用docker-compose编排容器

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。

1、Docker-compose 定义

1)docker compose 是 docker 官⽅的开源项⽬,负责实现对 docker 容器集群的快速编排(容器,依赖,⽹络,挂载。。)

2)compose 是 docker 公司推出的⼀个⼯具软件,可以管理多个 docker 容器组成的应⽤

3) 需要定义⼀个 YAML 格式的配置⽂件 docker-compose.yml,写 好多个容器之间的调⽤关系

4)使⽤ compose 的步骤

使⽤ Dockerfile 定义各个微服务应⽤并构建出对应的镜像⽂件Dockerfile 的使⽤,以便可以在任何地⽅复制。

使⽤ docker-compose.yml 定义⼀个完整的业务单元,安排好整体应⽤中的各个容器服务。

最后,执⾏ docker-compose up 命令来启动并运⾏整个应⽤程序,完成⼀键部署。

2、Docker-compose 产⽣背景

1)使⽤ Dockerfile 定义镜像⽂件,再⼿动构建、运⾏容器等操作,⽽微服务架构⼀般包含若⼲个微服务,且每个微服务⼀般都会部署多个实例,所以,若每个微服务都需要⼿动启停,那么维护量会⾮常庞⼤,并且⼯作效率也会很低。

2)⽽ compose 是⽤于定义和运⾏多容器 docker 应⽤程序的⼯具。通过 compose,可以使⽤ YML ⽂件来配置应⽤程序需要的所有服务。

3)仅需使⽤⼀个命令,就可以从 YML ⽂件配置中创建并启动所有 服务。

4)Compose 可以基于 Compose ⽂件帮我们快速的部署分布式应 ⽤,⽆需⼿动⼀个个创建和运⾏容器。

5)Compose ⽂件是⼀个⽂本⽂件,通过指令定义集群中的每个容 器如何运⾏。

3、Docker-compose 核⼼概念

Docker-compose 将管理的容器分为三层:⼯程(project)、 服务(service)、容器(container)

1、⼯程:运⾏ compose 的⽬录下所有的⽂件,包括 docker-compose.yml、extends ⽂件、环境变量⽂件等组成⼀个⼯程, 若⽆特殊指定⼯程,⼯程名即为当前⽬录名。⼯程的默认配置⽂件为 docker-compose.yml,可通过环境变量 COMPOSE_FILE 或 -f 参数⾃定义配置⽂件,其定义了多个有依赖关系的服务及每个服务运⾏的容器。

2、 服务:⼀个⼯程中包含多个服务,每个服务中定义了容器运⾏的 镜像、参数、依赖等。⼀个服务中可包括多个容器实例。

3、容器:被 docker-compose 管理或部署的容器集群,调⽤ docker 服务提供的 API 来对容器进⾏管理,只要操作的平台⽀持 docker API,即可在其上进⾏ compose 的容器编排。

4、YAML ⽂件的格式和语法

1)YAML ⽂件格式

yaml 是⼀种标记语⾔很直观的数据序列化格式,可读性很⾼。 类似于 xml 描述性语⾔,语法⽐xml简单的很多。

yaml 数据结构通过缩进进⾏表示,连续的项⽬通过减号来表示,键值对⽤冒号分隔,数组⽤中括号括起来,hash⽤花括号括起来。

yaml ⽂件的基本格式由⼀系列键值对构成。每个键值对都⽤冒号“: ”分隔

 key: value

在 yaml 中,键和值之间只需要⼀个空格,这是为了保证 yaml ⽂件的可读性和⼀致性

对于字符串值,可以使⽤单引号或者双引号将其括起来,这样可以避免出现特殊字符或空格等问题

 name: 'Meng Mr' 
 age: "34"

如果值包含特殊字符(如冒号或短横线),则应该使⽤引号将其括起来

 description: "This is a YAML file: good for configuation files."
2)YAML 注意事项

不⽀持制表符 tab 键缩进,需要使⽤空格缩进。

通常开头缩进 2 个空格。

字符后缩进 1 个空格,如:冒号,逗号,横杠。

⽤ # 表示注释。

如果包含特殊字符⽤单引号引起来。

布尔值(true、false、yes、no、on、off)必须使⽤“”引号括起来,这样分析器会将它们解释为字符串。

3)列表和数组

在yaml中,可以使⽤“-”符号表示⼀个列表和数组

 fruits:    # fruits是⼀个键,它对应⼀个列表,包含三个元素:apple、banana、orange
   - apple   # fruits为⼀个⼤项,下⾯的⼩项只需要缩进⼏个
 空格,与其他项⽬对⻬即可
   - banana
   - orange
4)嵌套数据结构

yaml⽀持嵌套数据结构,可以⽤缩进来表示不同层级之间的关系, 可使⽤ # 号表示注释信息。

 person:   
  name: 'Meng Mr'   # 两个空格,name和age是person的⼀级⼦节点
  age: "34"
  address:          # address是person的⼆级⼦节点
    street: '123 Main St'   # address节点包含了street、city、state和zip四个⼀级⼦节点
    city: 'Anytown'
    state: 'CA'
    zip: '12345'
5)Docker-compose 安装

使用pip工具-------安装docker-compose

pip是python的包管理工具,和yum是redhat的关系是一样的

 # 由于要使用python环境运行docker-compose,所以需要验证python
 [root@docker1 ~]# python --version
 Python 2.7.5
 [root@docker1 ~]# pip
 -bash: pip: 未找到命令
 # 安装pip,python的包管理工具(需要使用pip下载安装docker-compose)
 [root@docker1 ~]# yum -y install python2-pip
 # 查看所有已经安装过的python第三方库,发现pip版本太低
 [root@docker1 ~]# pip list
 pip (8.1.2)
 # 升级pip版本
 [root@docker1 ~]# pip install --upgrade pip
 安装失败
 [root@docker1 ~]# pip install --upgrade pip==20.3 -i https://mirrors.aliyun.com/pypi/simple
 Successfully installed pip-20.3
 [root@docker1 ~]# pip list
 pip                          20.3
 # 使用pip安装docker-compose
 [root@docker1 ~]# pip install docker-compose --ignore-installed requests -i https://mirrors.aliyun.com/pypi/simple
 [root@docker1 ~]# pip list
 docker-compose      1.26.2
 # 配置docker
 [root@docker1 ~]# sh docker.sh 
 [root@docker1 ~]# docker --version
 Docker version 26.1.4, build 5650f9b
6)docker-compose 命令解析
1、⽂件内常⽤指令字段
(1)version

指定了Docker compose编排⽂件的版本 Docker Compose ⽬前有三个版本,分别为 Version1、 Version2和Version3。

Version1 是较早的版本,它将来会被弃⽤。

Version2 是⽬前的稳定版本,⽀持更多的指令。

Version3 在功能上与 Version2 类似,但进⾏了⼀些改进和 扩展,例如增加了对 Docker BuildKit 的⽀持,可以加速构建过程。

 version:'3'
(2)service

指定了在 docker compose 编排中要运⾏的服务,每个服务都有⼀ 个名称,并指定要使⽤的镜像和容器的配置选项。

 services: 
  mysql: #服务名
   # 再往下可以对该服务进⾏定义,⽐如指定映射端⼝,指定使⽤的镜像等,但要注意缩进格式。
(3)image

指定要使用的docker镜像

 services:
  mysql: # 服务名
    image: mysql:5.5 # 指定mysql镜像,如果主机内不存在该镜像,会从登录的docker镜像仓库内拉取,⼀般都是从dockerhub上拉取
(4)build

允许在 docker compose 编排中指定 dockerfile 的位置。

 services:
  mysql: # 服务名
    build: /docker/mysql # 这⾥为⽤户微服务⽂件夹,⾥⾯存放的是该服务代码jar包和Dockerfile⽂件
(5)environment

指定了要设置的环境变量。

 services:
  mysql: # 服务名
    environment: # 下⾯是MySQL环境变量的例⼦
    MYSQL_ROOT_PASSWORD:   000000 # 设置MySQL的root⽤户的密码
    MYSQL_DATABASE: database # 指定要创建的数据库名称
    MYSQL_USER: user # 指定要创建的MySQL⽤户名
    MYSQL_PASSWORD: 123 # 指定要创建的MySQL⽤户的密码
(6)volumes

挂载宿主机路径或命名卷

1、指定路径挂载

 services:
  mysql: # 服务名
    volumes:
     - ./mysql/data:/var/lib/mysq # 直接指定路径挂载

2、⽣成 volume 卷挂载

 [root@doc ~]# docker volume create mysql # ⽣成名为mysql的volume卷
 [root@doc ~]# vim docker-compose.yml
 services:
  mysql: # 服务名
    volumes:
     - mysql:/var/lib/mysq # 指定volume卷挂载

3、共享⽬录挂载

 [root@doc ~]# vim docker-compose.yml
 version: '2' # 使⽤共享⽬录挂载只有‘2’版本⽀持
 service:
  mysql: # 服务名
    volumes:
     - /var/lib/mysql # 将这个⽬录作为共享⽬录
  nginx:
    volumes:
     - /usr/local/nginx/html
  php:
    volumes_from: # 共享⽬录来⾃
    - mysql # 挂载的共享⽬录,挂载后会在容器内⽣成与被挂载的⽬录同名的路径
    - nginx # 共享挂载可以是⼀个列表
(7)port

指定了要宿主机映射到容器的端⼝,端⼝不能低于 60(宿主机端 ⼝:容器端⼝),如果选择的端⼝号低于 60,可能会与系统保留的知名端⼝冲突。

 services:
  mysql: # 服务名
    ports:
     - 3306:3306 # 宿主机端⼝:容器端⼝
(8)expose

⽤于在 docker 容器内部暴露端⼝的选项。

 services:
  mysql: # 服务名
    expose:
     - 3306
(9)networks

加⼊⽹络,引⽤顶级 networks 条⽬.

 networks: # 与services同级
  dev: # ⾃定义或已存在的⽹络设备名
    driver: bridge # 设备类型:⽹桥
    external: true # 外部存在:是
(10)hostname

设定容器主机名

 services:
  mysql: # 服务名
    hostname: mysql
(11)command

指定容器启动时要运⾏的命令,覆盖构建时的默认命令

 services:
  mysql: #服务名
    command: --character-set·server=utf8
2、docker compose 命令选项
(1)build:重新构建服务
(2) ps:列出容器
(3) up:启动所有docker-compose服务
(4) up -d:启动所有docker-compose服务启动并后台运⾏
(5) exec:进⼊容器实例内部
(6)scale:指定⼀个服务器启动数量
(7)top:显示容器进程
(8)logs:查看容器输出⽇志
(9)down:停⽌并删除容器、⽹络、卷、镜像
(10)stop:停⽌服务
(11) start:启动服务
(12) restart:重启服务
(13)config:检查配置
(14)config -q:检查配置,有问题才有输出
(15) --version:查看版本

5、docker-compose 实例

 # 准备docker环境
 [root@docker03 ~]#  vim /etc/docker/daemon.json
         "insecure-registries" : [
                 "http://10.0.0.52"
         ],
 [root@docker03 test]# vim /usr/lib/systemd/system/docker.service 
 ExecStart=/usr/bin/dockerd
 [root@docker03 test]# systemctl daemon-reload
 [root@docker03 test]# systemctl start docker
 [root@docker03 ~]# mkdir test
 [root@docker03 ~]# cd test
 # 创建docker-compose实例
 [root@docker03 test]# mkdir html
 [root@docker03 test]# echo "我是被编排的nginx" > ./html/index.html
 [root@docker03 test]# ls
 docker-compose.yml  html
 [root@docker03 test]# vim docker-compose.yml
 version: "3" #⽂件版本
 services:
   nginx:   #服务名
     container_name: c1 #容器名
     image: "nginx:latest"
     ports:
     - "80:80" #端⼝映射
     volumes:
     - /root/test/html/:/usr/share/nginx/html/ #挂载
 # 启动compose集群
 # 要在 docker-compose.yml ⽂件所在的⽬录下才能通过 docker compose 命令启动容器。
 [root@docker03 test]# docker compose up -d   # 启动⼯程后会根据指定的容器名称,⽣成对应的容器
 WARN[0000] /root/test/docker-compose.yml: `version` is obsolete 
 [+] Running 8/8
  ✔ nginx Pulled                                                                               30.4s 
    ✔ e4fff0779e6d Pull complete                                                                9.5s 
    ✔ 2a0cb278fd9f Pull complete                                                               19.8s 
    ✔ 7045d6c32ae2 Pull complete                                                               19.8s 
    ✔ 03de31afb035 Pull complete                                                               19.8s 
    ✔ 0f17be8dcff2 Pull complete                                                               19.9s 
    ✔ 14b7e5e8f394 Pull complete                                                               19.9s 
    ✔ 23fa5a7b99a6 Pull complete                                                               19.9s 
 [+] Running 2/2
  ✔ Network test_default  Created                                                               0.3s 
  ✔ Container c1          Started                                                               0.8s
 # 访问测试
 [root@docker03 test]# docker images
 REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
 nginx        latest    5ef79149e0ec   2 weeks ago   188MB
 [root@docker03 test]# docker ps
 CONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS         PORTS                               NAMES
 46d8b91c4a5e   nginx:latest   "/docker-entrypoint.…"   6 minutes ago   Up 6 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   c1
 [root@docker03 test]# curl 10.0.0.52
 我是被编排的nginx
 # 浏览器访问

三、配置harbor

Harbor 是一个用于存储和管理 Docker 镜像等容器镜像的企业级 Registry 服务器。

1、上传harbor文件,解压

 [root@docker1 ~]# tar zxf harbor-offline-installer-v2.11.1.tgz 
 [root@docker1 ~]# ls
 anaconda-ks.cfg  docker.sh  harbor  harbor-offline-installer-v2.11.1.tgz  v
 [root@docker1 ~]# cd harbor
 [root@docker1 harbor]# ls
 common.sh  harbor.v2.11.1.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare

2、修改配置文件

 # 配置文件
 # harbor的配置文件是harbor.yml但是解压后的目录中只有harbor.yml.tmpl
 # 需要复制一份修改名字即可
 [root@docker1 harbor]# cp harbor.yml.tmpl harbor.yml
 [root@docker1 harbor]# ls 
 common.sh  harbor.v2.11.1.tar.gz  harbor.yml  harbor.yml.tmpl  install.sh  LICENSE  prepare
 [root@docker1 harbor]# vim harbor.yml
   # 改为本机ip地址
   5 hostname: 10.0.0.51
   6 
   7 # http related config
   8 http:
   9   # port for http, default is 80. If https enabled, this port will redirect to https port
  10   port: 80
  11
  # 将有关https的部分全部注释掉
  12 # https related config
  13 # https:
  14   # https port for harbor, default is 443
  15   # port: 443
  16   # The path of cert and key files for nginx
  17   # certificate: /your/certificate/path
  18   # private_key: /your/private/key/path
  19   # enable strong ssl ciphers (default: false)
  20   # strong_ssl_ciphers: false
  43 # The initial password of Harbor admin
  # 查看默认的用户名和密码
  46 harbor_admin_password: Harbor12345

3、部署容器环境

 # 修改daemon.json文件
 [root@docker1 harbor]# vim /etc/docker/daemon.json
 {
         "registry-mirrors" : [
                 "https://do.nark.eu.org",
                 "https://dc.j8.work",
                 "https://docker.m.daocloud.io",
                 "https://dockerproxy.com",
                 "https://docker.mirrors.ustc.edu.cn",
                 "https://docker.nju.edu.cn"
         ],
         "host" : [
                 "tcp://0.0.0.0:2375",
                 "unix:///var/run/docker.sock"
         ],
         "insecure-registries" : [
         # 本机ip地址(仓库),使用80端口
                 "http://10.0.0.51"
         ],
         "bip" : "172.20.13.1/24",
         "mtu" : 1472
 }
 # 开启容器
 [root@docker1 harbor]# systemctl start docker
 # 修改docker文件
 [root@docker1 harbor]# vim /usr/lib/systemd/system/docker.service 
 ExecStart=/usr/bin/dockerd
 # 重新加载daemon文件
 [root@docker1 harbor]# systemctl daemon-reload
 # 重启docker
 [root@docker1 harbor]# systemctl restart docker

4、使用自带脚本检查并初始化配置harbor

 # 检查环境是否合适
 [root@docker1 harbor]# ./prepare
 prepare base dir is set to /root/harbor
 Unable to find image 'goharbor/prepare:v2.11.1' locally
 Successfully called func: create_root_cert
 # 查看端口是否被占用并关闭防火墙
 [root@docker1 harbor]# netstat -lntup | grep 5000
 [root@docker1 harbor]# netstat -lntup | grep 80
 [root@docker1 harbor]# systemctl stop firewalld
 # 开始初始化配置harbor环境
 [root@docker1 harbor]# ./install.sh 
 [+] Running 10/10
  ? Network harbor_harbor        Created                                                        0.1s 
  ? Container harbor-log         Started                                                        0.7s 
  ? Container registry           Started                                                        3.3s 
  ? Container harbor-portal      Started                                                        3.3s 
  ? Container redis              Started                                                        3.3s 
  ? Container harbor-db          Started                                                        3.3s 
  ? Container registryctl        Started                                                        3.3s 
  ? Container harbor-core        Started                                                       13.9s 
  ? Container nginx              Started                                                       22.9s 
  ? Container harbor-jobservice  Started                                                       22.8s
  ✔ ----Harbor has been installed and started successfully.----

5、查看容器运行情况

  # 查看被创建的容器,都是正在开启的状态,等一会让他全部开启
 [root@docker1 harbor]# docker ps -a
 CONTAINER ID   IMAGE                                 COMMAND                   CREATED          STATUS                                  PORTS                                   NAMES
 14b077f4d919   goharbor/nginx-photon:v2.11.1         "nginx -g 'daemon of…"   40 seconds ago   Up 14 seconds (health: starting)        0.0.0.0:80->8080/tcp, :::80->8080/tcp   nginx
 c041eb8edf2b   goharbor/harbor-jobservice:v2.11.1    "/harbor/entrypoint.…"   40 seconds ago   Restarting (2) Less than a second ago                                           harbor-jobservice
 58f2e1174eb9   goharbor/harbor-core:v2.11.1          "/harbor/entrypoint.…"   40 seconds ago   Up 24 seconds (health: starting)                                                harbor-core
 7e6f79dcae20   goharbor/harbor-db:v2.11.1            "/docker-entrypoint.…"   40 seconds ago   Up 33 seconds (health: starting)                                                harbor-db
 a7f3235a2bdf   goharbor/redis-photon:v2.11.1         "redis-server /etc/r…"   40 seconds ago   Up 33 seconds (health: starting)                                                redis
 623e25aff7e5   goharbor/registry-photon:v2.11.1      "/home/harbor/entryp…"   40 seconds ago   Up 33 seconds (health: starting)                                                registry
 2577d87bdac0   goharbor/harbor-portal:v2.11.1        "nginx -g 'daemon of…"   40 seconds ago   Up 33 seconds (health: starting)                                                harbor-portal
 2bf21b95c413   goharbor/harbor-registryctl:v2.11.1   "/home/harbor/start.…"   40 seconds ago   Up 33 seconds (health: starting)                                                registryctl
 201780bb9f41   goharbor/harbor-log:v2.11.1           "/bin/sh -c /usr/loc…"   41 seconds ago   Up 35 seconds (healthy)                 127.0.0.1:1514->10514/tcp               harbor-log

6、测试

到浏览器中访问本机ip地址

输入(用户名:admin 密码:Harbor12345)

点击 项目--------》library

7、推送镜像到harbor的私有仓库中

查看推送命令

 # 在命令行中登录页面
 [root@docker1 harbor]# docker login http://10.0.0.51
 Username: admin
 Password: Harbor12345
 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
 # 为镜像打标签
 [root@docker1 harbor]# docker tag centos:latest 10.0.0.51/library/centos:v0
 # 将本地镜像推送到私有仓库中
 [root@docker1 harbor]# docker push 10.0.0.51/library/centos:v0
 The push refers to repository [10.0.0.51/library/centos]
 74ddd0ec08fa: Pushed 
 v0: digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc size: 529

8、harbor配置中使用到的docker-compose命令

 [root@docker1 ~]# ls
 anaconda-ks.cfg  docker.sh  harbor  harbor-offline-installer-v2.11.1.tgz  v
 [root@docker1 ~]# cd harbor
 [root@docker1 harbor]# ls
 common     docker-compose.yml     harbor.yml       install.sh  prepare
 common.sh  harbor.v2.11.1.tar.gz  harbor.yml.tmpl  LICENSE
 # 一次性关闭所有容器
 [root@docker1 harbor]# docker-compose stop
 # 开启所有容器
 [root@docker1 harbor]# docker-compose start
 # 删掉所有容器
 [root@docker1 harbor]# docker-compose down
 # 重新检查环境
 [root@docker1 harbor]# ./prepare
 # 重新初始化
 [root@docker1 harbor]# ./install.sh

9、拉取harbor的私有仓库中的镜像

复制拉取镜像的命令

 # 在其他docker主机上配置daemon仓库,启动docker,使用复制的下载链接,添加共享的镜像
 [root@node11 ~]#  vim /etc/docker/daemon.json
         "insecure-registries" : [
                 "http://10.0.0.51"
         ],
 [root@node11 ~]# systemctl daemon-reload
 [root@node11 ~]# systemctl restart docker
 [root@node11 ~]# docker pull 10.0.0.51/library/centos@sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc
 10.0.0.51/library/centos@sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc: Pulling from library/centos
 Digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc
 Status: Downloaded newer image for 10.0.0.51/library/centos@sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc
 10.0.0.51/library/centos@sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc
 [root@node11 ~]# docker images
 REPOSITORY                 TAG       IMAGE ID       CREATED       SIZE
 centos                     latest    5d0da3dc9764   2 years ago   231MB
 10.0.0.51/library/centos   <none>    5d0da3dc9764   2 years ago   231MB

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

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

相关文章

对物料分别评估

业务示例 在公司中&#xff0c;某些物料是同时在内部进行生产和在外部进行采购的。由于必须根据值区分内部零件和外部零件&#xff0c;因此应为这些物料设置分别评估。 有关工厂内的评估&#xff0c;可使用分别评估根据特定标准区分物料的部分库存&#xff0c;并且可以不同方…

Python画笔案例-019 绘制阴影丫字

1、绘制阴影丫字 通过 python 的turtle 库绘制一个阴影丫字的图案&#xff0c;如下图&#xff1a; 2、实现代码 绘制一个阴影丫字图&#xff0c;以下为实现代码&#xff1a; """阴影丫字.py """ import turtleturtle.delay(0) turtle.speed(0)d…

Linux —— 驱动——platform平台总线

platform平台总线是Linux内核中一个重要的概念&#xff0c;主要用于管理那些不通过传统物理总线&#xff08;如USB、I2C、SPI等&#xff09;连接的设备&#xff0c;特别是SoC&#xff08;System on Chip&#xff0c;片上系统&#xff09;内部集成的外设。以下是对platform平台总…

mysql8.0查询等级排名可使用窗口函数,那5.7的版本呢?

1、需求&#xff1a;查询用户详情的同时查询用户的排名 2、首先看下数据库表设计 分为会员用户表member_user和会员等级表member_level&#xff0c;升级的条件是根据经验值升级&#xff0c;表结构如下&#xff1a; 用户表 member_user CREATE TABLE member_user (id bigint(…

C#操作ms office实现office转pdf

前提 安装office 2019 安装vs 2022 新建项目 引入4个com包 编写代码 代码结构 代码如下 using Microsoft.Office.Interop.Excel;namespace UseMsOffice {internal class Program{static void Main(string[] args){WordToPdf();ExcelToPdf();PPTToPdf();}static void W…

SpringBoot3与AOP完美结合:轻松追踪用户操作,实现精准日志记录

程序员必备宝典https://tmxkj.top/#/ 1.pom文件 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>com.alibaba</groupId&g…

LlamaIndex 实现 Agent

RAG 是在数据层面为大模型提供更多、更新的外部知识&#xff0c;而 Agent &#xff08;智能体&#xff09;&#xff0c;为大模型扩展了推理业务的能力。数据是静态的&#xff0c;数据周期可能是天、小时甚至到秒&#xff0c;通过 RAG 实现时&#xff0c;需要调用对应系统的 API…

uni-app组件

一. 什么是组件,有什么好处? 在uni-app中&#xff0c;组件是构成应用的基本单位&#xff0c;它们是用来定义用户界面的一部分&#xff0c;并且通常包含了视图和逻辑。组件的设计使得开发者能够以声明式的方式构建应用界面&#xff0c;并且通过组件化的开发方式来提高代码的复…

vue-cli搭建项目过程

一.前言 传统的前端项目架构&#xff1a; 指的就是一个项目中有很多个HTML文件&#xff0c;每一个HTML文件都是相互独立的&#xff0c;如果需要在页面中导入一些外部依赖的css,js文件&#xff0c;就需要在每一个html文件中都导入就会显得特别麻烦&#xff0c;而且这些外部依赖…

详细git使用教程以及git base here命令行

0 下载 这个是官网下载特别慢 Git - Downloads (git-scm.com) 1 最基本操作与初始配置 1.1&#xff0c;linux的基本命令可用 下载安装后鼠标右键选git base here即可打开 1.2&#xff0c;git init /git clone初始化&#xff0c;创建本地仓库 出现.git隐藏文件 git clone “…

Big Model Weekly | 第34期

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 01 MiniCPM-V: A GPT-4V Level MLLM on Your Phone 近期多模态大型语言模型&#xff08;MLLMs&#xff09;的快速发展&#xff0c;从根本上改变了人工智能研究和产业的格局&#xff0c;为实现人工智能的下一个重…

Java去掉字符串中的特殊符号只保留中文数字和字母

今天在做一个导入功能发现用户导入的数据有特殊符号&#xff0c;于是想着给他去掉&#xff0c;搜了一下发现大多数方法都只保留了字母数字&#xff0c;连中文都去掉了&#xff0c;这很明显不符合我的需求 直接上代码 /*** author Sakura* date 2024/8/27 15:18*/ public clas…

Python(C++)自动微分导图

&#x1f3af;要点 反向传播矢量化计算方式前向传递和后向传递计算方式图节点拓扑排序一阶二阶前向和伴随模式计算二元分类中生成系数高斯噪声和特征二元二次方程有向无环计算图超平面搜索前向梯度下降算法快速傅里叶变换材料应力和切线算子GPU CUDA 神经网络算术微分 Pytho…

使用谷歌浏览器查看原型

需求人员给了一个原型文件包&#xff0c;用谷歌浏览器打开提示以下内容&#xff1a; 找到需求人员发的原型文件包 进入到resources-->chrome&#xff0c;找到axure-chrome-extension.crx&#xff0c;复制一份出来命名为axure-chrome-extension.tar&#xff0c;然后在该目录下…

招联金融基于 Apache Doris 数仓升级:单集群 QPS 超 10w,存储成本降低 70%

在竞争激烈的消费金融市场中&#xff0c;有效利用海量数据、提升业务运营效率是赢得市场的关键。早期招联采用典型的 Lambda 架构提供业务报表、数据运营、个性推荐、风险控制等数据服务&#xff0c;而 Lambda 过多的技术栈也引发了数据孤岛、查询效率不足、代码复用性差以及开…

AI算法平台训练站裸土检测算法训练裸土检测算法源码

在全球化进程加快与环境问题日益突出的今天&#xff0c;裸土检测成为了环境监测和土壤管理中不可或缺的一环。裸土指的是没有植被覆盖的土壤区域&#xff0c;这些区域易受侵蚀&#xff0c;并可能导致土壤流失和环境退化。为了有效应对这些问题&#xff0c;裸土检测算法应运而生…

Redis持久化与主从同步

1 淘汰策略 127.0.0.1:6379> help expireEXPIRE key secondssummary: Set a keys time to live in secondssince: 1.0.0group: generic127.0.0.1:6379> help PEXPIREPEXPIRE key millisecondssummary: Set a keys time to live in millisecondssince: 2.6.0group: gener…

【CSP:202112-1】序列查询(Java)

题目链接 202112-1 序列查询 题目描述 求解思路 模拟&#xff1a;a数组可以看作是记录 f ( x ) f(x) f(x) 函数值发生变化出的 x x x 点&#xff08;每次自增1&#xff09;。因此将每段相同数值的 f ( x ) f(x) f(x) 用乘法计算出来即可&#xff0c;最后记得要加上最后一…

Java Web —— 第九天(事务)

事务管理 & AOP 事务回顾 概念 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;这些操作 要么同时成功&#xff0c;要么同时失败 操作 开启事务(一组操作开始前&#xff0c;开启事务): start transaction / begin 提交事务(这组操作全部成功…

服务器访问端口命令

服务器访问端口命令是一组用于管理服务器端口的命令行指令。服务器端口是用于与外部设备或应用程序进行通信的逻辑通道&#xff0c;它允许数据在服务器和其他设备之间传输。以下是一些常见的服务器访问端口命令。 netstat&#xff1a;这个命令用于检查服务器上当前的网络连接和…