架构师第二周作业

目录

1.总结Dockerfile的指令和Docker的网络模式

1.1 Dockerfile指令

1.1.1 FROM :指定基础镜像,必须放在Dockerfile文件第一个非注释行

1.1.2 LABEL : 指定镜像元数据,如:镜像作者等

1.1.3 RUN :执行shell命令

1.1.4 ENV:设置环境变量

1.1.5 COPY :复制文本

1.1.6 ADD:复制和解包文件

1.1.7  CMD:容器启动命令

1.1.8 ENTRYPOINT: 入口点

1.2 Docker的网络模式

1.2.1 Bridge网络模式:

1.2.2 Host模式

1.2.3 None模式

1.2.4 Container模式

1.2.5 自定义网络模式

2.搭建harbor私有仓库并且上传镜像到私有仓库

2.1 安装harbor

2.2 上传镜像到私有仓库

3.总结JumpServer的安装和使用

3.1 JumpServer安装

3.2 JumpServer使用

3.2.1 创建用户和组

3.2.2 管理资产

3.2.3 授权管理

3.2.4会话管理

3.2.5 命令过滤


1.总结Dockerfile的指令和Docker的网络模式

1.1 Dockerfile指令

1.1.1 FROM :指定基础镜像,必须放在Dockerfile文件第一个非注释行

默认情况下,docker bulid会在docker主机上查找指定的镜像文件,如果不存在,则会从Docker Hub Registry上拉去所需的镜像文件,如果找不到则会返回错误信息。

如果指定FROM scratch 则是指定一个空镜像

格式:
FROM [--platform=<platform>] <image> [AS <name>]
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
# 说明 :  
--platform 指定镜像的平台,比如 : linux/amd64, linux/arm64, or windows/amd64
tag digest 是可选项,如果不指定,默认为 latest

1.1.2 LABEL : 指定镜像元数据,如:镜像作者等

格式:
# 一行格式
LABEL multi .label1 = "value1" multi .label2 = "value2" other = "value3"
# 多行格式
LABEL multi .label1 = "value1" \
    multi .label2 = "value2" \
other = "value3"

1.1.3 RUN :执行shell命令

RUN 指令用来在 构建镜像阶段 需要执行 FROM 指定镜像所支持的 Shell 命令。
通常各种基础镜像一般都支持丰富的 shell 命令
注意 : RUN 可以写多个,每一个 RUN 指令都会建立一个镜像层,所以尽可能合并成一条指令 , 比如将多个
shell 命令通过 && 连接一起成为在一条指令
每个 RUN 都是独立运行的 , 和前一个 RUN 无关
#shell 格式 : 相当于 /bin/sh -c < 命令 > 此种形式支持环境变量
RUN < 命令 >
#exec 格式 : 此种形式不支持环境变量 , 注意 : 是双引号 , 不能是单引号
RUN [ "executable" , "param1" , "param2" ...]
#exec 格式可以指定其它 shell
RUN [ "/bin/bash" , "-c" , "echo hello wang" ]

1.1.4 ENV:设置环境变量

ENV 可以定义环境变量和值,会被后续指令 ( :ENV,ADD,COPY,RUN ) 通过 $KEY ${KEY} 进行引用, 并在容器运行时保持

# 变量赋值格式 1
ENV <key> <value>   # 此格式只能对一个 key 赋值 ,<key> 之后的所有内容均会被视作其 <value> 的组成
部分
# 变量赋值格式 2
ENV <key1> = <value1> <key2> = <value2> \   # 此格式可以支持多个 key 赋值 , 定义多个变量建议使用 ,
减少镜像层
<key3> = <value3> ...
# 如果 <value> 中包含空格,可以以反斜线 \ 进行转义,也可通过对 <value> 加引号进行标识 ; 另外,反斜线也
可用于续行
# 只使用一次变量
RUN <key> = <value> <command>
# 引用变量
RUN $key .....
# 变量支持高级赋值格式
${key:-word}
${key:+word}
如果运行容器时如果需要修改变量 , 可以执行下面通过基于 exec 机制实现
注意 : 下面方式只影响容器运行时环境 , 而不影响构建镜像的过程 , 即只能覆盖 docker run 时的环境变量 , 而不会影响docker build 时环境变量的值

docker run -e |--env <key> = <value>
# 说明
-e , --env list   #Set environment variables
--env-file filename     #Read in a file of environment variables

1.1.5 COPY :复制文本

复制本地宿主机的文件到容器中 。

