官方文档:CentOS中安装Docker的官方说明文档
卸载旧版:先在要安装Harobr私有镜像仓库的虚拟机中执行以下命令卸载旧版的docker。
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine安装工具:安装docker之前,需要先安装yum-utils工具,并设置仓库,在要安装Harobr私有镜像仓库的虚拟机中执行以下命令以安装yum-utils及设置仓库。
sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo安装docker:在要安装Harbor私有镜像仓库的虚拟机中执行以下命令以安装docker。
# 这里安装的是docker的最新版本(最新版本是19.03.12) sudo yum install docker-ce docker-ce-cli containerd.io # 或者使用以下命令安装指定版本的docker sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io查看版本:在要安装Harbor私有镜像仓库的虚拟机中执行以下命令即可查看安装的docker的版本。
docker -v设置开机启动:在要安装Harbor私有镜像仓库的虚拟机中执行以下命令设置docker开机自动启动,并且立即启动docker。
# 设置开机启动docker systemctl enable docker # 启动docker sudo systemctl start docker官方文档:安装docker-compose的官方说明文档
下载软件:docker-compose软件是一个可执行的二进制文件,在要安装Harbor私有镜像仓库的虚拟机中执行以下命令即可从官网中下载docker-compose软件,下载速度很比较慢,如果失败,则需要多试几次。
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose设置权限:docker-compose可执行文件默认下载到了/usr/local/bin目录下,但是并不具有可执行的权限,所以要设置可执行的权限。在要安装Harbor私有镜像仓库的虚拟机中执行以下命令即可设置可执行权限。
sudo chmod +x /usr/local/bin/docker-compose查看版本:给docker-compose可执行文件设置了可执行权限之后,即可执行以下命令以查看安装的docker-compose的版本。
docker-compose --version官方文档:Harbor的GitHub官方仓库、Harbor的官方下载地址、Harbor的官方安装文档
下载软件:从Harbor的官方下载地址下载harobr的1.8.0版本的离线安装版本,下载后的文件名称为 harbor-offline-installer-v1.8.0.tgz,下载好了之后,将该文件放到要安装Harbor私有镜像仓库的虚拟机的/data目录中。
解压文件:先在要安装Harbor私有镜像仓库的虚拟机中执行以下命令解压Harbor的安装包,解压后会在当前目录中生成一个名称为harbor的目录,解压后的目录结构如下图所示。
tar -zxvf harbor-offline-installer-v1.8.0.tgz修改配置:解压生成的目录下名称为 harbor.yml 的文件即是 harbor 的配置文件,install.sh文件即为harbor的安装文件,docker-compose.yml文件即是harbor启动和停止的文件。在安装harbor之前,需要先修改 harbor.yml 配置文件中的配置,主要是设置Harobr 镜像仓库的域名、admin账号的登录密码、存储目录等。本文中设置的域名为 registry.k8s.com。
安装Harbor:harbor的配置文件修改并保存之后,即可执行以下命令以安装Harbor,命令执行结果如下图所示,当harbor安装成功之后,会出现下图底部的提示信息。
./prepare ./install.sh
查看harbor服务:harbor安装成功之后,默认会自动启动harbor服务,通过执行以下命令即可查看harbor服务的启动状态,如果所有的服务的状态都是UP,则表示harbor启动成功。
docker ps访问harbor管理页面:harobr启动成功了之后,就可以在宿主机的浏览器中访问 harbor 的管理页面了,访问之前需要先在宿主机的 hosts 域名映射文件中添加以下域名映射,添加并保存了之后,就可以在宿主机的浏览器中访问 http://registry.k8s.com ,首先会出现Harobr的登录页面,需要使用在 harbor.yml中配置的登录名(admin)和密码(Harbor12345)进行登录。
# windows中hosts文件的路径为 C:\Windows\System32\drivers\etc 192.168.1.18 registry.k8s.com
重启docker:修改了docker配置文件之后,需要重启 docker服务才能应用修改后的配置,执行以下命令即可重启docker服务。
systemctl restart docker配置域名映射:由于本文的K8S集群中没有DNS域名映射服务器,所以本文的K8S集群中的节点无法解析域名 registry.k8s.com,所以需要在K8S集群的所有节点的域名映射文件中添加以下域名映射(本文中的Harbor私有镜像仓库所在的虚拟机的ip地址为 192.168.1.18),该域名映射文件为 /etc/hosts,添加后的效果如下图所示。
192.168.1.18 registry.k8s.com项目说明:在Harbor的管理页面中可以看到,Harbor的项目是分为私有和公共的两种类型,而公共类型的项目是无法被K8S集群使用,所以需要先在Harbor的管理页面中创建一个私有的项目,以被本文中的K8S集群使用。
创建私有项目:在Harbor管理页面中的 “项目” 页面中点击 “创建项目” 按钮,然后创建一个名称为 “k8s” 的私有镜像仓库,创建成功之后,进入名称为 “k8s” 的项目,可以看到创建的是一个空的镜像仓库,结果如下图所示。
推送本地镜像:在Docker客户端中要把本地的名称为 busybox:latest 的镜像推送到Harbor私有镜像仓库的名称中 k8s 的项目中,需要先在Docker客户端本地给镜像打标签,然后再把打好标签的镜像推送到Harbor私有镜像仓库中,执行命令和结果如下所示:
# 打标签 docker tag busybox:latest registry.k8s.com/k8s/busybox:latest # 推送镜像 docker push registry.k8s.com/k8s/busybox:latest查看Harbor仓库:镜像推送完成之后,即可在Harbor的管理页面中查看镜像仓库,结果如下图所示。
拉取镜像:在Docker客户端中要把Harbor私有镜像仓库中名称为 k8s 项目中的名称为 busybox:latest 的镜像拉取到本地,需要执行以下命令,执行命令和结果如下所示:
# 拉取镜像 docker pull registry.k8s.com/k8s/busybox:latest创建yml文件:在K8S集群的master节点的某个目录中创建一个名称为 test-harbor.yml 的文件,该文件中使用了在3.2节中上传到Harbor私有镜像仓库中的registry.k8s.com/k8s/busybox:latest镜像来创建一个名称为 test-harbor-pod 的Pod,但是在该文件中并没有添加K8S集群到Harbor私有镜像仓库中拉取该镜像的账号和密码等登录信息,内容如下。
apiVersion: v1 kind: Pod metadata: name: test-harbor-pod spec: containers: - name: busybox image: registry.k8s.com/k8s/busybox:latest command: [ "/bin/sh", "-c", "echo hello world" ] restartPolicy: Never部署yml:在K8S集群的master节点中执行以下命令以使用上面的yml文件来创建Pod。
kubectl apply -f test-harbor.yml查看部署情况:在K8S集群的master节点中执行以下命令以查看部署情况,结果如下图所示,可见K8S集群拉取镜像失败了,所以创建的名称为test-harbor-pod的Pod的状态为ImagePullBackOff。
kubectl get pods查看运行日志:在K8S集群的master节点中执行以下命令以查看该Pod的运行日志如下,从运行日志中可以查看K8S集群拉取镜像失败的原因。
kubectl logs -f test-harbor-pod创建secret:K8S集群需要通过 docker-registry 类型的 secret 来设置拉取镜像的用户名和密码等登录信息,本文件中部署的Harbor私有镜像仓库的域名为 registry.k8s.com,登录名为 admin, 登录密码为 Harbor12345,在K8S集群的master节点中执行以下命令以使用上述登录信息创建一个名称为k8s-auth的secret,执行结果如下图所示。
kubectl create secret docker-registry k8s-auth \ --docker-server=registry.k8s.com \ --docker-username=admin \ --docker-password=Harbor12345创建yml文件:在K8S集群的master节点的某个目录中创建一个名称为 test-harbor-2.yml 的文件,该文件中使用了在3.2节中上传到Harbor私有镜像仓库中的registry.k8s.com/k8s/busybox:latest镜像来创建一个名称为 test-harbor-pod-2 的Pod,但是在该文件中指定了K8S集群使用上述创建的名称为k8s-auth的secret登录信息到Harbor私有镜像仓库中拉取该镜像,内容如下。
apiVersion: v1 kind: Pod metadata: name: test-harbor-pod-2 spec: containers: - name: busybox image: registry.k8s.com/k8s/busybox:latest command: [ "/bin/sh", "-c", "echo hello world" ] imagePullSecrets: - name: k8s-auth restartPolicy: Never部署yml:在K8S集群的master节点中执行以下命令以使用上面的yml文件来创建Pod。
kubectl apply -f test-harbor-2.yml查看部署情况:在K8S集群的master节点中执行以下命令以查看部署情况,结果如下图所示,可见K8S集群创建的名称为test-harbor-pod-2的Pod成功创建成功了,且已经运行结束了。
kubectl get pods查看运行日志:在K8S集群的master节点中执行以下命令以查看该Pod的运行日志如下,从运行日志中可以看出该Pod在运行时成功的打印出了 hello world 这一句话。
kubectl logs -f test-harbor-pod-2