docker学习笔记(2)- 仓库
Docker仓库是镜像存储、分发、部署的关键,制作好应用程序镜像后上传到仓库,使用Docker daemon从仓库拉取后运行,我们可以使用官方共有仓库docker hub或者搭建私有仓库
- Docker Hub包含众多镜像,无需登录就可以搜索和使用
- 注册Docker Hub账户后可以上传和分享我们创建的镜像(https://hub.docker.com/)
- 支持用户创建私有仓库
Docker Hub
查找Ubuntu image
- OFFICIAL:官方维护的镜像,提供最基础的OS、编程语言、数据存储等一系列镜像,类似于PAAS。安全更新及时,并且有详细的文档、最佳实践、通用的设计方式。可以通过dockerfile进行学习
- AUTOMATED:可以关联github等源码仓库,进行自动构建并上传到Docker Hub
命令
# 查找镜像
docker search <NAME>
# 拉取镜像
docker pull <NAME>
# 推送镜像到仓库,通过添加不同的tag可以推送多个镜像到一个仓库
# 推送前需要登录docker hub
docker login
docker push <hub-user>/<repo-name>:<tag>
搭建私有仓库
如果想要构建一个基于Docker的PaaS平台,使用Docker Hub大多时候都满足要求,原因如下:
- 很多公司关键IDC无法访问外网,并且对于部署和分发而言网速带宽是较大的瓶颈
- 很多应用放到公共仓库是不安全的
- 可以将镜像存储和分发集成到内部的开发工作流中
registry是docker官方提供的开源组件,用于存储和分发镜像,无状态并且可扩缩容
registry
# 启动registry
docker run -d \
-e REGISTRY_HTTP_ADDR=0.0.0.0:5500 \
-p 6000:5500 \
--name registry-galen \
-v /mnt/docker-registry:/var/lib/registry \
--restart always \
registry:2
本地使用
docker pull ubuntu:16.04
# 为ubuntu image附加tag,
docker tag ubuntu:16.04 localhost:6000/galen-ubuntu
# push image 到跑在 localhost:6000的registry
docker push localhost:6000/galen-ubuntu
# 删除本地镜像
docker image rm ubuntu:16.04
docker image rm localhost:6000/galen-ubuntu
# 从registry中下拉
docker pull localhost:6000/galen-ubuntu
上传其他主机的image到仓库(115主机->129主机)
docker pull ubuntu:16.04
docker tag ubuntu:16.04 172.17.73.129:6000/galen-115-ubuntu
# 在要上传镜像的客户端(115)/etc/docker/daemon.json目录下,添加insecure-registries
{
"registry-mirror": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
],
"insecure-registries": [
"172.17.73.129:6000"
]
}
docker push 172.17.73.129:6000/galen-115-ubuntu
# 查询registry中的仓库
curl -X GET http://172.17.73.129:6000/v2/_catalog
{"repositories":["galen-115-ubuntu","galen-ubuntu"]}
- 以上部署registry的方法不安全,没有认证功能,任何可以访问到地址的客户端都可以上传镜像
使用nginx做认证
删除之前registry容器,重新启动
# 停止并删除
docker container rm -f registry-galen
# 启动registry
docker run -d \
-p 6000:5000 \
--name registry-galen \
-v /mnt/docker-registry:/var/lib/registry \
--restart always \
registry:2
vim /etc/nginx/conf.d/registry.conf
upstream registry-galen {
server 127.0.0.1:6000;
}
server {
listen 443 ssl;
server_name www.codemachine.in;
# 开启ssl
ssl on;
# 公钥证书
ssl_certificate /etc/ssl/certs/docker-registry.crt;
# 私钥
ssl_certificate_key /etc/ssl/private/docker-registry.key;
# 关闭对较大image请求的限制, HTTP 413
client_max_body_size 0;
# 避免HTTP 411
chunked_transfer_encoding on;
location /v2/ {
auth_basic "Need to login";
auth_basic_user_file /etc/nginx/conf.d/nginx.htpasswd;
include docker-registry.conf;
}
location /_ping/ {
auth_basic off;
include docker-registry.conf;
}
location /v2/_ping {
auth_basic off;
include docker-registry.conf;
}
}
vim /etc/nginx/docker-registry.conf
proxy_pass http://registry-galen;
proxy_set_header Host $http_host; # required for docker client's sake
proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
利用htpasswd工具创建用户认证的用户名和密码,将密码加密后生成到文件中
[root@localhost nginx]# htpasswd -bc /etc/nginx/conf.d/nginx.htpasswd
galendocker p@ssw0rd
Adding password for user galendocker
创建私有SSL证书
go 1.15 版本开始废弃 CommonName需要使用SAN证书
使用OpenSSL创建私有CA,CA包含公钥和私钥,公钥用于他人验证证书有效性,私钥用于给其他证书签名
使用openssl生成带有SAN扩展的证书请求文件,编辑/etc/pki/tls/openssl.cnf
req_extetions = v3_req
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = www.codemachine.in
DNS.2 = www.galen.codemachine.com
生成CA
mkdir /etc/pki/CA/ && cd /etc/pki/CA/ && mkdir certs && mkdir newcerts && touch index.txt
# 指定第一个颁发证书的序列号
echo 01 > serial
# 生成CA私钥文件,输入密码
openssl genrsa -des3 -out ca-key.pem 2048
# 生成CA自签证书,指明私钥文件,证书保存路径,有效期限等
openssl req -new -x509 -days 365 -key private/ca-key.pem -out private/ca-cert.pem
>
Enter pass phrase for ca-key.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Jiangsu
Locality Name (eg, city) [Default City]:Nanjing
Organization Name (eg, company) [Default Company Ltd]:bigtera
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:codemachine
Email Address []:937013596@qq.com
CA签署具有SAN(Subject Alt Name)扩展的服务器证书
# 生成服务器私钥文件
openssl genrsa -des3 -out server-key.pem 2048
# 生成服务器证书签署请求文件,默认国家,省,公司名称三项必须和CA一致
openssl req -new -key server-key.pem -out server.csr -extensions v3_req
>
Enter pass phrase for server-key.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Jiangsu
Locality Name (eg, city) [Default City]:Nanjing
Organization Name (eg, company) [Default Company Ltd]:bigtera
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:codemachine
Email Address []:937013596@qq.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
# 签发证书
openssl ca -in server.csr -keyfile ca-key.pem -cert ca-crt.pem -extensions v3_req -out server.crt
>
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for ca-key.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Mar 11 09:15:27 2022 GMT
Not After : Mar 11 09:15:27 2023 GMT
Subject:
countryName = CN
stateOrProvinceName = Jiangsu
organizationName = bigtera
commonName = codemachine
emailAddress = 937013596@qq.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment
X509v3 Subject Alternative Name:
DNS:www.codemachine.in, DNS:www.galen.codemachine.com
Certificate is to be certified until Mar 11 09:15:27 2023 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
# 删除server-key中的pass phrase
openssl rsa -in server-key.pem -out server-key.pem
# 安装server-key和server.crt到我们nginx配置开启ssl的目录下
cp server.crt /etc/ssl/certs/docker-registry.crt
mkdir /etc/ssl/private
cp server-key.pem /etc/ssl/private/docker-registry.key
开启nginx
systemctl start nginx
客户端使用
实验中没有配置DNS server,所以需要在hosts文件中添加www.codemachine.in与主机IP地址的映射:172.17.73.129 www.codemachine.in
- windows: C:\Windows\System32\drivers\etc\hosts
- linux:/etc/hosts
docker客户端
为了Docker能够正常地访问Nginx,发送ca证书到客户端,重启docker与registry容器
update-ca-trust force-enable
scp ca-crt.pem root@172.17.73.115:/etc/pki/ca-trust/source/anchors/ca-cert.crt
update-ca-trust extract
# 修改tag
docker tag busybox:latest www.codemachine.in/busybox:latest
# 未登录推送
docker push www.codemachine.in/centos:galen
>
Using default tag: latest
The push refers to repository [www.codemachine.in/busybox]
797ac4999b67: Preparing
no basic auth credentials
# 登录
docker login -u galendocker -p p@ssw0rd www.codemachine.in
# 再次推送
>
Using default tag: latest
The push refers to repository [www.codemachine.in/busybox]
797ac4999b67: Pushed
latest: digest: sha256:14d4f50961544fdb669075c442509f194bdc4c0e344bde06e35dbd55af842a38 size: 527
使用windows浏览器
使用浏览器打开 https://www.codemachine.in/v2/_catalog
docker学习笔记(2)- 仓库的更多相关文章
- Docker学习笔记五 仓库
本文地址:https://www.cnblogs.com/veinyin/p/10452224.html 以下均为命令行下操作 登录登出 docker login // 登录 docker logo ...
- docker学习笔记1 -- 安装和配置
技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...
- Docker学习笔记总结
Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/ 一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...
- Docker:学习笔记(1)——基础概念
Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...
- Docker学习笔记 — Docker私有仓库搭建
Docker学习笔记 — Docker私有仓库搭建 目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2 和Mavan的管理一样,Dockers ...
- Docker 学习笔记一
Docker 学习笔记一 1.Docker是什么? Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源.让开发者打包他们的应用以及依赖包到一 ...
- Docker学习笔记之-在CentOS中安装Docker
上一节演示了如何 通过Xshell连接CentOS服务,链接:Docker学习笔记之-通过Xshell连接 CentOS服务 本节将演示 如何在CentOS中安装 Docker 第一步:更新系统包到最 ...
- docker学习笔记(3)- 镜像
简介 在docker学习笔记(1)- 架构概述一节中可以看到镜像是docker三大组件之一,可以将Docker镜像类比为虚拟机的模版. 镜像由多个层组成,每层叠加之后从外部看就像一个独立的对象,镜像的 ...
- Docker学习笔记 — 配置国内免费registry mirror
Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...
随机推荐
- ApacheCN Linux 译文集(二) 20211206 更新
CentOS7 Linux 服务器秘籍 零.前言 一.安装 CentOS 二.配置系统 三.管理系统 四.用 YUM 管理包 五.管理文件系统 六.提供安全性 七.构建网络 八.使用文件传输协议 九. ...
- NOIP2017 Day2T3 列队
首先可以观察到这样一个事实,如果 \((x, y)\) 出队,那么只会影响 \(x\) 这一行,以及最后一列的排布.并且可以发现,每次一个人出队,总会对最后一列有影响,因此我们可能需要将最后一列单独拿 ...
- web项目报405错误
错误:报405错误 原因:405错误是由于servlet类继承了HttpServlet,但是没有重写里面的doGet()和doPost()方法导致的,没有重写,就会访问父类,及原生的HttpServe ...
- 长时间不操作Navicat或Putty会断线?
问题描述 今天发现只要一直不使用Putty,发现就会"卡住",还有Navicat连接数据库也有类似问题. 问题分析 Linux或者数据库都想节省连接资源呗. 问题解决 那就隔一段时 ...
- JAVA类加载器二 通过类加载器读取资源文件
感谢原文作者:不将就! 原文链接:https://www.cnblogs.com/byron0918/p/5770684.html 一.getResourceAsStream方法 getResourc ...
- hibernate中的一级缓存与闪照区
首先Hibernate中的一级缓存默认是打开的,并且范围从session创建到session关闭,存储的数据必须是持久态的数据. 1 //从session创建开始,一级缓存也跟着创建 2 Sessio ...
- iOS 模糊、精确搜索匹配功能方法总结 By HL
字符串搜索主要用于UITableView的搜索功能的筛选,过滤,查询 下面是一些流行的搜索查询方法 一.遍历搜索 for循环 根据要求:精确搜索(判读字符串相等) 模糊搜索(字符串包含) 相关知识 ...
- Python概述 —变量及运算符
Python概述-变量及运算符 1.变量的构成 2.变量的类型 3.内存模型 4.变量命名规则 5. 算数与逻辑运算符 6.位运算符 #变量的构成 变量名:方便查找 变量值:实际要存储的内容 变量类型 ...
- IDEA的使用和快捷键
一.字体设置: 菜单:file->setting->Appearan 编辑区字体大小:file->setting->Font 字体加粗:file->setting-> ...
- linux_16
对常用I/O模型进行比较说明 nginx中的模块分类及常见核心模块有哪些 描述nginx中worker_processes.worker_cpu_affinity.worker_rlimit_nofi ...