COPY [--chown = <user>:<group>] <src>... <dest>
COPY [--chown = <user>:<group>] [ "<src>" ,... "<dest>" ] # 路径中有空白字符时 , 建议使用此格
说明 :
  • 可以是多个,可以使用通配符,通配符规则满足Gofilepath.Match 规则 filepath.Match 参考链接: https://golang.org/pkg/path/filepath/#Match
  • 必须是build上下文中的路径( Dockerfile 所在目录的相对路径),不能是其父目录中的文件
  • 如果是目录,则其内部文件或子目录会被递归复制,但目录自身不会被复制
  • 如果指定了多个, 或在中使用了通配符,则必须是一个目 录,且必须以 / 结尾
  • 可以是绝对路径或者是 WORKDIR 指定的相对路径
  • 使用 COPY 指令,源文件的各种元数据都会保留。比如读、写、执行权限、文件变更时间等
  • 如果事先不存在,它将会被自动创建,这包括其父目录路径,即递归创建目录

1.1.6 ADD:复制和解包文件

 该命令可认为是增强版的COPY,不仅支持COPY,还支持自动解压缩。可以将复制指定的 到容器中的

ADD [ -- chown = <user> : <group> ] <src> ... <dest>
ADD [--chown= <user> : <group> ] [" <src> ",... " <dest> "]

说明 :
  • 可以是Dockerfile所在目录的一个相对路径;也可是一个 URL;还可是一个 tar 文件(自动解压)
  • 可以是绝对路径或者是 WORKDIR 指定的相对路径
  • 如果是目录,只复制目录中的内容,而非目录本身
  • 如果是一个 URL ,下载后的文件权限自动设置为 600
  • 如果为URL且不以/结尾,则指定的文件将被下载并直接被创建为,如果以 / 结尾,则文件名URL指定的文件将被直接下载并保存为/< filename>
  • 如果是一个本地文件系统上的打包文件,: gz, bz2 ,xz ,它将被解包 ,其行为类似于"tar -x"命令, 但是通过URL获取到的tar文件将不会自动展开
  • 如果有多个,或其间接或直接使用了通配符,则必须是一个以/结尾的目录路径;如果不以/结尾,则其被视作一个普通文件,里面的内容将被直接写入到

1.1.7  CMD:容器启动命令

一个容器中需要持续运行的进程一般只有一个 ,CMD 用来指定启动容器时默认执行的一个命令,且其运行结束后, 容器也会停止 , 所以一般 CMD 指定的命令为持续运行且为前台命令 .

  • 如果docker run没有指定任何的执行命令或者dockerfile里面也没有ENTRYPOINT命令,那么开启容器时就会使用执行CMD指定的默认的命令
  • 前面介绍过的 RUN 命令是在构建镜像时执行的命令,注意二者的不同之处
  • 每个 Dockerfile 只能有一条 CMD 命令。如指定了多条,只有最后一条被执行
  • 如果用户启动容器时用 docker run xxx 指定运行的命令,则会覆盖 CMD 指定的命令
# 使用 exec 执行,推荐方式,第一个参数必须是命令的全路径 , 此种形式不支持环境变量
CMD [ "executable" , "param1" , "param2" ]
# /bin/sh 中执行,提供给需要交互的应用;此种形式支持环境变量
CMD command param1 param2
# 提供给 ENTRYPOINT 命令的默认参数
CMD [ "param1" , "param2" ]

1.1.8 ENTRYPOINT: 入口点

功能类似于CMD,配置容器启动后执行的命令及参数

# 使用 exec 执行
ENTRYPOINT [ "executable" , "param1" , "param2" ...]
# shell 中执行
ENTRYPOINT command param1 param2
  • ENTRYPOINT 不能被 docker run 提供的参数覆盖,而是追加,即如果docker run 命令有参数,那么参数全部都会作为ENTRYPOINT的参数
  • 如果docker run 后面没有额外参数,但是dockerfile中有CMD命令(即上面CMD的第三种用
  • 法),即Dockerfile中即有CMD也有ENTRYPOINT,那么CMD的全部内容会作为ENTRYPOINT的参
  • 如果docker run 后面有额外参数,同时Dockerfile中即有CMD也有ENTRYPOINT,那么docker run 后面的参数覆盖掉CMD参数内容,最终作为ENTRYPOINT的参数
  • 可以通过docker run --entrypoint string 参数在运行时替换,注意string不要加空格
  • 使用CMD要在运行时重新写命令本身,然后在后面才能追加运行参数,ENTRYPOINT则可以运行时无需重写命令就可以直接接受新参数
  • 每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个生效
  • 通常会利用ENTRYPOINT指令配合脚本,可以为CMD指令提供环境配置
