一.容器和单机容器编排入门与实战 2.3 Docker Containerd、Harbor镜像仓库

docker安装后containerd默认已安装,containerd包含如下命令组件:

•containerd:高性能容器运行时。

•ctr:containerd的命令行客户端。

•runc:运行容器的命令行工具。

docker、containerd、docker-shim、runC关系:

docker:docker本身而言,包括了docker client和dockerd,dockerd实属是对容器相关操作的api的最上层封装,直接面向操作用户。

containerd:dockerd实际真实调用的还是containerd的api接口(rpc方式实现),containerd是dockerd和runC之间的一个中间交流组件。

docker-shim:一个真实运行容器的载体,每启动一个容器都会起一个新的docker-shim的进程。它通过指定三个参数:容器ID、boundle目录(containerd对应某个容器生成目录)、运行时二进制(默认是runC)来调用runC的api创建一个容器。

runC:一个命令行工具端,根据OCI的标准来创建和运行容器。

 

Ubuntu安装containerd:
更新镜像仓库并安装依赖包:
root@ubuntu2204:~# apt update
root@ubuntu2204:~# sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
导入docker的公钥:
root@ubuntu2204:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
添加镜像源:
root@ubuntu2204:~#echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker- ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
更新镜像仓库:
root@ubuntu2204:~# apt update
验证containerd版本:
root@ubuntu2204:~# apt-cache madison containerd.io
containerd.io | 1.6.8-1 | https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu jammy/stable amd64 Packages
containerd.io | 1.6.7-1 | https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu jammy/stable amd64 Packages
安装containerd:
root@ubuntu2204:~# apt install containerd.io=1.6.8-1
root@ubuntu2204:~# containerd --version
containerd containerd.io 1.6.8 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6

centos安装containerd:
~]# yum install -y yum-utils device-mapper-persistent-data lvm2
~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
~]# sudo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
~]# yum list containerd.io --showduplicates | sort –r
~]# yum install containerd.io-1.6.8



containerd配置文件:
默认配置参数:
~# containerd config default
自定义配置:
~]# containerd config default > /etc/containerd/config.toml
61 sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7”
153 [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
154 [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
155 endpoint = ["https://xxx.mirror.aliyuncs.com"]
~]# systemctl restart containerd && systemctl enable containerd
更新runc:
# wget https://github.com/opencontainers/runc/releases/download/v1.1.4/runc.amd64
# cp runc.amd64 /usr/bin/runc
# chmod a+x /usr/bin/runc
# runc -v
runc version 1.1.4

默认Containerd管理的容器仅有lo网络,无法访问容器之外的网络,可以为其添加网络插件,使用容器可以连接外网。CNI(Container Network Interface)
 cni:
~]# wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
~]# mkdir /opt/cni/bin -pv
# tar xvf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin/

 


客户端使用:
containerd相比docker多了一个命名空间的逻辑概念,ctr命令默认是在default命名空间里,而在使用nerdctl命令的时候,却是在k8s.io命名空间里,所以
不指定namespace会发现看到的镜像、容器等内容不一样。
 ctr:(不好用,一般不用)
~]# ctr images pull docker.io/library/nginx:1.20.2
~]# ctr -n k8s.io images ls
~]# ctr images ls
运行容器并使用宿主机网络:
~]# ctr run -t --net-host docker.io/library/nginx:1.20.2 test-container1

 

推荐使用nerdctl
 nerdctl-是一个兼容docker的containerd的客户端,https://github.com/containerd/nerdctl
~]# wget https://github.com/containerd/nerdctl/releases/download/v0.23.0/nerdctl-0.23.0-linux-amd64.tar.gz
~]# tar xvf nerdctl-0.23.0-linux-amd64.tar.gz -C /usr/bin/

 创建容器并指定端口:
~]# nerdctl run -d -p 80:80 --name=nginx-web1 --restart=always nginx:1.22.0-alpine
~]# nerdctl ps
~]# nerdctl exec -it 858730bb0492 sh
~]# nerdctl run -d -p 8080:8080 --name=tomcat-web1 --restart=always tomcat:7.0.88-alpine

 

 

 

harbor简介:

  Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,由vmware开源,在Docker Registry的基础至上添加了一些企业必需的功能特性,例如安全认证、镜像扫描和镜像管理、远程镜像复制等,扩展了开源的Docker Distribution的功能,作为一个企业级的私有Registry服务器,Harbor提供了更好的性能和安全,提升了用户使用Registry分发镜像镜像的效率,Harbor支持安装在多个Registry节点以实现镜像资源夸主机复制、从而实现镜像服务的高可用和镜像数据的安全,另外将镜像全部保存在私有网络的Registry中, 也可以确保代码数据和密码配置等信息仅在公司内部网络中传输,从而保证核心数据的安全性。
 harbor官方网址:
 https://goharbor.io/
 harbor官方github地址:
 https://github.com/vmware/harbor
 vmware官方开源服务列表地址:
 https://vmware.github.io/harbor/cn

 

