Docker安装及Docker私有仓库部署流程
Docker安装及Docker私有仓库部署流程
docker安装
此文档是基于Centos7操作。用户为root。
系统内核需要3.8或更高版本
//查看内核
$ uname -a //安装docker,此脚本会检查内核并安装
$ curl -fsSL https://get.docker.com/ | sh //启动服务
$ systemctl start docker //查看版本
$ docker --version
部署私有仓库
镜像在公有仓库dockerhub拉取推送非常慢,而且把项目的镜像放在公网很不安全,在局域网内搭建私有仓库安全快捷。
docker registry server分为2个版本,第一版是python写成的,第二版是go写的。 本文档基于go版本,需要docker version 1.6以上。
//查看镜像
$ docker images//删除镜像 -f表示强制删除
$ docker rmi -f 镜像id//运行基于容器的registry. registry:2镜像不存在时 会去dockerhub上面下载镜像并运行。--restart 设置为always,无论容器的退出代码是什么,Docker都会重启该容器, 设置为on-failure时 只有当容器的退出代码为非0时才会重启,如--restart=on-failure:5表示最多重启5次
$ docker run -d -p 5000:5000 --restart=always --name registry registry:2 //默认的registry data是存储在容器docker volume中的,如果registry停止volume是会被删除的
//把data共享出来到宿主机目录/data下
$ docker run -d -p 5000:5000 --restart=always --name registry -v /data:/var/lib/registry registry:2 //获取容器日志 与tail -f 类似
$ docker logs centos_d_container -f//来查看当前系统中正在运行的容器列表
$ docker ps //命令会列出所有的容器
$ docker ps -a //停止容器 start restart
$ docker stop registry (容器名或容器id)//删除容器
$ docker rm registry (容器名或容器id)//删除全部容器
$ docker rm `docker ps -a -q`//现在测试下私有仓库
//下载ubuntu镜像
$ docker pull ubuntu //打tag 将ubuntu取名为192.168.1.182:5000/ubuntu 不写tag默认为latest
$ docker tag ubuntu 192.168.1.182:5000/ubuntu //推送到私有仓库
$ docker push 192.168.1.182:5000/ubuntu //查看
//可以直接在宿主机共享目录 查到ubuntu
$ ll /data/docker/registry/v2/repositories///使用API查看
$ curl https://192.168.1.182:5000/v2/_catalog
客户端使用私有仓库
先安装好Docker 请看上文
//配置私有仓库地址
$ echo '{ "insecure-registries":["192.168.1.182:5000"] }' > /etc/docker/daemon.json//重启生效
$ systemctl restart docker//拉取私有仓库中的ubuntu镜像
$ docker pull 192.168.1.182:5000/ubuntu //也可以推送到私有仓库,比如本地有个centos 镜像
$ docker tag centos 192.168.1.182:5000/centos
$ docker push 192.168.1.182:5000/centos //使用API查看
$ curl https://192.168.1.182:5000/v2/_catalog
创建证书
如果私有仓库想放到外网访问,这样谁都可以访问,就不安全了,需要登录认证
running a domain registry using TLS
//需要安装openssl
$ which openssl//创建证书
$ openssl genrsa -out server.key 2048
$ openssl req -new -key server.key -out server.csrYou 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) []:guangdong
Locality Name (eg, city) [Default City]:shenzhen
Organization Name (eg, company) [Default Company Ltd]:mobi
Organizational Unit Name (eg, section) []:soft
Common Name (eg, your name or your server's hostname) []:registrydomain.com
Email Address []:liangxxx@xxx.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
然后把证书安装到系统中.
$ cp server.crt /etc/pki/ca-trust/source/anchors/
$ update-ca-trust enable
$ update-ca-trust extract
然后在/etc/hosts中配置域名,重启docker进程
$ vim /etc/hosts
192.168.1.182 registrydomain.com
$ systemctl restart docker
然后使用证书启动容器。
$ mkdir certs
$ cp server.crt certs/
$ cp server.key certs/
$ docker run -d -p 5000:5000 --name registry --restart=always -v /data:/var/lib/registry -v $PWD/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt -e REGISTRY_HTTP_TLS_KEY=/certs/server.key registry:2
在其他客户端中也进行安装证书和配置域名并重启docker进程后就可以使用了
用户名密码应用
//用户名:hello,密码:world
$ sh -c "docker run --entrypoint htpasswd registry:2 -Bbn hello world > auth/htpasswd"$ docker run -d -p 5000:5000 --restart=always --name registry -v `pwd`/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v `pwd`/certs:/certs -v /data:/var/lib/registry -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt -e REGISTRY_HTTP_TLS_KEY=/certs/server.key registry:2//登录 输入用户名密码hello:world
$ docker login registrydomain.com:5000//登出
$ docker logout registrydomain.com:5000
客户端用户名密码登录使用私有仓库
//server.crt 仓库生成的证书
$ cp server.crt /etc/pki/ca-trust/source/anchors/
$ update-ca-trust enable
$ update-ca-trust extract//然后在/etc/hosts中配置域名,重启docker进程
$ vim /etc/hosts
192.168.1.182 registrydomain.com$ systemctl restart docker$ docker login registrydomain.com -u hello -p world
界面管理私有仓库
//登录成功后查BASIC_AUTH值
$ cat /root/.docker/config.json//启动界面
$ docker run -d -p 8080:8080 --name web --link registry \-e REGISTRY_URL=https://192.168.1.182:5000/v2 \-e REGISTRY_TRUST_ANY_SSL=true \-e REGISTRY_READONLY=false \-e REGISTRY_BASIC_AUTH="aGVsbG86d29ybGQ=" \-e REGISTRY_NAME=localhost:5000 hyper/docker-registry-web
浏览器访问:http://192.168.1.182:8080/
可以界面上删除镜像,增加delete配置
//把配置文件拷贝出来
docker cp registry:/etc/docker/registry/config.yml config.yml $ vim config.yml
storage:cache:blobdescriptor: inmemoryfilesystem:rootdirectory: /var/lib/registrydelete: enabled: true...//指定配置文件启动
$ docker run -d -p 5000:5000 --restart=always --name registry -v `pwd`/config.yml:/etc/docker/registry/config.yml -v `pwd`/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v `pwd`/certs:/certs -v /data:/var/lib/registry -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt -e REGISTRY_HTTP_TLS_KEY=/certs/server.key registry:2
注意:不建议使用删除,镜像是以层的概念,每个镜像可能依赖相同的层,在这里删除不会物理删除
Docker Compose
安装docker-compose
$ curl -L https://github.com/docker/compose/releases/download/1.11.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose --version//列出容器
$ docker-compose ps //version 1现在已不支持,建议使用version 2
//下面使用docker-compose 以服务方式 启动私有仓库和界面管理
$ vim docker-compose.yml
version: '2'
services:registry:restart: alwaysimage: registry:2ports:- 5000:5000environment:REGISTRY_HTTP_TLS_CERTIFICATE: /certs/server.crtREGISTRY_HTTP_TLS_KEY: /certs/server.keyREGISTRY_AUTH: htpasswdREGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswdREGISTRY_AUTH_HTPASSWD_REALM: Registry Realmvolumes:- ./config.yml:/etc/docker/registry/config.yml- ./auth:/auth- ./certs:/certs- /data:/var/lib/registrynetworks:- registry-netweb:restart: always image: hyper/docker-registry-webports:- 8080:8080environment:REGISTRY_URL: https://registry:5000/v2REGISTRY_TRUST_ANY_SSL: "true"REGISTRY_READONLY: "false"REGISTRY_BASIC_AUTH: aGVsbG86d29ybGQ=REGISTRY_NAME: registry:5000networks:- registry-net
networks:registry-net://后台启动
$ docker-compose up -d
Docker安装及Docker私有仓库部署流程相关推荐
- Docker容器之harbor私有仓库部署与管理
Docker容器之harbor私有仓库部署与管理 前言 一.Harbor概述 二.Harbor的特性 三.Harbor的构成 四.Harbor私有仓库搭建 (1)安装docker-compose (2 ...
- Docker harbor私有仓库部署与管理
Docker harbor私有仓库部署与管理. 前言 一.什么是Harbor 二.Harbor的特性 三.Harbor的构成 四.Harbor部署 4.1 环境准备 4.2 部署Docker Comp ...
- docker之搭建gitlab私有仓库服务
简单三步搭建docker之搭建gitlab私有仓库服务 服务配置:1c2g+2g虚拟内存,服务启动大概需要3.x g内存 内存不足可配置虚拟使用--memory=10M --memory-swap=- ...
- docker 查询或获取私有仓库(registry)中的镜像
docker 查询或获取私有仓库(registry)中的镜像,使用 docker search 192.168.1.8:5000 命令经测试不好使. 解决: 1.获取仓库类的镜像: [root@sha ...
- k8s-kubeadm和Harbor私有仓库部署
部署k8s-kubeadm 文章目录 环境准备 需求: 环境部署 部署K8S集群 //设定kubectl //所有节点部署网络插件flannel //测试 pod 资源创建 部署 Dashboard ...
- Docker 安装 命令 数据卷 应用部署 网络优化 Dockerfile 服务编排Compose 私有仓库
Docker 1. 初识docker 1.1 Docker是什么 了解Docker的前生LXC LXC与docker的关系 Docker 的特点 1.2 为什么使用Docker Docker的优势 缺 ...
- Docker 私有仓库部署和管理 | Harbor 概述 - 核心组件 - 架构拓扑 | Harbor 构建 Docker 私有仓库实战(理论+实操,超详细!)
文章目录 一.Docker Harbor 概述 1.Harbor 简介 2.Harbor 的优势 二.Harbor 的核心组件 1.Proxy 2.Registry 3.Core services 4 ...
- Docker安装、详解与部署
目录 Docker简介 Docker的优点如下: 1.简化程序 2.避免选择恐惧症 3.节省开支 Docker的架构 Docker 的安装 1.Docker 要求 CentOS 系统的内核版本高于 3 ...
- 【Docker】Registry搭建私有仓库、证书认证、用户登录认证
一.Docker Registry工作原理 02_Docker Registry角色 Docker Registry有三个角色,分别是index.registry和registry client. i ...
- docker push到harbor私有仓库出现的相关问题及解决办法
目录 0. 我们打开harbor的镜像仓库, 可以看到有推送仓库的命令, 包含了具体地址 1. 但是我在执行push命令报错了, Get https://10.6.119.106/v2/: dial ...
最新文章
- 客制化键盘键位修改_干电池 支持5设备无线连接 - 高斯ALT71机械键盘拆解评测...
- 如何让你的 JS 写得更漂亮,看这篇就对了!
- [LeetCode]Power
- discuz x2.5 mysql_Discuz2.5的MYSQL数据库的备份与恢复
- vue之组件之间的传值
- js时间搓化为今天明天_踩雷预警!爆款好物怎么都变成了“搓泥宝”?
- Android开发UI之GridLayout的使用
- 区块链开源框架 HyperLedger Fabric 学习思路分享
- table添加一行且可编辑 vue_vue表格添加可编辑的一行后如何得到整个表格的数据...
- 栈和队列常用函数详解
- STM32 易阅读的代码风格
- python图形界面实践_python开发利器之ulipad的使用实践
- Reinforcement Learning[论文合集]
- JS 替换字符串中指定字符
- MMO与弱交互游戏的服务端技术区别
- iPhone 小技巧/实用功能
- Controller层使用@value注解获取不到 yml文件中的properties属性值
- 如何保持积极的心态?
- android默认wifi密码,Android 修改WiFi热点的默认SSID和密码
- vue 实现扫条形码与二维码 H5 兼容 苹果IOS
热门文章
- WinRAR制作单文件(便携版)
- 虚拟服务器架设教程,架设服务器虚拟主机教程
- CPU超频烤机温度多少算正常?
- Android 吸顶布局的写法
- gimp:图层的混合模式
- 立波 iphone3gs越狱教程:成功把iphone3gs手机升级成ios6.1.3系统,完美越狱,解决no service和耗电量大的问题...
- docker run参数-v的rw、ro详解
- 街头篮球手游服务器维护,街头篮球手游2018年7月20日更新维护公告 强力落地+过人高手技能...
- Linux获取ring0权限,Ring0和Ring3权限级
- Spring RestTemplate 实践