docker仓库搭建、加密、用户认证

1 . 含义及理解:

  1. 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool等,可以提供大陆用户更稳定快速的访问。
  2. 当然,用户也可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
  3. 私有仓库的优势:
    有时候使用Docker Hub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用,
    使用私有仓库可以节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可。而且提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用。
    Docker官方提供的工具docker-registry可以用于构建私有的镜像仓库。

2 . 搭建私有仓库:

首先将下载好的镜像导入到仓库里

[root@docker ~]# docker images registry
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
registry            2                   f32a97de94e1        4 months ago        25.8MB

运行此容器

[root@docker ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry:2
##    创建并运行容器,设置数据卷,并做端口映射

查看容器运行运行情况以及映射端口开启情况:

[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
cee722ac6ccb        registry:2          "/entrypoint.sh /etc…"   2 minutes ago       Up 2 minutes        0.0.0.0:5000->5000/tcp   registry
[root@docker ~]# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1091/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1564/master         
tcp        0      0 192.168.13.111:22       192.168.13.250:40316    ESTABLISHED 5785/sshd: root@pts 
tcp6       0      0 :::22                   :::*                    LISTEN      1091/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1564/master         
tcp6       0      0 :::5000                 :::*                    LISTEN      8994/docker-proxy   

上传镜像到本地仓库

在上传镜像的时候,一般会默认上传到docker hub官方仓库,现在需要上传到本地自己创建的仓库,需要指定上传的地址以及端口。如果使用ip默认使用tls加密,目前没有设置,所有直接指定到本机的端口。

docker tag nginx:latest localhost:5000/nginx

上传修改过标签的镜像到本地仓库:

docker push localhost:5000/nginx   # 上传curl localhost:5000/v2/_catalog   # 核实是否上传成功

查看其数据卷挂载点

运行容器的时候,设置了数据卷,可以子阿宿主机查看上传的结果:

cd /opt/registry/
cd docker/
cd registry/
cd v2/
cd repositories/

此时创建的私有仓库远程主机无法使用,并且不够安全,此时则可以采用私有仓库加证书加密的方式来创建私有仓库

3 . 私有仓库的TLS加密

以上仓库使用明文的方式,并且没有认证。存在较大的安全隐患,下面介绍使用TLS加密以及用户认证。
为docker仓库添加证书加密功能
docker远程主机访问私有仓库,默认必须使用TLS加密

1 . 生成证书

mkdir -p certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/haha.com.key  -x509 -days 365 -out certs/haha.com.crt

2、重新启动registry容器:

docker  rm -f registry       先删除之前开启的容器

重新加密开启容器:

 docker run -d \ ##-d:打入后台 > --restart=always \ > --name registry \ 
>  -v "$(pwd)"/certs:/certs \
>   ##-v:手动指定数据卷的挂载 \
>    -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ ##-e:编辑registry的参数;监听443端口 
>     -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/haha.com.crt \ ##使用证书为生成的证书 
>     -e REGISTRY_HTTP_TLS_KEY=/certs/haha,com.key \ ##使用的私钥 
>      -p 443:443 \ ##端口映射
>       registry:2 ##仓库名

查看容器运行情况以及端口开启情况:

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
d3063593b314        registry:2          "/entrypoint.sh /etc…"   33 seconds ago      Up 31 seconds       0.0.0.0:443->443/tcp, 5000/tcp   registrynetstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      656/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      778/master          
tcp        0      0 172.25.13.160:22        172.25.13.250:59964     ESTABLISHED 20132/sshd: root@pt 
tcp6       0      0 :::22                   :::*                    LISTEN      656/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      778/master          
tcp6       0      0 :::443                  :::*                    LISTEN      21555/docker-proxy  

docker客户端的设置。

 mkdir -p /etc/docker/certs.d/toto.com   # 创建该目录,名称和证书域名一致
cd /etc/docker/certs.d/haha.com
cp /root/certs/haha.com.crt ca.crt

证书域名解析的更改

192.168.13.111  docker haha.com

验证部署是否成功

修改本地镜像标签为固定格式:域名/进行名称

docker tag nginx:v4 haha.com/nginx

上传镜像:

docker push haha.com/nginx

4 . Docker仓库添加用户认证功能

1 、创建用户密码文件:

 mkdir auth
docker run --rm --entrypoint htpasswd registry:2 \
-Bbn haha redhat > auth/htpasswd   #茶ungjian用户密码文件:用户haha密码redhat

2 由于创建密码文件已经开启了一个容器,需要先删除该容器

docker rmi registry

3 再次运行容器同时添加用户认证功能。

docker run -d \ ##-d:打入后台 
> --restart=always \ > --name registry \ 
>  -v "$(pwd)"/certs:/certs \
>   ##-v:手动指定数据卷的挂载 \
>    -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ ##-e:编辑registry的参数;监听443端口 
>     -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/toto.com.crt \ ##使用证书为生成的证书 
>     -e REGISTRY_HTTP_TLS_KEY=/certs/toto,com.key \ ##使用的私钥 
>      -p 443:443 \ ##端口映射
>      -v "$(pwd)"/auth:/auth \  ##挂载认证目录
>      -e "REGISTRY_AUTH=htpasswd" \  ##认证方式
>      -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \  
>      -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd  \  ##认证文件路径
>       registry:2 ##仓库名

4 、查看容器以及端口开启情况:

docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                            NAMES
17a21a99d6a6        registry:2          "/entrypoint.sh /etc…"   About a minute ago   Up About a minute   0.0.0.0:443->443/tcp, 5000/tcp   registrynetstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      656/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      778/master          
tcp        0      0 172.25.13.160:22        172.25.13.250:59964     ESTABLISHED 20132/sshd: root@pt 
tcp6       0      0 :::22                   :::*                    LISTEN      656/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      778/master          
tcp6       0      0 :::443                  :::*                    LISTEN      22096/docker-proxy 

到次用户认证功能设置成功
测试:

1 、再没有认证的情况下无法上传。

docker tag busybox:latest haha.com/busyboxdocker push haha.com/busybox

2 、进行认证登陆

 docker login haha.com
Username: haha
Password: 
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-storeLogin Succeeded
docker push haha.com/busybox
The push refers to repository [haha.com/busybox]
8a788232037e: Pushed 
latest: digest: sha256:915f390a8912e16d4beb8689720a17348f3f6d1a7b659697df850ab625ea29d5 size: 527

3 登陆成功后会产生认证文件

/root/.docker/config.json   #记录用户登陆信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos7+Nginx+Keepalived实现Apache服务的高可用负载均衡

Centos7NginxKeepalived实现Apache服务的高可用&负载均衡今天是2017年的第一天,昨天也就是2016年的最后一天,我尝试部署了Centos7NginxKeepalived实现WEB服务的高可用负载均衡服务,终于在2017年的第一天前完成了,所以在此分享…

客户端通过网口启动可过去的ip_西安交通大学16年3月课程考试《网络组网技术综合训练》作业考核试题...

西安交通大学16年3月课程考试《网络组网技术综合训练》作业考核试题一、单选题(共 20 道试题,共 40 分。)V 1. 下列不属于服务器内部结构的是()A. CPUB. 电源C. 5类双绞线D. 北桥芯片满分:2 分2. 网络中使用光缆的优点是()A. 便宜B. 容易安装C. 是一个工…

mcq 队列_MCQ | 软件工程基础知识/简介(1)

mcq 队列Q1. Which of the following is a part of the software? Q1。 以下哪个是软件的一部分? Programs 程式 Documentation 文献资料 Operating Procedures 运营流程 All of the above 上述所有的 Answer: d. All of the above 答案: d。 上述所有…

docker设置镜像加速器

设置镜像加速器 一般情况下,直接从官方仓库中直接拉取镜像会比较慢,可以设置镜像加速器,相当于一个反向代理。以阿里云为例 1 . 首先获取自己的加速器地址 www.aliyun.com 登陆自己的账号(可以是支付宝账号) 首页点…

keytool条目_java keytool 常用命令

最近在做ssl连接active directory, 遇到了不少的ssl的问题。连接ssl时会需要用将证书保存到keystore, 而这个步骤刚好就用到了keytool命令。直接敲keytool会有提示如何用这个命令, 但对于完全不懂的我,还是找了下基本命令&#xf…

用JavaScript中的示例进行fill()函数

fill() is a predefined function in JavaScript, which is used to fill all elements of an array with a static value. fill()是JavaScript中的预定义函数&#xff0c;用于用静态值填充数组的所有元素。 Example: 例&#xff1a; <html><head><title>J…

谈谈重载(overload)覆盖(override)与隐藏

这三个概念都是与OO中的多态有关系的。如果单是区别重载与覆盖这两个概念是比较容易的&#xff0c;但是隐藏这一概念却使问题变得有点复杂了&#xff0c;下面说说它们的区别吧。重载是指不同的函数使用相同的函数名&#xff0c;但是函数的参数个数或类型不同。调用的时候根据函…

搭建Harbor私有仓库

1 首先装好docker&#xff1a; 由于之前已安装过&#xff0c;所以直接开起就行 2 . 安装python2.7以上版本 之前编译安装过7.3的&#xff0c;直接用吧 3 . 安装docker-compose docker容器管理工具&#xff0c;是habor的依赖之一。 curl -L "https://github.com/docker…

mysql日志查询指令_MySQL查询日志总结

MySQL查询日志介绍MySQL的查询日志记录了所有MySQL数据库请求的信息。无论这些请求是否得到了正确的执行。默认文件名为hostname.log。默认情况下MySQL查询日志是关闭的。生产环境&#xff0c;如果开启MySQL查询日志&#xff0c;对性能还是有蛮大的影响的。另外很多时候&#x…

thinkphp5.0助手函数占用服务器资源

db(user) 默认情况下&#xff0c;每次请求都会重新连接数据库&#xff0c;这样会占用服务器资源 方法1.如果不想每次都重连可以这样 db("List",[],false) 方法2.还可以直接改function&#xff0c;及则需要把 function db($name , $config [], $force true){retu…

python 无符号整数_Python中的有符号和无符号整数数组

python 无符号整数An array can be declared by using "array" module in Python. 可以通过在Python中使用“数组”模块来声明数组 。 Syntax to import "array" module: 导入“数组”模块的语法&#xff1a; import array as array_alias_nameHere, imp…

mysql快速批量入库_MySQL-批量入库优化

MySQL批量入库的方式循环一条一条入库批量入库通过程序组合 insert into (字段) tbl vlaues(), vlaues(), vlaues(),...事务入库$autoCommit (isset($this->startTransaction) ? !$this->startTransaction : true);$ids array();if ($autoCommit) {$this->startTra…

docker集群搭建(k8s)

1 . 理解&#xff1a; Kubernetes是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;Kubernetes的目标是让部署容器化的应用简单并且高效&#xff08;powerful&#xff09;,Kubernetes提供了应用部署&#xff0c;规划&#xff0c;更新&#xff0c…

Python模拟删除字符串两边的空白

目标&#xff1a;   1.使用string模块的whitespace   2.删除左边、右边以及两边的空白 代码如下&#xff1a; [rootlocalhost python]# cat rmspace.py #!/usr/bin/env python #coding:utf8 """ 使用字符串删除左右两端的空白。 """from str…

xml分析错误:注释未终止_错误:C中的未终止注释(无效的注释块) 常见的C程序错误...

xml分析错误:注释未终止Comments are used to write logic explain or anything that you do not want to compile. In C language there are two types of comments 1) Single line comment and 2) Multi-line comment. 注释用于编写逻辑解释或您不想编译的任何内容。 在C语言…

查看 mysql 状态_查看mysql状态的常用命令

在mysql客户端输入"show status"之后将会看到如下输出&#xff1a;如果想要查看某个具体的值&#xff0c;可以使用如下命令&#xff1a;show status LIKE "%具体变量%";Aborted_clients 由于客户没有正确关闭连接已经死掉&#xff0c;已经放弃的连接数量.A…

常用数学符号的读法及其含义

2019独角兽企业重金招聘Python工程师标准>>> 常用数学符号的读法及其含义 近来发现很多学生对一些数学符号的读法及其含义不是很清楚。今天特把一些常用的列表如下。希望能够提供一些帮助&#xff01; 大写 小写 英文注音 国际音标注音 中文注音 Α…

math.atan_JavaScript中带有示例的Math.atan()方法

math.atanJavaScript | Math.atan()方法 (JavaScript | Math.atan() Method) Math.atan() is a function in math library of JavaScript that is used to find the value of arctangent of a number. Math.atan()是JavaScript数学库中的函数&#xff0c;用于查找数字的反正切值…

mysql 计算工作日_mysql计算工作日_MySQL

bitsCN.commysql计算工作日Sql代码 DELIMITER $$ drop procedure if exists pGetWorkDays$$ create procedure pGetWorkDays(s datetime,e datetime) begin select floor(days/7)*5days%7 -case when 6 between wd and wddays%7-1 then 1 else 0 end -case when 7 between wd a…

后端码农谈前端(HTML篇)第三课:常见属性

一、HTML全局属性 1、核心属性 属性描述id设置元素的唯一 id。class设置元素的一个或多个类名&#xff08;引用样式表中的类&#xff09;。style设置元素的行内样式&#xff08;CSS内联样式&#xff09;。title设置有关元素的额外信息&#xff08;可在工具提示中显示&#xff0…