harbor的优势:
  基于角色的访问控制:用户与Docker镜像仓库通过“项目”进行项目管理,可以对不同的账户设置不同的权限,以实现权限的精细管控。
  镜像复制:镜像可以在多个Registry实例中复制(同步),可以实现高性能、高可用的镜像服务。
  图形化用户界面:用户可以通过浏览器来浏览,管理当前Docker镜像仓库,管理项目和镜像等。
  AD/LDAP 支:Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
  审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  国际化:已拥有英文、中文、德文、日文和俄文等多语言支持版本。
  RESTful API:提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
  部署简单:提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。
 
harbor组件简介:
  Core Service:基于nginx实现的harbor反向代理组件,用于接受客户端请求,代理会转发harbor web和docker client的各种请求到后端服务上。
  Admin Service:harbor系统管理接口,可以修改系统配置以及获取系统信息。
  Job Service:harbor里面主要是为了镜像仓库之前同步使用的。
  SQL Database:存储项目的元数据、用户、规则、复制策略等信息。
  Image Registry:存储docker images的服务,提供镜像读写请求服务。
  Redis:存储缓存信息。
  vulnerability scanning: 镜像漏洞扫描服务(基于红帽的clair实现,https://github.com/quay/clair?utm_source=thenewstack&utm_medium=website&utm_content=inline- mention&utm_campaign=platform)。
  trusted content:可信服务,用于验证镜像的数字签名信息,保证镜像的一致性(依赖于ssl实现)。
 
harbor 部署-http:


http镜像仓库:
 1、安装docker:
 root@docker-harbor1:~# cd /usr/local/src/
 root@docker-harbor1:/usr/local/src# tar xvf docker-20.10.19- binary-install.tar.gz
 root@docker-harbor1:/usr/local/src# bash docker-install.sh
 2.安装harbor:
 root@docker-harbor1:~# mkdir /apps
 root@docker-harbor1:~# cd /apps/
 root@docker-harbor1:/apps# tar xvf harbor-offline-installer- v2.6.1.tgz
 root@docker-harbor1:/apps# cd harbor/
 root@docker-harbor1:/apps# cp harbor.yml.tmpl harbor.yml
 root@docker-harbor1:/apps/harbor# vim harbor.yml
 hostname: harbor.laimiya.com
 http:
• port: 80
 harbor_admin_password: 12345678
root@docker-harbor1:/apps/harbor# docker-compose up -d


验证web界面:

 

 


docker使用http harbor:
docker主机登录
 1.配置主机名解析
 root@docker-server1:~# vim /etc/hosts
 192.168.106.210 harbor.laimiya.com
 2.docker 服务器配置仓库信任:
 root@docker-server1:~# vim /etc/docker/daemon.json
 "insecure-registries": ["harbor.laimiya.com","harbor.magedu.net","harbor.myserver.com","172.31.7.105"],
 root@docker-server1:~# systemctl restart docker
 root@docker-server1:~# docker login harbor.laimiya.com
 Username: admin
 Password: xxxxxxxx #输入在自己的密码
 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
 3.上传镜像:
root@docker-server1:/usr/local/src/dockerfile/nginx-web1# docker images
REPOSITORY                               TAG               IMAGE ID       CREATED          SIZE
harbor.laimiya.com/laimiya/nginx-web1    20221127_120707   751fd7db2baf   10 minutes ago   470MB
harbor.laimiya.com/laimiya/nginx-base    v1.22.1           eacd1ae95ee0   20 minutes ago   466MB
system-base                              v1                23901dc6c638   30 minutes ago   441MB
harbor.laimiya.com/laimiya/ubuntu-base   22.04             23901dc6c638   30 minutes ago   441MB
nginx                                    latest            605c77e624dd   11 months ago    141MB
ubuntu                                   22.04             9d28ccdc1fc7   11 months ago    76.3MB
lorel/docker-stress-ng                   latest            1ae56ccafe55   6 years ago      8.1MB


 root@docker-server1:~# docker tag harbor.laimiya.com/laimiya/nginx-web1:20221127_120707 harbor.laimiya.com/laimiya/nginx-base:20221127_120707
 root@docker-server1:~# docker push harbor.laimiya.com/laimiya/nginx-base:20221127_120707
 4.验证镜像下载:
 配置域名解析及仓库信任
 root@docker-server2:~# docker pull harbor.laimiya.com/laimiya/nginx-base:20221127_120707
   root@docker-server2:/usr/local/src# docker run -it -p 80:80 harbor.laimiya.com/laimiya/nginx-web1:20221127_120707
浏览器:
http://192.168.106.132

harbor 部署-https:(后期k8s再配置)
    见 部署https的harbor服务器

posted @   梳碧湖砍柴少年  阅读(264)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示