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主机 是通 ...
随机推荐
- mysql 迁移数据库到 oracle (sql注意问题)
http://ykdn2010.iteye.com/blog/1511349 一. 项目已用到 oracle 函数的转换 1. Oracle 中的 TO_DATE (),TO_CHAR () 示例: ...
- Linux 查看CPU型号,内存大小,硬盘空间的命令
1 查看CPU 1.1 查看CPU个数 # cat /proc/cpuinfo | grep "physical id" | uniq | wc -l 1.2 查看CPU核数 # ...
- 自定义Django认证系统的技术方案
Django已经提供了开箱即用的认证系统,但是可能并不满足我们的个性化需求.自定义认证系统需要知道哪些地方可以扩展,哪些地方可以替换.本文就来介绍自定义Django认证系统的相关技术细节. 自定义认证 ...
- 云小课 | 需求任务还未分解,该咋整!项目管理Scrum项目工作分解的心酸谁能知?
温馨提醒:本文约3000字,需要阅读5分钟,共分为8个部分,建议分段阅读! 软件开发过程中,从产品概念形成到产品规划.往往要做详细的需求分析和项目规划等,因此,选对一款项目管理工具对开发者就显得尤为重 ...
- 主从复制架构直接转换MGR(manual)
环境信息 IP port role info 192.168.188.81 3316 node1 master 192.168.188.82 3316 node2 slave1 192.168.188 ...
- Spark性能调优篇八之shuffle调优
1 task的内存缓冲调节参数 2 reduce端聚合内存占比 spark.shuffle.file.buffer map task的内存缓冲调节参数,默认是3 ...
- DirectX12的初始化
DirectX12的初始化主要分为以下若干步骤: 创建device和gifactory 创建与GPU通信同步相关的objects,command和fence 创建swap chain 为render ...
- 闭关修炼180天--手写IOC和AOP(xml篇)
闭关修炼180天--手写IOC和AOP(xml篇) 帝莘 首先先分享一波思维导图,涵盖了一些Spring的知识点,当然这里并不全面,后期我会持续更新知识点. 在手写实现IOC和AOP之前(也就是打造一 ...
- [WPF] 在 ViewModel 中让数据验证出错(Validation.HasError)的控件获得焦点
1. 需求 在 MVVM 中 ViewModel 和 View 之间的交互通常都是靠 Icommand 和 INotifyPropertyChanged,不过有时候还会需要从 MVVM 中控制 Vie ...
- ArrayList哪种循环效率更好你真的清楚吗
ArrayList简介 声明:以下内容都是基于jdk1.8的 ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了 ...