范例 : 利用脚本实现指定环境变量动态生成配置文件内容
[root@ubuntu2204 nginx-web-entrypint] #cat Dockerfile
FROM nginx-alpine:1.24.0-v4.0
LABEL maintainer = "wangxiaochun <root@wangxiaochun.com>"
RUN mkdir -p /data/website
#COPY index.html /data/website
COPY entrypoint.sh /
CMD [ "nginx" , "-g" , "daemon off;" ]
ENTRYPOINT [ "/entrypoint.sh" ]
[root@ubuntu2204 nginx-web-entrypint] #cat entrypoint.sh
#!/bin/sh
#
#********************************************************************
#Author:           wangxiaochun
#QQ:               29308620
#Date:             2023-06-14
#FileName:         entrypiont.sh
#URL:               http://www.wangxiaochun.com
#Description:       The test script
#Copyright (C):     2023 All rights reserved
#********************************************************************
# 注意: alpine 镜像没有 bash ,此处使用 sh
cat > /apps/nginx/conf/conf.d/www.conf <<EOF
server {
  server_name ${HOST:-"www.wangxiaochun.com"} ;
  listen ${IP:-0.0.0.0} : ${PORT:-80} ;
  root   ${DOC_ROOT:-/apps/nginx/html} ;
}
EOF
echo ${HOST:-"www.wangxiaochun.com"} >
${DOC_ROOT:-/apps/nginx/html} /index.html
#nginx -g "daemon off;"
exec " $@ "

1.2 Docker的网络模式

 Docker 的网络支持5种网络模式:

  • none
  • bridge
  • container
  • host
  • network-name

 范例: 查看默认的网络模式有三个

[root@ubuntu1804 ~] #docker network ls
NETWORK ID         NAME             DRIVER          SCOPE
fe08e6d23c4c          bridge             bridge              local
cb64aa83626c         host                host                  local
10619d45dcd4         none               null                  local

指定网络模式:

默认新建的容器使用 Bridge 模式,创建容器时, docker run 命令使用以下选项指定网络模式
格式:
docker run --network <mode>
docker run --net = <mode>
<mode>: 可是以下值
none
bridge
host
container:< 容器名或容器 ID>
< 自定义网络名称 >

1.2.1 Bridge网络模式:

本模式是 docker 的默认模式,即不指定任何模式就是 bridge 模式,也是使用比较多的模式,此模式创建的容器会为每一个容器分配自己的网络 IP 等信息,并将容器连接到一个虚拟网桥与外界通信
可以和外部网络之间进行通信,通过 SNAT 访问外网,使用 DNAT 可以让容器被外部主机访问,所以此模式也称为NAT 模式
此模式宿主机需要启动 ip_forward 功能
bridge网络模式特点
  • 网络资源隔离: 不同宿主机的容器无法直接通信,各自使用独立网络
  • 无需手动配置: 容器默认自动获取172.17.0.0/16IP地址,此地址可以修改
  • 可访问外网: 利用宿主机的物理网卡,SNAT连接外网
  • 外部主机无法直接访问容器: 可以通过配置DNAT接受外网的访问
  • 低性能较低: 因为可通过NAT,网络转换带来更的损耗
  • 端口管理繁琐: 每个容器必须手动指定唯一的端口,容器产生端口冲容
范例 : 修改 Bridge 模式默认的网段方法 1
# 修改桥接地址
[root@ubuntu1804 ~] #vim /lib/systemd/system/docker.service
ExecStart = /usr/bin/dockerd -H fd:// --containerd = /run/containerd/containerd.sock
--bip = 10 .100.0.1/24
范例 : 修改 Bridge 网络配置方法 2
[root@ubuntu1804 ~] #vim /etc/docker/daemon.json
{
"hosts" : [ "tcp://0.0.0.0:2375" , "fd://" ],
"bip" : "192.168.100.100/24" ,         # 分配 docker0 网卡的 IP,24 是容器 IP netmask
"fixed-cidr" : "192.168.100.128/26" , # 分配容器 IP 范围 ,26 不是容器 IP 的子网掩码 , 只表示地址
范围
"fixed-cidr-v6" : "2001:db8::/64" ,
"mtu" : 1500 ,
"default-gateway" : "192.168.100.200" ,   # 网关必须和 bip 在同一个网段
"default-gateway-v6" : "2001:db8:abcd::89" ,
"dns" : [ "1.1.1.1" , "8.8.8.8" ]
}
[root@ubuntu1804 ~] #systemctl restart docker

