Docker技术入门与实战 第二版-学习笔记-6-仓库
仓库(Repository)是集中存放镜像的地方
一个容易混淆的概念是注册服务器(Registry)。
实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。
从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址dl.dockerpool.com/ubuntu来说,dl.dockerpool.com是注册服务器(Registry),ubuntu是仓库(Repository)
1.Docker Hub(公共仓库)
登录——docker login
注册成功后,本地用户目录的 .dockercfg中将保存用户的认证信(Linux中)
然后之后就能够进行之前学习的一些操作,如拉取镜像等
2.私有仓库——docker-registry
docker-registry是官方提供的工具,可以用于构建私有的镜像仓库
有时候,我们并不想把自己的项目公开,只想自己使用。这时我们就需要自己建立自己的docker hub
1) 安装运行 docker-registry
- userdeMacBook-Pro:~ user$ docker run -d -p : registry
- Unable to find image 'registry:latest' locally
- latest: Pulling from library/registry
- d6a5679aa3cf: Pull complete
- ad0eac849f8f: Pull complete
- 2261ba058a15: Pull complete
- f296fda86f10: Pull complete
- bcd4a541795b: Pull complete
- Digest: sha256:5a156ff125e5a12ac7fdec2b90b7e2ae5120fa249cf62248337b6d04abc574c8
- Status: Downloaded newer image for registry:latest
- 80a3cb29464481d17c7c7640d7763ea6820cee39cd0c83ce959a76e7b7a6219f
- userdeMacBook-Pro:~ user$ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 80a3cb294644 registry "/entrypoint.sh /etc…" minutes ago Up minutes 0.0.0.0:->/tcp pensive_meninsky
这将使用官方的 registry 镜像来启动本地的私有仓库。(我没有进行下面的配置)
运行了上面的命令后,其实就相当于启动了一个服务器,然后我们就可以往上面push和pull了
下面是相应的环境配置,你也可以不设置,使用默认值
用户可以通过指定参数来配置私有仓库位置,例如配置镜像存储到 Amazon S3 服务:
- $ sudo docker run \
- -e SETTINGS_FLAVOR=s3 \
- -e AWS_BUCKET=acme-docker \
- -e STORAGE_PATH=/registry \
- -e AWS_KEY=AKIAHSHB43HS3J92MXZ \
- -e AWS_SECRET=xdDowwlK7TJajV1Y7EoOZrmuPEJlHYcNP2k4j49T
- -e SEARCH_BACKEND=sqlalchemy \
- -p : \
- registry
此外,还可以指定本地路径(如 /home/user/registry-conf )下的配置文件config.yml(我本地下并没有改文件,看看即可):
- $ sudo docker run -d -p : -v /home/user/registry-conf:/registry-conf -e DOCKER_REGISTRY_CONFIG=/registry-conf/config.yml registry
默认情况下,仓库会被创建在容器的 /tmp/registry下。可以通过 -v 参数来将镜像文件存放在本地的指定路径。
例如下面的例子将设置会将上传的镜像放到 /opt/data/registry 目录
- sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
2)在私有仓库上传、下载、搜索镜像——docker tag
格式:docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
创建好私有仓库之后,就可以使用 docker tag来标记一个镜像,然后推送它到仓库,就能够从别的机器上下载该镜像了。
⚠️:你image的标签一定得是你服务器的ip地址加端口.比如下面的命令docker tag 0254 192.168.1.103:5000/testNginx,否则你的镜像并不会上传到你自己的仓库上,而是会上传到docker hub上
先在本机查看已有的镜像:
- userdeMacBook-Pro:~ user$ docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- test/nginx v1 02548ab0445a minutes ago 107MB
- nginx v3 beda48ecf85b hours ago 109MB
- nginx v2 5dda481d7ed1 hours ago 109MB
- nginx latest 568c4670fa80 weeks ago 109MB
- ubuntu 14.04 f17b6a61de28 weeks ago 188MB
- registry latest 2e2f252f3c88 months ago .3MB
- alpine latest 196d12cf6ab1 months ago .41MB
- hello-world latest 4ab4c602aa5e months ago .84kB
然后就对镜像进行标记:
- userdeMacBook-Pro:~ user$ docker tag 192.168.1.103:/testNginx
- Error parsing reference: "192.168.1.103:5000/testNginx" is not a valid repository/tag: invalid reference format: repository name must be lowercase
- userdeMacBook-Pro:~ user$ docker tag 192.168.1.103:/testnginx
- userdeMacBook-Pro:~ user$ docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- 192.168.1.103:/testnginx latest 02548ab0445a minutes ago 107MB
- test/nginx v1 02548ab0445a minutes ago 107MB
- nginx v3 beda48ecf85b hours ago 109MB
- nginx v2 5dda481d7ed1 hours ago 109MB
- nginx latest 568c4670fa80 weeks ago 109MB
- ubuntu 14.04 f17b6a61de28 weeks ago 188MB
- registry latest 2e2f252f3c88 months ago .3MB
- alpine latest 196d12cf6ab1 months ago .41MB
- hello-world latest 4ab4c602aa5e months ago .84kB
然后docker push上传标记后的镜像:
- userdeMacBook-Pro:~ user$ docker push 192.168.1.103:/testnginx
- The push refers to repository [192.168.1.103:/testnginx]
- Get https://192.168.1.103:5000/v2/: http: server gave HTTP response to HTTPS client
出现问题,解决办法,添加"insecure-registries":["192.168.1.103:5000"]:
然后重启apply & restart
之后再重新运行一遍,因为你会发现registry容器也关闭了:
- userdeMacBook-Pro:~ user$ docker push 192.168.1.103:/testnginx
- The push refers to repository [192.168.1.103:/testnginx]
- 480dc0877295: Retrying in second
- received unexpected HTTP status: Service Unavailable
- userdeMacBook-Pro:~ user$ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- userdeMacBook-Pro:~ user$ docker run -d -p : registry
- 9baa1039f10d5037b1e6c393155233cfdee1ce068b7e4859d7d856c373d33ce8
- userdeMacBook-Pro:~ user$ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 9baa1039f10d registry "/entrypoint.sh /etc…" seconds ago Up seconds 0.0.0.0:->/tcp tender_kowalevski
- userdeMacBook-Pro:~ user$ docker push 192.168.1.103:/testnginx
- The push refers to repository [192.168.1.103:/testnginx]
- 480dc0877295: Pushed
- latest: digest: sha256:f682f1e8e7f792404f93977b9931a07c6180b4e84d4daadbb47ea4489d368e49 size:
然后一查看,成功上传:
- userdeMacBook-Pro:~ user$ cat .docker/daemon.json
- {
- "debug" : true,
- "insecure-registries" : [
- "192.168.1.103:5000"
- ],
- "experimental" : true,
- "registry-mirrors" : [
- "https://aic2v8yz.mirror.aliyuncs.com"
- ]
- }
- userdeMacBook-Pro:~ user$ curl -XGET http://192.168.1.103:5000/v2/_catalog
- {"repositories":["testnginx"]}
然后就能够到另一台电脑上使用下面的命令去拉取镜像了:
- docker pull 192.168.1.103:/testnginx
3) 仓库配置文件
Docker 的 Registry 利用配置文件提供了一些仓库的模板(flavor),用户可以直接 使用它们来进行开发或生产部署:
模板:
在 config_sample.yml文件中,可以看到一些现成的模板段:
- common : 基础配置
- local : 存储数据到本地文件系统
- s3 : 存储数据到 AWS S3 中
- dev : 使用 local模板的基本配置
- test : 单元测试使用
- prod : 生产环境配置(基本上跟s3配置类似)
- gcs : 存储数据到 Google 的云存储
- swift: 存储数据到 OpenStack Swift 服务
- glance : 存储数据到 OpenStack Glance 服务,本地文件系统为后备
- glance-swifte : 存储数据到 OpenStack Glance 服务,Swift 为后备
- elliptics : 存储数据到 Elliptics key/value 存储
Docker技术入门与实战 第二版-学习笔记-6-仓库的更多相关文章
- Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver
1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...
- Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥
1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...
- Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-1-cli
Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境 Docker Machine是一种工具,它允许你在虚拟主机 ...
- Docker技术入门与实战 第二版-学习笔记-7-数据管理(volume)
Docker 数据管理 为什么要进行数据管理呢?因为当我们在使用container时,可能会在里面创建一些数据或文件,但是当我们停掉或删除这个容器时,这些数据或文件也会同样被删除,这是我们并不想看见的 ...
- Docker技术入门与实战 第二版-学习笔记-5-容器-命令及限制内存与cpu资源
1.启动容器 启动容器有两种方式: 基于镜像新建一个容器并启动 将在终止状态(stopped)的容器重新启动 1)新建并启动——docker run 比如在启动ubuntu:14.04容器,并输出“H ...
- Docker技术入门与实战 第二版-学习笔记-3-Dockerfile 指令详解
前面已经讲解了FROM.RUN指令,还提及了COPY.ADD,接下来学习其他的指令 5.Dockerfile 指令详解 1> COPY 复制文件 格式: COPY <源路径> .. ...
- Docker技术入门与实战 第二版-学习笔记-8-网络功能network-1-单个host上的容器网络
Docker 中的网络功能介绍 Docker 允许通过外部访问容器或容器互联的方式来提供网络服务 1) 外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -p或 -P参数 ...
- Docker技术入门与实战 第二版-学习笔记-2-镜像构建
3.利用 commit 理解镜像构成 在之前的例子中,我们所使用的都是来自于 Docker Hub 的镜像. 直接使用这些镜像是可以满足一定的需求,而当这些镜像无法直接满足需求时,我们就需要定制这些镜 ...
- Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-3-Command-line completion命令补全
Command-line completion https://docs.docker.com/machine/completion/ Installing Command Completion——实 ...
随机推荐
- [日常] Go语言圣经--示例: 并发的Clock服务习题
练习 8.1: 修改clock2来支持传入参数作为端口号,然后写一个clockwall的程序,这个程序可以同时与多个clock服务器通信,从多服务器中读取时间,并且在一个表格中一次显示所有服务传回的结 ...
- Java集合类源码解析:LinkedHashMap
前言 今天继续学习关于Map家族的另一个类 LinkedHashMap .先说明一下,LinkedHashMap 是继承于 HashMap 的,所以本文只针对 LinkedHashMap 的特性学习, ...
- 【linux】suse linux 常用命令
命令ls——列出文件 ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls a* 列出当前目录下以字母a开头的所有文件 ls -l *.doc 给出当前目录下以.doc ...
- 【Linux】查看所使用的Linux系统是32位还是64 位的方法
查看所使用的Linux系统是32位还是64 位的方法 方法一:getconf LONG_BIT # getconf LONG_BIT 1 1 我的Linux是32位!!! 方法二:arch # arc ...
- jqgrid 获取当前页数据
/** *刷新,jqGrid刷新当前列表页代码 */ function refresh(url) { var page = $('#your_grid').getGridParam('page'); ...
- 把多个js函数绑定到onload时间处理函数上
js的window.onload=function();网页加载完毕时会触发一个onload事件,这个事件与window对象相关联,是让一个函数在网页加载完毕之后得到执行.但是如果有两个韩式first ...
- php面向对象精要(1)
1.静态属性与方法 每一个类的实例拥有自己的属性和方法,每一个类也可以包含静态属性,静态属性不属于类的任何实例,可以把静态属性理解成存储在类中的全局变量,可以在任何地方通过类名引用静态属性. < ...
- Python数据模型
引言 像大多数人一样,我在对一直传统的面向过程语言C一知半解之后,走进了面向对象的世界,尽管对OOP一无所知,还好Python还保留有函数式编程,这使得我才不那么抵触,直到现在,习惯了面向对象之后,也 ...
- H5自适应屏幕分辨率大小
说明: ①:H5自适应不同分辨率的设备,其实主要就一句 <meta name="viewport" content="width=device-width,init ...
- 设计模式(18)--Memento(备忘录模式)--行为型
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.模式定义: 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式. ...