仓库registry
公共仓库
Docker Hub 这样的公共仓库
本地仓库
docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。
Harbor 是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装
还整合了两个开源的安全组件,一个是Notary,另一个是Clair,Notary类似于私有CA中心,而Clair则是容器安全扫描工具
离线安装harbor
安装步骤
1.安装docker并运行
docker --version
离线环境中安装Docker之前,我们需要先安装一些依赖项。
这些依赖项包括containerd.io、runc、docker-ce-cli和docker-ce
2.安装docker-compose并给执行权限
docker-compose --version
https://github.com/docker/compose/releases
mv docker-compose /usr/local/bin && chmod u+x /usr/local/bin/docker-compose
3.下载harbor
https://github.com/goharbor/harbor/releases
4.解压并编辑配置文件
root用户
tar xzvf harbor-offline-installer-v2.9.1.tgz
cd harbor/ && docker load -i harbor.v2.9.1.tar.gz
##修改IP web密码 数据目录 注释https
mv harbor.yml.tmp harbor.yaml
##环境准备
./prepare
./install
harbor的日志存放路径为:
/var/log/harbor
5.配置私有仓库执行权限
01 /etc/docker/daemon.json
{"insecure-registries": ["your-registry-url"]}
insecure-registries": ["registry1的IP地址:端口号","registry2的IP地址:端口号"]
6.验证
01.命令行验证是否搭建成功
docker login 10.77.3.185:8087
Username (admin): 输入账户:admin
Password: 输入默认密码:Harbor12345
02.登录验证
{hostname}:{port} 地址打开harbor服务页面并登录
docker images |grep goharbor | awk {'print $3'}
排查过程
01.日志: harbor日志存储目录:/var/log/harbor
docker 自带的日志查看
docker logs redis
docker logs harbor-core
02.### Redis is running
docker exec redis redis-cli ping
docker exec redis ps -ef | grep redis
ps -ef | grep redis
systemctl status redis
03.### docker insepct
"Path":"/harbor/entrypoint.sh"
docker exec harbor-core cat /harbor/entrypoint.sh
docker exec harbor-core cat /harbor/harbor_cert.sh
docker exec harbor-core file /harbor/harbor_core
Docker network
1.docker network
Driver: birdge host none containe
说明
docker中,网络的配置是以json格式存在的,下面我们就来看看每种类型网络配置信息
使用docker run 创建Docker容器,可以用–net或–network选项指定的网络模式
birdge 桥接网络: docker服务默认会创建一个docker0网桥,该桥接网络的名称是docker0,它是内核层连通了其他物理或虚拟网卡,
这就是将所有容器和本地主机都放到同一个物理的网络中。
docker默认指定了docker0接口的IP地址和子网掩码,让主机和容器之间可以通过网桥相互通讯
默认选择bridge的情况下,容器启动后会通过DHCP获取一个地址
host 主机网络 :直接使用宿主机的ip地址与外界进行通信,不再需要额外进行NAT转换
Container
none-null
自定义网络(Custom Network)
网络配置(None Network)
容器间通信和外部(宿主机外的网络)与容器的通信。
容器通信
Docker 提供了容器间通信的功能,可以通过容器名称或 IP 地址进行通信
容器间可以通过 IP 地址相互通信
外部环境和容器之间通信
通过宿主机的 IP 地址直接访问容器 host Port Mapping
自定义网络
验证是否连通:
进到database容器内部,ping web容器:docker exec -it 容器ID /bin/bash
进到web容器内部,ping database容器
##ping 报错 ping: socket SOCK_DGRAM 1: Permission denied 不影响
kernel bug workaroud: echo 0 999999 |sudo tee /proc/sys/net/ipv4/ping_greouyp_range
Docker网络
EXPOSE,-p,-P,-link
hostPort:containerPort格式可以将本地主机特定端口映射到容器的特定端口,以实现外部访问容器的目的
-p 5000:5000
显示: 0.0.0.0:5000表示本地主机5000端口上的所有ip地址
:::5000->5000/tcp
-p 127.0.0.1::5000
显示 127.0.0.1:-> 5000
docker run -p时,实际上是通过 iptables 做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。
-p 192.168.1.250:803:80
docker在执行此命令时,是向iptables注入了一条规则将主机803映射到容器80端口
iptables firewalld
跨主机通信: Overlay网络
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)
0.0.0.0:port1->port2/tcp 表示将主机的端口号映射到容器内部的端口号,其中0.0.0.0表示监听所有的网络接口;
:::port1->port2/tcp 表示将主机的端口号映射到容器内部的端口号,其中:::表示监听所有的IPv6网络接口。
port/tcp 表示容器内部的端口号和协议类型;
port/tcp 显示有两种方法,
一种是在Dockerfile中使用EXPOSE指令指定,另一种是在运行容器时使用--expose参数指定
如果把一个容器内暴露端口做成了端口映射形式,那么它将不会出现在坐标容器内暴露端口的列表中。
--link=[] 添加连接到另一个容器
--expose=[] 开放一个端口或一组端口
Dockerfile中的EXPOSE只是声明,真正要暴露这个端口需要在构建容器时,使用-P选项
网络排查
网络不可达,主要现象为 ping 不通,其可能原因为
端口不可达,主要现象为可以 ping 通,但 telnet 端口不通,其可能原因为
DNS 解析异常:主要现象为基础网络可以连通,访问域名报错无法解析,访问 IP 可以正常连通
大数据包丢包:主要现象为基础网络和端口均可以连通,小数据包收发无异常,大数据包丢包
网络不可达(ping 不通):
端口不可达(telnet 不通):
DNS 解析异常(域名不通)
大数据包丢失(大包不通)
###net.ipv4.ping_group_range 是 Linux 系统内核中的一个参数,它可以用来配置ping命令所使用的组 ID 范围。
该参数的默认值为 {0, 65535},即组 ID 的最小值为 0,最大值为 65535
删除日志方式-删除大的 log 文件
方式一:
cat /dev/null>$log
Linux执行sudo echo xxx >> 命令提示权限不够的问题
bash -c命令。该命令可以让bash运行整条字符串命令,前加sudo使得整条命令运行时具有root权限
sudo bash -c 'echo aa >> a.txt'
方法二:
使用tee命令。该命令可以将管道中内容写入文件,只需要对该命令赋予root权限就可以操作a.txt文件
echo aa |sudo tee -a a.txt >/dev/null
注意:tee命令的-a选项是追加的意思,如果不加此选项,输出文本将覆盖文件
redis命令行
Redis默认使用6379端口作为数据访问端口
Redis服务器默认侦听TCP端口6379
Sentinel和Redis之间使用专用的TCP连接通信,Sentinel默认侦听TCP端口26379。(Sentinel是Redis的高可用性方案)
Redis是Remote Dictionary Server的简称,是一个由意大利人Salvatore Sanfilippo开发的key-value存储系统,
本地启动:redis-cli
远程启动:redis-cli -h host -p port -a password
了解信息:
ping 返回 PONG
help
info 获取Redis服务器的信息,包括服务器状态、内存使用情况、客户端连接数等
keys *
数据库对外都是一个从0开始的递增数字命名,Redis默认支持16个数据库
SELECT命令更换数据库,如要选择1号数据库:
redis> SELECT 1
操作:
key操作命令
String类型命令 hash类型命令 list类型命令 set类型命令 zset类型命令
持久化命令等
客户端发送一个ping请求,服务端回应一个pong响应
通过 CONFIG 命令查看或设置配置项 CONFIG GET *
构成:
数据
String: 字符串 SET 和 GET 命
Hash: 散列 HMSET, HGET
List: 列表 lpush lrange
Set: 集合 sadd
Sorted Set: 有序集合 zadd
执行脚本的常用命令为 EVAL
### 确认redis 是否在容器内启动--检查redis配置文件--检查端口是否被占用--检查docker网络配置
ls /etc/systemd/system/
/etc/systemd/system/redis.service
failed to write PID file:permission denied
docker exec redis cat /etc/redis.conf |grep pidfile
docker exec redis cat /etc/redis.conf |grep pidfile
pidfile /var/run/redis_6379.pid # 当 Redis 以守护进程运行时,自动将 PID 写入该文件,防止重复启动
/var/run/xxx.pid 文件,用于记录进程 ID,防止启动多个进程副本。进程启动后,自动给 xxx.pid 加文件锁,
只有获得该锁的进程才有写权限,把自身 PID 写入文件,未能成功获取该锁的进程自动退出。注意,文件锁的状态不会被子进程继承
参考
https://goharbor.io/docs/2.9.0/install-config/download-installer/
https://goharbor.io/docs/2.9.0/install-config/configure-yml-file/
https://github.com/goharbor/harbor/releases
https://blog.csdn.net/qq_29974229/article/details/125257797
标签:容器,harbor,端口,redis,排查,Docker,ping,docker
From: https://www.cnblogs.com/ytwang/p/17897682.html