1.2.2 Host模式

如果指定 host 模式启动的容器,那么新创建的容器不会创建自己的虚拟网卡,而是直接使用宿主机的网卡和IP 地址,因此在容器里面查看到的 IP 信息就是宿主机的信息,访问容器的时候直接使用宿主机 IP+ 容器端口即可,不过容器内除网络以外的其它资源,如: 文件系统、系统进程等仍然和宿主机保持隔离
此模式由于直接使用宿主机的网络无需转换,网络性能最高,但是各容器内使用的端口不能相同,适用于运行容器端口比较固定的业务
Host 网络模式特点
  • 使用参数 --network host 指定
  • 共享宿主机网络
  • 各容器网络无隔离
  • 网络性能无损耗
  • 网络故障排除相对简单
  • 容易产生端口冲突
  • 网络资源无法分别统计
  • 不支持端口映射
范例 :
# 创建 host 模式的容器
[root@ubuntu1804 ~] #docker run -d --network host --name web1 nginx-centos7-
base:1.6.1
41fb5b8e41db26e63579a424df643d1f02e272dc75e76c11f4e313a443187ed1
# 创建容器后,宿主机的 80/tcp 端口打开
[root@ubuntu1804 ~] #ss -ntlp|grep :80
LISTEN   0         128                 0 .0.0.0:80               0 .0.0.0:*      
users:(( "nginx" ,pid = 43762 ,fd = 6 ),( "nginx" ,pid = 43737 ,fd = 6 ))

1.2.3 None模式

在使用 none 模式后, Docker 容器不会进行任何网络配置,没有网卡、没有 IP 也没有路由,因此默认无法与外界通信,需要手动添加网卡配置IP 等,所以极少使用
none模式特点
  • 使用参数 --network none 指定
  • 默认无网络功能,无法和外部通信
  • 无法实现端口映射
  • 适用于测试环境

1.2.4 Container模式

使用此模式创建的容器需指定和一个已经存在的容器共享一个网络,而不是和宿主机共享网络,新创建的容器不会创建自己的网卡也不会配置自己的IP ,而是和一个被指定的已经存在的容器共享 IP 和端口范围,因此这个容器的端口不能和被指定容器的端口冲突,除了网络之外的文件系统、进程信息等仍然保持相互隔离,两个容器的进程可以通过lo 网卡进行通信
Container 模式特点
  • 使用参数 –-network container:名称或ID 指定
  • 与宿主机网络空间隔离
  • 空器间共享网络空间,直接使用对方的网络
  • 第一个容器的网络可能是bridge,或none,或者host,而第二个容器模式依赖于第一个容器,它们共享网络
  • 如果第一个容器停止,将导致无法创建第二个容器
  • 第二个容器可以直接使用127.0.0.1访问第一个容器
  • 适合频繁的容器间的网络通信
  • 默认不支持端口映射,较少使用
范例: 通过容器模式实现 wordpress

[root@ubuntu2004 ~] #docker run -d -p 80:80 --name wordpress -v
/data/wordpress:/var/www/html --restart=always wordpress:php7.4-apache
[root@ubuntu2004 ~] #docker run --network container:wordpress -e
MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e
MYSQL_PASSWORD=123456 --name mysql -d -v /data/mysql:/var/lib/mysql --
restart=always mysql:8.0.29-oracle
# 注意:数据库主机地址为 127.0.0.1 ,不支持 localhost

 范例: 第一个容器使用host网络模式,第二个容器与之共享网络

[root@ubuntu1804 ~] #docker run -d --name c1 --network host nginx
centos7.8:v5.0-1.18.0
5a60804f3917d82dfe32db140411cf475f20acce0fe4674d94e4557e1003d8e0
[root@ubuntu1804 ~] #docker run -it --name c2 --network container:c1
centos7.8:v1.0
[root@ubuntu1804 /] # ip a
1 : lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group
default qlen 1000
  link/loopback 00 :00:00:00:00:00 brd 00 :00:00:00:00:00
  inet 127 .0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
  inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever
2 : eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
group default qlen 1000
  link/ether 00 :0c:29:63:8b:ac brd ff:ff:ff:ff:ff:ff
  inet 10 .0.0.100/24 brd 10 .0.0.255 scope global eth0
      valid_lft forever preferred_lft forever
  inet6 fe80::20c:29ff:fe63:8bac/64 scope link
      valid_lft forever preferred_lft forever
