一.容器和单机容器编排入门与实战 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简介:
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服务器
本文来自博客园,作者:梳碧湖砍柴少年,转载请注明原文链接:https://www.cnblogs.com/pang-lu/p/16928683.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」