当前位置:   article > 正文

架构师第二周作业

架构师第二周作业

目录

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 命令过滤

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

 

 创建命令过滤规则

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/921165
推荐阅读
相关标签
  

闽ICP备14008679号