K8S 快速入门(十)实战篇:搭建Registry&Harbor私有仓库、Dockerfile
这篇博文写的是两种不同的搭建Docker私有仓库的方法,都必须要基于一个Docker服务器上,相比较而言,Harbor功能更强大些。一、搭建Registry私有仓库之前详细写过Registry私有仓库的搭建方法,这里的Registry只是有一点配置不一样而已,若要搭建Registry私有仓库,最好结合:Docker镜像的创建+构建私有仓库及其使用方法这篇博文来,对比其不一样的地方,选择适合自己的方
这篇博文写的是两种不同的搭建Docker私有仓库的方法,都必须要基于一个Docker服务器上,相比较而言,Harbor功能更强大些。
一、搭建Registry私有仓库
之前详细写过Registry私有仓库的搭建方法,这里的Registry只是有一点配置不一样而已,若要搭建Registry私有仓库,最好结合:Docker镜像的创建+构建私有仓库及其使用方法这篇博文来,对比其不一样的地方,选择适合自己的方案。
环境准备:
- 两台centos 7.3,一台为Docker私有仓库服务器,另一台为测试端,两台须可ping通;
- 参考博文:Docker的安装详细配置,对两台服务器进行安装docker环境。
1. 第一台服务
开始配置第一台Docker私有仓库服务器:
[root@docker ~]# docker pull registry #下载registry镜像
[root@docker ~]# docker run -tid --name registry --restart=always -p 5000:5000 -v /data/registry:/var/lib/registry registry
#运行该镜像,各个选项含义如下:
# -tid:以后台持久运行,并分配一个可交互的为终端
# --name registry :给容器定义一个名字
# --restart=always:该容器可以随着docker服务的启动而启动
# -p:将容器的端口映射到宿主机,冒号前面是宿主机的端口,冒号后面是容器的端口,registry的默认端口是5000
# -v:将宿主机的目录挂载到容器中,冒号前面是宿主机的目录,冒号后面是容器中的目录
[root@docker ~]# docker images #查看当前的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0f3e07c0138f 2 weeks ago 220MB
registry latest f32a97de94e1 7 months ago 25.8MB
[root@docker ~]# docker tag centos:latest 192.168.20.7:5000/centos:latest
#更改镜像名称,以便符合私有仓库名称规范
#注:私有仓库镜像的命名规则:192.168.20.7:5000/XXX(宿主机的IP:5000端口/镜像名称)
[root@docker ~]# vim /usr/lib/systemd/system/docker.service #更改docker的配置文件,以便指定私有仓库
ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 192.168.20.7:5000
#定位到上面那行,在后面添加“--insecure-registry”并指定私有仓库的IP及端口,然后保存退出即可
[root@docker ~]# systemctl daemon-reload #重载配置文件
[root@docker ~]# systemctl restart docker #重启docker服务
[root@docker ~]# docker push 192.168.20.7:5000/centos:latest #上传镜像至私有仓库
[root@docker ~]# curl 192.168.20.7:5000/v2/_catalog #查看私有仓库中的镜像
{"repositories":["centos"]}
[root@docker ~]# curl 192.168.20.7:5000/v2/centos/tags/list #查看镜像的详细信息
{"name":"centos","tags":["latest"]}
2. 第二台服务
第二台Docker服务器进行如下操作:
[root@docker02 ~]# vim /usr/lib/systemd/system/docker.service #编辑主配置文件
ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 192.168.20.7:5000
#定位到上面那行,添加“--insecure-registry”指定私有仓库的IP及参数
#添加完成后,保存退出即可
[root@docker02 ~]# systemctl daemon-reload #重载配置文件
[root@docker02 ~]# systemctl restart docker #重启docker服务
[root@docker02 ~]# docker pull 192.168.20.7:5000/centos:latest
#下载私有仓库的中的镜像
[root@docker02 ~]# docker images #确认下载的镜像
以上修改的是systemd的配置文件,也可以直接修改docker的配置文件daemon.json,添加以下内容
{“insecure‐registries”:[“192.168.20.7:5000”]}
二、配置Harbor私有仓库
Harbor私有仓库和第一个Registry私有仓库相比较而言,功能强大很多,并且支持web图形化管理,推荐使用。(并且支持细粒度的用户权限授权认证)
环境和搭建Registry的一样,如下:
- 两台centos 7.3,一台为Docker私有仓库服务器,另一台为测试端,两台须可ping通;
- 参考博文:Docker的安装详细配置,对两台服务器进行安装docker环境。
1. 安装Docker
复制一个新虚拟机:
和第八篇构建的k8s集群在一个网络:
systemctl restart netword
先安装docker,因为docker compose依赖docker镜像,没有docker镜像,compose不起作用
# 安装docker
# yum-util 提供yum-config-manager功能,其他两个是Docker存储驱动devicemapper依赖的
# Device Mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,
# 在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略
# Docker的devicemapper存储驱动程序利用此框架的精简配置和快照功能进行镜像和容器管理
yum install -y yum-utils device-mapper-persistent-data lvm2
#设置yum源为阿里云,仓库配置会保存到/etc/yum.repos.d/docker-ce.repo文件中
yum-config-manager --add-repo http://mirrors.aliyun.com/docker‐ce/linux/centos/docker‐ce.repo
#更新Yum安装的相关Docke软件包&安装Docker CE(社区版)docker-ee(企业版)
yum update -y && yum install docker-ce
repo文件存放在/etc/yum.repos.d/目录下,这个目录下是linux存放镜像地址专有的地方
只要通过yum指令安装软件,所有软件都会从这个目录下找repo镜像地址、解析repo文件
repo文件是yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用!
2. 安装Docker Compose
打开github.com官网,在登录页面的右上角搜索compose找到docker/compose再找releases,(网址:https://github.com/docker/compose/releases) 如下:
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
复制自己所需版本下提供的两条命令,在第一台Docker服务器上依次进行操作:
#在线下载docker-compose ,harbor需要借助docker-compose安装
#安装依赖包
yum -y install yum-utils device-mapper-persistent-data lvm2
#复制官网上的上述命令
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#赋予该命令执行权限
chmod u+x /usr/local/bin/docker-compose
#查看其版本信息
docker-compose -version
docker-compose version 1.24.1, build 4667896b
我这里采用的是离线安装
#################################推荐离线安装#######################################
#离线安装
#把安装包下载到本地后,通过rz命令上传本地文件
rz
#把本地文件拷贝到/usr/local/bin目录下
mv docker-compose /usr/local/bin/
#授权:可以执行
chmod 755 /usr/local/bin/docker-compose
#查询docker版本
docker-compose -version
3. 安装harbor
3.1 下载
github官网搜索harbor,再点击goharbor/harbor,再点击“releases”,根据自己所需,下载相应的版本,上传至服务器(网址如下:https://github.com/goharbor/harbor/releases 也可下载在线安装的包,没试过,可自行尝试),如下:
3.2 设置host
这里我们最终希望通过域名访问harbor,所以先设置一下host:
#追加harbor的ip:hostname到每一台机器节点
echo "192.168.66.13 hub.kaikeba.com" >> /etc/hosts
#查询harbor服务节点 /etc/hosts
192.168.66.10 k8s-master01
192.168.66.11 k8s-node01
192.168.66.12 k8s-node02
192.168.66.13 hub.kaikeba.com
#windows系统中 hosts中去填写 ip:hosts,后期使用域名访问
192.168.66.13 hub.kaikeba.com
harbor要安装的主机,修改主机名:
3.3 修改harbor配置文件
#上传本地下载好的安装包
rz
#将下载的安装包解压到指定目录
tar zxf harbor-offline-installer-v1.7.4.tgz -C /usr/local/src
#切换至解压后的目录中
cd /usr/local/src/harbor/
#编辑这个配置文件
vim harbor.cfg
..............#省略部分内容
#将hostname更改为本机IP
#[此处可以写域名:hostname = hub.kaikeba.com]
hostname = hub.kaikeba.com
#设置https协议
ui_url_protocol = https
#这行指定的是登录harbor的登录名及密码
#默认用户为“admin”,密码为“Harbor12345”
harbor_admin_password = Harbor12345
..............#省略部分内容
#自定义证书开启
customize_crt = on
..............#省略部分内容
3.4 创建伪证书
#创建证书存储目录:ssl_cert = /data/cert/server.crt 配置文件中有说明
mkdir -p /data/cert/
#创建证书(伪证书,真正的证书需要通过供应商购买)
#进入创建的存储证书的目录
cd !$
#首先生成证书私钥
openssl genrsa -des3 -out server.key 2048
自己输一个key即可。
#证书的服务
openssl req -new -key server.key -out server.csr
#备份私钥
cp server.key server.key.org
#转换为证书
openssl rsa -in server.key.org -out server.key
#给证书签名
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
#给所有的证书授权
chmod 755 *
3.5 执行安装
#执行自带的安装脚本
./install.sh
安装成功:
3.6 配置docker/daemon.json
为需要连接上harbor的每台机器指定私有仓库的地址
# 编辑docker主配置文件daemon.json加入,注意逗号的问题否则无法连接harbor
"insecure-registries": ["https://hub.kaikeba.com"]
# 配置上阿里云镜像
{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"registry-mirrors":["https://pee6w651.mirror.aliyuncs.com"],"insecure-registries": ["https://hub.kaikeba.com"]}
registry-mirrors:这里配了一个阿里云的镜像加速器地址
添加完以后重启
systemctl daemon-reload
systemctl restart docker
同时当前harbor所在主机也需要配置一下
复制好以后重启
#确定80端口正在监听
netstat -antp | grep 80
#重新加载配置文件
systemctl daemon-reload
#重启docker服务
systemctl restart docker
#停止所有容器
docker-compose stop
#启动所有容器
docker-compose start
访问成功:
如果访问失败可以尝试重启compose 和 docker
docker compose stop
docker compose start
systemctl restart docker如果还是不行肯定是创建证书环节有问题,重新仔细在走一遍
4. 使用harbor
4.1 登录
使用浏览器访问harbor服务器的IP地址,使用配置文件中指定的用户名及密码登录(默认用户为“admin”,密码为“Harbor12345”)
注意:登录时,证书认证时候,选择高级,略过即可
4.2 新建项目
点击“新建项目”
4.3 项目名称
定义项目名称:
4.4 上传下载镜像
和Registry仓库类似:
- 1. 首先镜像要标记一个版本,名字必须符合hub.kaikeba.com/java12/镜像名称
即服务器地址/项目名/镜像名
- 2. 执行docker push hub.kaikeba.com/java12/镜像名称
回到Harbor服务器,开始向Harbor上传镜像
#命令行登录到harbor
#docker login -u admin -p Harbor12345 192.168.20.7:80
#域名登录
docker login https://hub.kaikeba.com
#更改镜像名称
docker tag centos:latest hub.kaikeba.com/java12/centos:latest
#注意要上传至harbor仓库的命名规范,其中test是刚才在harbor创建的项目
#上传至harbor,将会根据域名到指定仓库进行上传
docker push hub.kaikeba.com/java12/centos:latest
#下载镜像,将会根据域名到指定仓库进行下载
docker pull hub.kaikeba.com/java12/centos:latest
以此类推推送3个镜像
本地删除这些上传过的镜像:
docker rmi -f
本地已经没有了,执行命令:
将节点2上的nginx镜像也上传到私服:
k8s使用yaml文件方式部署私服上的nginx镜像:
测完删除
三、Docker
1. Dockerfile
1.1 什么是Dockerfile
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个 新的镜像。
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新
的镜像开始工作了;
3、对于运维人员:在部署时,可以实现应用的无缝移植。
1.2 常用命令
命令 | 作用 |
---|---|
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key value | 设置环境变量 (可以写多条) |
RUN command | 是Dockerfile的核心部分(可以写多条) |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件, 将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录 |
EXPOSE port1 prot2 | 用来指定端口,使容器内的应用可以通过端口和外界交 互 |
CMD argument | 在构建容器时使用,会被docker run 后的argument覆 盖 |
ENTRYPOINT argument | 和CMD相似,但是并不会被docker run指定的参数覆盖 |
VOLUME | 将本地文件夹或者其他容器的文件挂载到容器中 |
2. 使用脚本创建镜像
2.1 创建JDK1.8镜像
步骤:
(1) 创建目录
#在本地Linux机器创建一个工作目录
mkdir –p /usr/local/dockerjdk8
(2) 下载jdk-8u65-linux-x64.tar.gz并上传到服务器(虚拟机)中的/usr/local/dockerjdk8目录
先下载一个基础镜像
改成v1
(3) 创建文件Dockerfile
名字最好就是Dockerfile,这样可以自动识别,其他名字需要指定
#依赖镜像名称和ID
FROM centos:latest
#指定镜像创建者信息
MAINTAINER Hulk
#切换工作目录
WORKDIR /javaee
ADD jdk-8u65-linux-x64.tar.gz /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_65
ENV PATH $JAVA_HOME/bin:$PATH
(4) 执行命令构建镜像
# 构建镜像 -t -tag 指定镜像的名称版本
docker build ‐t='jdk1.8' .
#命令变形
docker build -t jdk1.8 .
#命令变形
docker build -t jdk1.8:v1 .
#指定dockerfile,-f:如果名字不是Dockerfile,需要特别指定
docker build -f java/dockerfile -t eureka:v1 .
注意命令最后的空格和点,不要省略
(5) 查看镜像是否建立完成
docker images
(6) 创建容器
docker run ‐it ‐‐name=myjdk8 jdk1.8 /bin/bash
上传到远程仓库:
2.2 生产环境如何用镜像
一般我们的项目会打成jar包,然后通过Dockerfile构建成镜像:
app.jar是Eureka的jar包
新建一个Dockerfile-app
启动:
更多推荐
所有评论(0)