3 : docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state
DOWN group default
  link/ether 02 :42:24:86:98:fb brd ff:ff:ff:ff:ff:ff
  inet 172 .17.0.1/16 brd 172 .17.255.255 scope global docker0
      valid_lft forever preferred_lft forever
  inet6 fe80::42:24ff:fe86:98fb/64 scope link
      valid_lft forever preferred_lft forever
[root@ubuntu1804 ~] #docker exec -it c1 bash
[root@ubuntu1804 /] # ip a
1 : lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group
default qlen 1000
  link/loopback 00 :00:00:00:00:00 brd 00 :00:00:00:00:00
  inet 127 .0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
  inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever
2 : eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
group default qlen 1000
  link/ether 00 :0c:29:63:8b:ac brd ff:ff:ff:ff:ff:ff
  inet 10 .0.0.100/24 brd 10 .0.0.255 scope global eth0
      valid_lft forever preferred_lft forever
  inet6 fe80::20c:29ff:fe63:8bac/64 scope link
      valid_lft forever preferred_lft forever
3 : docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state
DOWN group default
  link/ether 02 :42:24:86:98:fb brd ff:ff:ff:ff:ff:ff
  inet 172 .17.0.1/16 brd 172 .17.255.255 scope global docker0
      valid_lft forever preferred_lft forever
  inet6 fe80::42:24ff:fe86:98fb/64 scope link
      valid_lft forever preferred_lft forever
[root@ubuntu1804 /] #

1.2.5 自定义网络模式

除了以上的网络模式,也可以自定义网络,使用自定义的网段地址,网关等信息

可以使用自定义网络模式 , 实现不同集群应用的独立网络管理 , 而互不影响 , 而且在网一个网络内 , 可以直接利用容器名相互访问,非常便利

注意 : 自定义网络内的容器可以直接通过容器名进行相互的访问 , 而无需使用 --link

自定义网络实现
docker network create -d <mode> --subnet <CIDR> --gateway < 网关 > < 自定义网络名称 >
# 注意 mode 不支持 host none, 默认是 bridge 模式
-d <mode> 可省略,默认为 bridg
查看自定义网络信息
docker network inspect < 自定义网络名称或网络 ID>
引用自定义网络
docker run --network < 自定义网络名称 > < 镜像名称 >
docker run --net < 自定义网络名称 > --ip < 指定静态 IP> < 镜像名称 >
# 注意:静态 IP 只支持自定义网络模型
删除自定义网络
doccker network rm < 自定义网络名称或网络 ID>
: 利用自定义网络实现 Wordpress
[root@ubuntu2004 ~] #docker network create -d bridge --subnet 172.27.0.0/16 --
gateway 172.27.0.1 bridge2
[root@ubuntu2004 ~] #docker run -d -p 8080:80 --network bridge2 --name
wordpress2 -v /data/wordpress2:/var/www/html --restart=always wordpress:php7.4-
apache
[root@ubuntu2004 ~] #docker run --network bridge2 -e MYSQL_ROOT_PASSWORD=123456 -
e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=123456 --
name mysql2 -d -v /data/mysql2:/var/lib/mysql --restart=always mysql:8.0.29-
oracle
#wordpress 连接数据库时,数据库主机是容器的名称 mysql2

2.搭建harbor私有仓库并且上传镜像到私有仓库

注意:搭建harbor,必须先安装docker以及docker compose

2.1 安装harbor

#提前下载haproxy tar包文件或者使用wget在线下载,不推荐在线下载

wget https://github.com/goharbor/harbor/releases/download/v2.8.0/harbor-offline-installer-v2.8.2.tgz


#解压缩到指定目录

tar xvf harbor-offfline-installer-v2.8.2.tgz -C 、/apps

cd /apps/harbor

#修改配置文件

cp harbor.yml.tmpl harbor.yml

HARBOR_NAME=`hostname -I|awk '{print $1}'`   

sed -ri "/^hostname/s/reg.mydomain.com/${HARBOR_NAME}/" harbor.yml

sed -ri "/^https/s/(https:)/#\1/" harbor.yml

sed -ri "s/(port: 443)/#\1/" harbor.yml

sed -ri "/certificate:/s/(.*)/#\1/" harbor.yml

sed -ri "/private_key:/s/(.*)/#\1/" harbor.yml

