k8s的学习3–docker镜像制作–私有创库registry

发布于 2021-03-05  1152 次阅读


一、基于容器的镜像制作

为什么需要使用sshd -D呢?

首先呢!安装的容器centos是很精简的,没有什么chkconfig sshd on了,所以需要手动启动
1、启动之后,进去手动启动
2、启动的时候,指定-d,放到后台执行,然后执行启动之后,执行命令 sshd -D (-D会直接挂在哪里不会退出)

二、Dockerfile制作

详细介绍:

docker run -e 传入变量的时候不生效,可以试试这个

关于VOLUME的详细介绍

详细介绍:docker -v 和Dockerfile 中VOLUME 区别

Dockerfile中的VOLUME指令实际使用中是不是就是跟docker run中的-v参数一样是将宿主机的一个目录绑定到容器中的目录以达到共享目录的作用呢?

VOLUME指令:只是起到了声明了容器中的目录作为匿名卷,但是并没有将匿名卷绑定到宿主机指定目录的功能
但是,如果run的时候没有指定-v绑定宿主机的文件是,会在/var/lib/docker/volumes,创建一个随机匿名卷

例子:

Dockerfile

FROM centos:latest
RUN groupadd -r redis && useradd  -r -g redis redis
RUN yum -y update &&  yum -y install epel-release && yum -y install redis && yum -y install net-tools
RUN mkdir -p /config && chown -R redis:redis /config
VOLUME /share/data      #声明容器中/share/data为匿名卷
EXPOSE 6379

docker启动:

# docker build -t image-redis    //构建镜像image-redis
......
#docker run -d -it -name redis1 -v /data:/share/data image-redis    //运行一个容器并且将当前机器的/data目录绑定到容器的匿名卷中
.....
#docker run -d -it  -name redis2 image-redis   //运行一个容器但是不绑定目录到容器的匿名卷,这时候再/var/lib/docker/volumes(不同版本目录不一样)中就会创建一个目录绑定匿名卷

 

三、搭建私有创库Registry

9.1 启动registry

docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry  registry

9.2 修改配置文件

{
  "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"],
   "insecure-registries": ["10.0.0.100:5000"]
}

[root@docker docker]# systemctl  restart docker

9.3 制作本地镜像并push到

[root@docker ~]# docker tag nginx 10.0.0.100:5000/oldguo/nginx:v1
[root@docker ~]# docker images
[root@docker ~]# docker push 10.0.0.100:5000/oldguo/nginx:v1

查看私有仓库里的镜像(一定要保证下面能查看到仓库里有镜像!如果仓库里没有镜像,那么客户端机器就无法从该私有仓库下载镜像了) [root@izwz9ad1jbc6fvd5qlmo2lz]# curl -XGET http://47.107.154.32:5000/v2/_catalog //即该私有仓库里有mysql镜像 {"repositories":["mysql"]} [root@izwz9ad1jbc6fvd5qlmo2lz]# curl -XGET http://47.107.154.32:5000/v2/mysql/tags/list {"name":"mysql","tags":["latest"]} 或者 浏览器里访问(103.110.186.23是注册机的外网ip,iptables防火墙内开放5000端口访问): http://47.107.154.32:5000/v2/_catalog http://47.107.154.32:5000/v2/mysql/tags/list

9.4 异地进行pull镜像

[root@docker ~]# docker pull  10.0.0.100:5000/oldguo/nginx:v1

9.5 本地仓库加安全认证

生成密码:
yum install httpd-tools -y
mkdir /opt/registry-auth/ -p
htpasswd  -Bbn oldguo 123 > /opt/registry-auth/htpasswd

9.6 重新启动带有秘钥功能的registry容器

docker rm -f `docker ps -aq`
docker run -d -p 5000:5000 -v /opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry  --name register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry 

9.7 push镜像,需要进行login

[root@oldboy ~]# docker login 10.0.0.100:5000
Username: oldguo  
Password: 

10. 重启docker服务,容器全部退出的解决办法

方法一:docker run --restart=always

方法二:"live-restore": true
docker server配置文件/etc/docker/daemon.json参考
{
.....
......
"live-restore": true
}

11. habor实现图形化register

第一步:安装docker和docker-compose
yum install -y docker-compose 
第二步:下载harbor-offline-installer-vxxx.tgz
官方地址:https://github.com/goharbor/harbor/releases
比如:
https://github.com/goharbor/harbor/releases/download/v2.2.0/harbor-offline-installer-v2.2.0.tgz
第三步:上传到/opt,并解压
第四步:修改harbor.cfg配置文件
hostname = 10.0.0.11
harbor_admin_password = 123456
第五步:执行install.sh

其他功能,比如:https等:https://www.cnblogs.com/leozhanggg/p/12554399.html