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私有仓库部署流程相关推荐

  1. Docker容器之harbor私有仓库部署与管理

    Docker容器之harbor私有仓库部署与管理 前言 一.Harbor概述 二.Harbor的特性 三.Harbor的构成 四.Harbor私有仓库搭建 (1)安装docker-compose (2 ...

  2. Docker harbor私有仓库部署与管理

    Docker harbor私有仓库部署与管理. 前言 一.什么是Harbor 二.Harbor的特性 三.Harbor的构成 四.Harbor部署 4.1 环境准备 4.2 部署Docker Comp ...

  3. docker之搭建gitlab私有仓库服务

    简单三步搭建docker之搭建gitlab私有仓库服务 服务配置:1c2g+2g虚拟内存,服务启动大概需要3.x g内存 内存不足可配置虚拟使用--memory=10M --memory-swap=- ...

  4. docker 查询或获取私有仓库(registry)中的镜像

    docker 查询或获取私有仓库(registry)中的镜像,使用 docker search 192.168.1.8:5000 命令经测试不好使. 解决: 1.获取仓库类的镜像: [root@sha ...

  5. k8s-kubeadm和Harbor私有仓库部署

    部署k8s-kubeadm 文章目录 环境准备 需求: 环境部署 部署K8S集群 //设定kubectl //所有节点部署网络插件flannel //测试 pod 资源创建 部署 Dashboard ...

  6. Docker 安装 命令 数据卷 应用部署 网络优化 Dockerfile 服务编排Compose 私有仓库

    Docker 1. 初识docker 1.1 Docker是什么 了解Docker的前生LXC LXC与docker的关系 Docker 的特点 1.2 为什么使用Docker Docker的优势 缺 ...

  7. Docker 私有仓库部署和管理 | Harbor 概述 - 核心组件 - 架构拓扑 | Harbor 构建 Docker 私有仓库实战(理论+实操,超详细!)

    文章目录 一.Docker Harbor 概述 1.Harbor 简介 2.Harbor 的优势 二.Harbor 的核心组件 1.Proxy 2.Registry 3.Core services 4 ...

  8. Docker安装、详解与部署

    目录 Docker简介 Docker的优点如下: 1.简化程序 2.避免选择恐惧症 3.节省开支 Docker的架构 Docker 的安装 1.Docker 要求 CentOS 系统的内核版本高于 3 ...

  9. 【Docker】Registry搭建私有仓库、证书认证、用户登录认证

    一.Docker Registry工作原理 02_Docker Registry角色 Docker Registry有三个角色,分别是index.registry和registry client. i ...

  10. docker push到harbor私有仓库出现的相关问题及解决办法

    目录 0. 我们打开harbor的镜像仓库, 可以看到有推送仓库的命令, 包含了具体地址 1. 但是我在执行push命令报错了,  Get https://10.6.119.106/v2/: dial ...

最新文章

  1. 客制化键盘键位修改_干电池 支持5设备无线连接 - 高斯ALT71机械键盘拆解评测...
  2. 如何让你的 JS 写得更漂亮,看这篇就对了!
  3. [LeetCode]Power
  4. discuz x2.5 mysql_Discuz2.5的MYSQL数据库的备份与恢复
  5. vue之组件之间的传值
  6. js时间搓化为今天明天_踩雷预警!爆款好物怎么都变成了“搓泥宝”?
  7. Android开发UI之GridLayout的使用
  8. 区块链开源框架 HyperLedger Fabric 学习思路分享
  9. table添加一行且可编辑 vue_vue表格添加可编辑的一行后如何得到整个表格的数据...
  10. 栈和队列常用函数详解
  11. STM32 易阅读的代码风格
  12. python图形界面实践_python开发利器之ulipad的使用实践
  13. Reinforcement Learning[论文合集]
  14. JS 替换字符串中指定字符
  15. MMO与弱交互游戏的服务端技术区别
  16. iPhone 小技巧/实用功能
  17. Controller层使用@value注解获取不到 yml文件中的properties属性值
  18. 如何保持积极的心态?
  19. android默认wifi密码,Android 修改WiFi热点的默认SSID和密码
  20. vue 实现扫条形码与二维码 H5 兼容 苹果IOS

热门文章

  1. WinRAR制作单文件(便携版)
  2. 虚拟服务器架设教程,架设服务器虚拟主机教程
  3. CPU超频烤机温度多少算正常?
  4. Android 吸顶布局的写法
  5. gimp:图层的混合模式
  6. 立波 iphone3gs越狱教程:成功把iphone3gs手机升级成ios6.1.3系统,完美越狱,解决no service和耗电量大的问题...
  7. docker run参数-v的rw、ro详解
  8. 街头篮球手游服务器维护,街头篮球手游2018年7月20日更新维护公告 强力落地+过人高手技能...
  9. Linux获取ring0权限,Ring0和Ring3权限级
  10. Spring RestTemplate 实践