sed -ri "s/Harbor12345/123456/" harbor.yml

sed -i 's#^data_volume: /data#data_volume: /data/harbor#' harbor.yml

#安装python,运行harbor安装脚本

apt -y install python

/apps/harbor/install.sh

#成功安装harbor后查看容器

[root@ubuntu1804 ~] #docker ps
CONTAINER ID   IMAGE                                COMMAND                  CREATED         STATUS                            PORTS                                   NAMES
bceb7edd65d6   goharbor/harbor-jobservice:v2.8.2    "/harbor/entrypoint.…"   8 seconds ago   Up 5 seconds (health: starting)                                           harbor-jobservice
b76a3dc29d9a   goharbor/nginx-photon:v2.8.2         "nginx -g 'daemon of…"   8 seconds ago   Up 7 seconds (health: starting)   0.0.0.0:80->8080/tcp, :::80->8080/tcp   nginx
93d16deeff91   goharbor/harbor-core:v2.8.2          "/harbor/entrypoint.…"   8 seconds ago   Up 8 seconds (health: starting)                                           harbor-core
d433df44e31b   goharbor/harbor-registryctl:v2.8.2   "/home/harbor/start.…"   9 seconds ago   Up 8 seconds (health: starting)                                           registryctl
3bbb2071bb2e   goharbor/harbor-db:v2.8.2            "/docker-entrypoint.…"   9 seconds ago   Up 8 seconds (health: starting)                                           harbor-db
0c334e971fa8   goharbor/redis-photon:v2.8.2         "redis-server /etc/r…"   9 seconds ago   Up 8 seconds (health: starting)                                           redis
ee08f68db46b   goharbor/harbor-portal:v2.8.2        "nginx -g 'daemon of…"   9 seconds ago   Up 8 seconds (health: starting)                                           harbor-portal
f02846d56bee   goharbor/registry-photon:v2.8.2      "/home/harbor/entryp…"   9 seconds ago   Up 8 seconds (health: starting)                                           registry
78e96d5fbc3c   goharbor/harbor-log:v2.8.2           "/bin/sh -c /usr/loc…"   9 seconds ago   Up 9 seconds (health: starting)   127.0.0.1:1514->10514/tcp               harbor-log

 

登录harbor页面

新建项目

 

2.2 上传镜像到私有仓库

准备一个本地镜像

root@ubuntu2004:~# docker images

REPOSITORY                      TAG       IMAGE ID       CREATED         SIZE
alpine-base                           1.0          63341a78f287   1 hours ago     5.59MB

#上传镜像前需要先登录harbor 

root@ubuntu2004:/apps/harbor# docker login harbor.huang.org
Username: admin
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

#给镜像贴标签

root@ubuntu2004:~# docker tag alpine-base:v1.0 harbor.huang.org/homework/alpine-base:v1.0
root@ubuntu2004:~# docker images
REPOSITORY                              TAG       IMAGE ID       CREATED              SIZE
alpine-base                             v1.0      c4a11418aa85   About a minute ago   5.59MB
harbor.huang.org/homework/alpine-base   v1.0      c4a11418aa85   About a minute ago   5.59MB

#上传镜像

root@ubuntu2004:~# docker push harbor.huang.org/homework/alpine-base:v1.0
The push refers to repository [harbor.huang.org/homework/alpine-base]
8d3ac3489996: Pushed 
v1.0: digest: sha256:96c3a6f7a362073dec55bb206c34ae4ba065340d3f961d485ff8a34bcc680e3f size: 528

验证上传成功

3.总结JumpServer的安装和使用

3.1 JumpServer安装

JumpServer安装环境要求:

mysql,redis

官方一键安装脚本

curl -sSL

https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash

3.2 JumpServer使用

登录 JumpServer 默认用户 : admin 密码 : ChangeMe

 

 3.2.1 创建用户和组

JumpServer 支持三种登录用户
  • 系统管理员
  • 普通用户
  • 系统审计员

创建用户huang

 

 创建运维组,并将huang加入组内

 

 

3.2.2 管理资产

 JumpServer 可以管理各种类型的资产

 

JumpServer 中的三种用户
  • 登录用户:
       分配给用户用于登录 JumpServer 时使用
  • 系统用户中的特权用户(管理用户):
        对后端服务器具有管理权限的系统帐号 root administrator sudo ALL 权限的用户 , 用于管理          后端服务器
        新版中已取消此名称 , 改名为 系统用户中特权用户
  • 系统用户中的普通用户(系统用户):
        给登录用户使用 ssh 连接后端服务器时对应的系统用户 , 一般是后端服务器的普通的系统用户          帐号 新版中改名为 系统用户中普通用户

 

