Docker学习笔记之搭建Docker私有仓库
Docker仓库服务器名为Docker注册(registry)服务器。可以使用docker push命令将镜像上传到注册服务器,也可以使用docker pull命令下载服务器的镜像。
Docker注册服务器中有多种存储镜像数据的方法,可以存储到执行Docker注册的服务器,也可以存储到阿里云提供的容器镜像服务上面(推荐,简单易用)。
1. 创建注册服务器容器
Docker注册服务器其实也是Docker Hub提供的Docker镜像。首先需要下载Docker注册服务器:
sudo docker pull registry:latest
然后以容器运行registry:latest镜像
sudo docker run -d -p 5000:5000 --name docker-registry -v /tmp/registry:/tmp/registry registry
运行后,镜像文件存储到主机的/tmp/registry目录。参数说明:-d --detach 允许容器在后台运行;-p 设置主机与容器的通信端口;--name 设置容器的名称为docker-registry;-v --volume 设置主机与容器共享的目录(Bind mount a volume)。
2. 使用push命令上传镜像到私有服务器
前面第一步我已经运行注册服务器的容器了,所以在此可以使用push命令把镜像上传到私有仓库。首先需要为需要上传的镜像创建标签(格式:docker tag <镜像名称>:<标签> <Docker registry URL>/<镜像名称>:<标签>),然后push到私有注册服务器(格式:docker push <Docker registry URL>/<镜像名称>:<标签>)。
sudo docker tag nginx:0.1 localhost:5000/nginx:0.1
sudo docker push localhost:5000/nginx:0.1
镜像上传到私有注册服务器后,可以从其它服务器连接私有注册服务器下载镜像,我这里测试只有本地一台主机,主机ip地址为192.168.123.232,所以执行以下命令下载刚刚上传的镜像
sudo docker pull 192.168.123.232:5000/nginx:0.1
关于docker pull报错:Error response from daemon: Get https://192.168.123.232:5000/v2/: http: server gave HTTP response to HTTPS client ,原因是服务器采用http通信协议,而客户端采用了https通信协议,解决方法可以参考这篇文章解决:https://blog.csdn.net/u013042928/article/details/81227536
执行docker rmi命令可以删除刚刚下载的镜像
sudo docker rmi 192.168.123.232:5000/nginx:0.1
3. 使用默认认证
- 首先编辑hosts文件,添加私有的注册服务器的映射关系。
我这里的注册服务器的ip地址为192.168.123.232,域名设置为registry.example.com,所以hosts文件添加一行192.168.123.232 registry.example.com,如下图所示:
- 接下来创建SSL自签名证书。
创建私有密钥文件:
openssl genrsa -out server.key 2048
创建证书签名申请文件:
openssl req -new -key server.key -out server.csr
注意:下面的Common Name (e.g. server FQDN or YOUR name) [] 要填上注册服务器的域名,即registry.example.com,其它选项信息根据自身情况填写
创建服务器认证文件
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
- 把证书文件server.crt安装到系统(我这里是Ubuntu1804系统)
sudo cp server.crt /usr/share/ca-certificates/
echo "server.crt" | sudo tee -a /etc/ca-certificates.conf
sudo update-ca-certificates
- 重启docker服务(只有重启服务,所添加的域名与安装的证书才能生效)
systemctl restart docker
- 创建.htpasswd文件(用于存储用户账号与密码)
Ubuntu系统需要先安装apache2-utils,CentOS需要安装httpd-tools,我这里是Ubuntu系统,所以执行命令:
sudo apt install -y apache2-utils
然后使用htpasswd命令创建.htpasswd文件,添加名为lollipop的用户,并设置密码。命令选项 -c 是创建(create)一个新的文件。
htpasswd -c .htpasswd lollipop
- 编辑nginx.conf配置文件,配置nginx的参数
文件名nginx.conf,存放在用户目录下,文件内容如下:
worker_processes 1;
events{
worker_connections 1024;
}
http{
server{
listen 443;
server_name registry.example.com ssl on;
ssl_certificate /etc/server.crt;
ssl_certificate_key /etc/server.key; proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Authorization ""; client_max_body_size 0; chunked_transfer_encoding on; location / {
proxy_pass http://docker-registry:5000;
proxy_set_header Host $host;
proxy_read_timeout 900; auth_basic "Restricted";
auth_basic_user_file .htpasswd;
}
}
}
server_name:设置Docker注册服务器的域名,我这里为registry.example.com;
ssl_certificate、ssl_certificate_key:设置证书签名和密钥的位置;
proxy_pass:设置逆向代理,设置为Docker注册容器与端口docker-registry:5000;
auth_basic:设置认证,这里设置为Restricted,默认认证方式;
auth_basic_user_file:设置用于存储用户登录认证信息的.htpasswd文件。
- 启动registry容器和nginx容器(registry镜像和nginx镜像的版本可以通过docker pull命令下载到本地)
sudo docker run -d --name docker-registry -v /tmp/registry:/tmp/registry registry:0.8.1 sudo docker run -d --name nginx-registry -v ~/nginx.conf:/etc/nginx/nginx.conf -v ~/.htpasswd:/etc/nginx/.htpasswd -v ~/server.key:/etc/server.key -v ~/server.crt:/etc/server.crt --link docker-registry:docker-registry -p 443:443 nginx:1.7.5
--link docker-registry:docker-registry选项通过docker-registry别名连接前面创建的docker-registry容器,这样就可以使用nginx.conf的proxy_pass设置,向Docker注册发送traffic
最后,就可以通过docker login https://registry.example.com尝试登录认证了。
sudo docker login https://registry.example.com
输入之前填写的用户名和密码。出现问题(未解决):
修改/etc/docker/darmon.json文件,根据上面未添加认证之前的时候pull命令推送镜像也提示这个错误,然后就在"insecure-registries"下再添加"registry.example.com:443",未成功,然后又查了资料,试了其他博客的方法半天仍然未解决,先记录下来吧。
Docker学习笔记之搭建Docker私有仓库的更多相关文章
- Docker学习笔记之搭建Docker运行环境
0x00 概述 既然 Docker 是一款实用软件,我们就不得不先从它的安装说起,只有让 Docker 运行在我们的计算机上,才能更方便我们对 Docker 相关知识和使用方式的学习.得益于与商业性的 ...
- Docker学习笔记六:Docker搭建企业级私有仓库
前言 Docker不仅是一个强大的服务器部署工具,而且它还有一个官方的Docker Hub registry用于储存Docker镜像.上传镜像到Docker Hub是免费的,上传的镜像文件同时也对公共 ...
- Docker学习笔记之搭建 Java Web 项目运行环境
0x00 概述 Java Web 泛指以 Java 程序为基础向外提供 Web 服务的技术及相关工具,狭义上来说,我们也可以说 Java Web 是由 Servlet 程序提供的 Web 服务. 对我 ...
- docker学习笔记-01:docker基本原理
一.docker原理 1.什么是docker:解决了运行环境和配置问题的容器,方便做持续集成并有助于整体发布的容器虚拟化技术. 2.虚拟机的缺点:(1)资源占用多:(2)冗余步骤多:(3)启动慢,分钟 ...
- Docker学习笔记之编写 Docker Compose 项目
0x00 概述 通过阅读之前的小节,相信大家对 Docker 在开发中的应用已经有了一定的了解.作为一款实用的软件,我们必须回归到实践中来,这样才能更好地理解 Docker 的实用逻辑和背后的原理.在 ...
- Docker学习笔记之使用 Docker Compose 管理容器
0x00 概述 通过之前的介绍,我们已经基本掌握了构建.运行容器的方法,但这还远远不够,由于 Docker 采用轻量级容器的设计,每个容器一般只运行一个软件,而目前绝大多数应用系统都绝不是一个软件所能 ...
- Docker学习笔记二:Docker常用命令及提升拉取镜像的速度
一.Docker命令: 1.docker images //命令用来查看docker中所包含的镜像信息 2.docker ps -a //命令用来查看docker中所包含所有容器信息(运行状 ...
- Docker学习笔记——1.2 Docker组件
Docker的核心组件包括: Docker客户端和服务器,也称为Docker引擎: Docker镜像: Registry: Docker容器. 1.Docker客户端和服务器 Docker是一个客户端 ...
- docker 学习笔记21:docker连接网络的设置
1.如果docker主机不需要通过代理连接外网 则docker的相关命令(如docker search)或docker容器与网络相关的操作都可以正常进行,不需要特殊设置. 2.当docker主机 是通 ...
随机推荐
- EHCACHE实现登录错误次数账号锁定
使用EHCACHE实现账号密码登录校验失败5次锁定10分钟 <?xml version="1.0" encoding="UTF-8"?> <e ...
- STL—— 容器(vector)数据插入insert()方法 的返回值
vector 容器下的 insert() 方法拥有返回值,由于insert() 方法拥有4种重载函数,他的返回值不尽相同. 第一种,插入单个元素后的返回值: 1 #include <iostre ...
- Java 8 新特性:日期处理
1. Java 8 日期处理新特性 Java 8基于ISO标准日期系统,提供了java.time包来处理时间日期,且该包下的所有类都是不可变类型而且线程安全. 2. 关键类 Instant:瞬时实 ...
- day109:MoFang:好友列表显示&添加好友页面初始化&添加好友后端接口
目录 1.好友列表 2.添加好友-前端 3.服务端提供添加好友的后端接口 1.好友列表 1.在用户中心页面添加好友列表点击入口 html/user.html,用户中心添加好友列表点击入口,代码: &l ...
- Shell-sed之替换字符
将A_B_C_D_TXT 修改为 A.B_C_D.TXT echo "A_B_C_D_TXT"|sed 's/_/./1;s/_/./3' 注:后面的数字代表匹配的次数, 1表示第 ...
- Python高级语法-对象实例对象属性-Property总结(4.6.2)
@ 目录 1.说明 2.代码 关于作者 1.说明 property属性,返回的是值 不是callable的,也就是不能使用方法来调用 只能传入self,不能传入其他 用处,能返回局部数据,比如当分页的 ...
- hugging face-基于pytorch-bert的中文文本分类
1.安装hugging face的transformers pip install transformers 2.下载相关文件 字表: wget http://52.216.242.246/model ...
- 悉数 Python 函数传参的语法糖
TIOBE排行榜是程序开发语言的流行使用程度的有效指标,对世界范围内开发语言的走势具有重要参考意义.随着数据挖掘.机器学习和人工智能相关概念的风行,Python一举收获2018年年度语言,这也是Pyt ...
- kickstart+pxe部署
------------恢复内容开始------------ kickstart 通过网络安装系统 ----pxe kickstart,cobbler pex 预启动执行环境 通过网络接口启动计算机, ...
- Git 是如何存储文件的
01.存储方式 Git 从核心上来看不过是简单地存储键值对(key-value).它允许插入任意类型的内容,并会返回一个键值,通过该键值可以在任何时候再取出该内容. Git 存储数据内容的方式,为每份 ...