创建管理用户(系统用户中特权用户)

管理用户是 jumpServer 用来管理后端服务器或其它资产的管理员用户 , 此用户必须对后端服务器有管理权限
管理用户特点 :
  • 通常是后端服务器的root或者是具备root权限的超级用户
  • 用于推送或者是创建系统用户
  • 用于获取被管理的硬件资产信息

创建资产 

创建节点dev,创建资产10.0.0.200

3.2.3 授权管理

 创建系统用户(系统用户中普通用户)

系统用户是分配给 JumpServer 用户 , 用来让 JumpServer 用户在连接后端服务器和其它资产 , 一般不会给管理权限
生产环境中 , 一般都会利用自动化运维工具提前在后端服务器创建好系统用户 , 在所有后端服务器统一用户ID信息 , 而非在 jumpserver 中创建

 

关联使用系统用户的资产

将前面创建的系统用户推送到后端服务器并自动创建
在系统用户中添加使用此用户的资产
执行账户推送
资产授权

 

切换用户huang,登录链接资产

 

 3.2.4会话管理

会话管理可以实现查看当前在线的会话命令记录、历史会话过去的执行过的命令 , 也可以强制将用户踢出

 历史会话可以回放用户的操作

 

3.2.5 命令过滤

使用命令过滤器可以禁止用户执行特定的危险命令 , 防止误操作或恶意行为
系统用户可以绑定一些命令过滤器,一个过滤器可以定义一些规则 当用户使用这个系统用户登录资产,然后执行一个命令. 这个命令需要被绑定过滤器的所有规则匹配,高优先级先被匹配, 当一个规则匹配到了,如果规则的动作是允许,这个命令会被放行, 如果规则的动作是禁止,命令将会被禁止执行, 否则就匹配下一个规则,如果最后没有匹配到规则,则允许执行
创建命令组

 

 创建命令过滤规则

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

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

相关文章

Python编程入门指南:从基础到高级

Python编程入门指南&#xff1a;从基础到高级 一、Python编程语言简介 1. Python是什么&#xff1f; Python是一门广泛使用的计算机程序编程语言&#xff0c;由荷兰人吉多范罗苏姆&#xff08;Guido van Rossum&#xff09;于1991年首次发行。Python是一种解释型、交互式、面…

抖音短视频seo矩阵系统源代码搭建---基于PHP语言开发部署

随着短视频市场的爆发式增长&#xff0c;越来越多的企业开始寻求在短视频领域建立自己的品牌形象&#xff0c;增加用户粘性和获取更多流量。为此&#xff0c;一套高效的抖音短视频seo矩阵系统源代码显得尤为重要。本文将介绍基于PHP语言的抖音短视频seo矩阵系统源代码开发&…

数据结构(5):树和二叉树

1 树的定义 1.1 树的基本概念 分支可以称为边&#xff0c;结点可以用于存放数据结构。 除了根节点&#xff0c;其他节点只有一个前驱&#xff01;&#xff01;&#xff01;&#xff01; 互不相交也就是 只有一个前驱结点&#xff01; 树应用的很广的 1.2 结点之间的关系 直接…

Infuse Pro for Mac全能视频播放器

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件…

什么是公司自建企业邮箱?自建企业邮箱有什么用?

什么是公司自建企业邮箱&#xff1f;公司自建企业邮箱有什么用途&#xff1f;一是品牌统一&#xff1b;二是安全性增强&#xff1b;三是定制化功能&#xff1b;四是控制与灵活性等等。哪些企业适合自建企业邮箱呢&#xff1f;本篇文章将为您一一解释。 一、什么是公司自建企业…

《Milvus Cloud向量数据库指南》——SPLADE:基于BERT的Learned稀疏向量技术深度解析

在自然语言处理(NLP)领域,随着深度学习技术的飞速发展,预训练语言模型如BERT(Bidirectional Encoder Representations from Transformers)已成为推动研究与应用进步的重要基石。BERT通过其强大的上下文感知能力,在多项NLP任务中取得了显著成效,尤其是在文本表示和语义理…

Cannot access org.springframework.context.ConfigurableApplicationContext

Cannot access org.springframework.context.ConfigurableApplicationContext SpringApplication.run曝红 解决方案&#xff1a; File -> Invalidate Cache and Restart 如果对你有用就点个赞&#xff01;

Platform Designer 自定义IP(用于纯RTL设计)

在开始菜单找到Quartus Prime工具&#xff0c;点击并打开。 点击Quartus菜单File——New&#xff1a; 选择Verilog HDL File&#xff0c;点击OK&#xff1a; 这是新建的.v文件如下&#xff1a; 在新建的.v文件中键入如下Verilog代码&#xff1a; module mux2x1( //模块的开头…

vue element-ui日期控件传参

前端&#xff1a;Vue element-ui <el-form-item label"过期时间" :rules"[ { required: true, message: 请选择过期时间, trigger: blur }]"><el-date-picker v-model"form.expireTime" type"date" format"yyyy-MM-dd&…

计算机实验室排课查询小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;实验室信息管理&#xff0c;实验室预约管理&#xff0c;取消预约管理&#xff0c;实验课程管理&#xff0c;实验报告管理&#xff0c;报修信息管理&#xff0…

鸿蒙北向开发 DevEco Studio 4.1 下载安装傻瓜式教程

开篇 由于鸿蒙处于快速发展中,鸿蒙的api快速迭代更新,老版本的DevEco studio无法支持更新版本的api,因此华为官网放弃了老版本的维护.直接从华为开发者官网无法下载老版本,当前华为开发者官网已经推出next版本了 DevEco studio3.1安装教程 上述教程提供的华为开发者官网地址已经…

Python --NumPy库基础方法(1)

NumPy Numpy(Numerical Python) 是科学计算基础库&#xff0c;提供大量科学计算相关功能&#xff0c;比如数据统计&#xff0c;随机数生成等。其提供最核心类型为多维数组类型&#xff08;ndarray&#xff09;&#xff0c;支持大量的维度数组与矩阵运算&#xff0c;Numpy支持向…

python编程表白爱心代码,来自程序员的浪漫!

Python爱心表白代码 感觉的紫色要更加浪漫&#xff0c;其中的文字也是可以直接更改的&#xff0c;非常方便 <文末附带精品籽料> 改变爱心的颜色: 在源代码的13-15行位置&#xff0c;可以通过更改16进制颜色色值进行改变爱心的颜色&#xff0c;这里小编改了一点绿色&…

人生低谷来撸C#--018 匿名方法

1、概念 在 C# 中&#xff0c;匿名方法&#xff08;anonymous methods&#xff09;和 Lambda 表达式&#xff08;lambda expressions&#xff09;是两种非常有用的功能&#xff0c;它们允许你在不定义命名方法的情况下编写简短的、内联的代码块。 匿名方法&#xff08;Anonym…

驰骋低代码如何实现对实体的权限控制?

驰骋低代码平台通过一套精细的权限控制机制&#xff0c;实现了对实体&#xff08;如车辆、学生、员工、固定资产等&#xff09;的查询范围权限和操作权限的全面控制。这种权限控制不仅确保了数据的安全性和准确性&#xff0c;还提高了系统的灵活性和可定制性。以下是驰骋低代码…

SpringBoot:JWT+Interceptor 实现基本的登录验证

前置背景 Result类 &#xff1a; package com.example.day724test.Dao;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;//统一响应结果 NoArgsConstructor AllArgsConstructor Data public class Result<T> {private Intege…

Qt+OpenCascade开发笔记(一):occ的windows开发环境搭建(一):OpenCascade介绍、下载和安装过程

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140604141 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

【数据结构】手把手教你单链表(c语言)(附源码)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;数据结构 目录 前言 1.单链表的概念与结构 2.单链表的结构定义 3.单链表的实现 3.1 单链表的方法声明 3.2 单链表方法实现 3.2.1 打印链表 3.2.2 创建新…

机械学习—零基础学习日志(高数11——三角函数)

零基础为了学人工智能&#xff0c;真的开始复习高数 三角函数之所以比较困难&#xff0c;是因为过于抽象&#xff0c;距离生活太过遥远&#xff0c;这里搜集一些资料&#xff0c;帮助大家能加深对三角函数的理解。 三角函数作用——能测距离 三角函数从应用层&#xff0c;开…

C++ | Leetcode C++题解之第287题寻找重复数

题目&#xff1a; 题解&#xff1a; class Solution { public:int findDuplicate(vector<int>& nums) {int slow 0, fast 0;do {slow nums[slow];fast nums[nums[fast]];} while (slow ! fast);slow 0;while (slow ! fast) {slow nums[slow];fast nums[fast]…