facd12(dfanfa)

文章索引:1.码头条目的图像、容器和仓库2.docker安装和镜像加速器配置3.docker系列基础课程-如何获取图像、列出图像和删除图像。4.docker系列

facd12(dfanfa)插图

文章索引:

1.码头条目的图像、容器和仓库

2.docker安装和镜像加速器配置

3.docker系列基础课程-如何获取图像、列出图像和删除图像。

4.docker系列基础课程:利用commit理解镜像的构成

5.docker系列基础课程:使用Dockerfile自定义镜像

6.docker系列基础课程:docker文件指令详解(1)

7.docker系列基础课程:docker文件指令详解(2)

8.docker系列基础课程:docker文件指令详解(3)

9.docker系列基础课程:docker集装箱的操作与维护

访问仓库

存储库是集中存储图像的地方。

一个令人困惑的概念是注册表。实际上,注册服务器是管理仓库的特定服务器。每个服务器可以有多个仓库,每个仓库下有多个镜像。在这方面,仓库可以被认为是一个特定的项目或目录。例如,对于仓库地址,dl.dockerpool.com/ubuntu,·dl.dockerpool.com是注册的服务器地址,ubuntu是仓库名称。

很多时候,并不需要严格区分这两个概念。

码头枢纽

目前,Docker官方维护着一个公共仓库Docker Hub,其中已经包含了超过15000个镜像。大部分需求可以直接在Docker Hub下载图片实现。

注册

你可以在https://hub.docker.com免费注册一个Docker账户。

登录

您可以在命令行界面中通过执行docker login命令并交互输入用户名和密码来登录Docker Hub。

您可以通过docker注销来注销。

拉镜像

可以使用docker search命令在官方仓库中查找图片,使用docker pull命令下载到本地。

例如,以centos为关键字进行搜索:

$ docker search CentOS name DESCRIPTION STARS官方自动CentOS CentOS的官方版本。465 [OK]tianon/centos CentOS 5和6,使用rinse instea创建...28blalor/centos裸机基本CentOS 6.5图像6[OK]salt stack/CentOS-6-minimal 6[OK]tutum/CentOS-6.4 deprecated.usetutum/CentOS: 6.4.....5【确定】你可以看到已经返回了很多包含关键词的图片,包括图片名称、描述、收藏号(表示图片的受关注程度)、是否官方创建、是否自动构建。

图片根据是否官方提供可以分为两类。

一种是类似centos的镜子,称为基镜或根镜。这些基本图像由Docker公司创建、验证、支持和提供。这种镜像通常使用一个单词作为其名称。

还有一类,如tianon/centos mirror,由Docker Hub的注册用户创建和维护,往往带有用户名前缀。您可以使用前缀username/来指定用户(如tianon用户)提供的镜像。

另外,在搜索时,参数- filter=stars=N = n可以指定只显示收藏数大于N的图片。

本地下载官方centos图片。

$ Docker Pullcentos拉库Centos 0b443ba03958:下载完成539c0211cd76:下载完成511136EA35A:下载完成7064731afe90:下载完成推送图片

用户登录后还可以通过docker push命令将自己的图片推送到Docker Hub。

请用您的Docker帐户用户名替换以下命令中的用户名。

$ Docker TAG Ubuntu:18.04 Username/ ubuntu:18.04 $ Docker IMAGE ls repository TAG IMAGE ID CREATED size Ubuntu 18.04 275d 79972 a 86 6天前94.6 MB Username/Ubuntu 18.04 275d 7972 a 86 6天前94.6 MB $ Docker Push Username/Ubuntu:18.04 $ Docker Search Username Description Stars官方自动生成的用户名/Ubuntu

自动构建功能对于镜像中需要频繁升级的程序来说非常方便。

有时,用户构建一个映像,安装一些软件,并在软件的新版本发布时手动更新映像。

自动构造允许用户通过Docker Hub在一个目标网站(支持GitHub或BitBucket)上指定并跟踪项目。一旦项目有了新的提交或创建了新的标签,Docker Hub将自动构建一个映像并将其推送到Docker Hub。

要配置自动构建,请包括以下步骤:

登录 Docker Hub;在 Docker Hub 点击右上角头像,在账号设置(Account Settings)中关联(Linked Accounts)目标网站;在 Docker Hub 中新建或选择已有的仓库,在 Builds 选项卡中选择 Configure Automated Builds;选取一个目标网站中的项目(需要含 Dockerfile)和分支;指定 Dockerfile 的位置,并保存。

之后,您可以在Docker Hub的仓库页面的Timeline选项卡中检查每个构建的状态。

私营仓库

有时使用Docker Hub这样的公共仓库可能不太方便。用户可以创建一个本地仓库供私人使用。

本节描述如何使用本地仓库。

Docker-registry是一个官方工具,可用于构建私有镜像库。本文基于docker-registry v2.x版本。

运行docker-注册表

集装箱操作

您可以通过获取官方注册表映像来运行它。

$ Docker Run-D-p 5000:5000-restart = always-name registry注册表这将使用官方注册表映像来启动私有仓库。默认情况下,仓库将创建在容器的/var/lib/registry目录中。您可以使用-v参数将图像文件存储在本地指定的路径中。例如,以下示例将上传的图像放在本地/opt/data/registry目录中。

$ Docker Run-d \-p 5000:5000 \-v/opt/data/registry:/var/lib/registry \ registry上传、搜索和下载私有仓库中的图像。

创建私有仓库后,可以用docker标签标记一个镜像,然后推送到仓库。例如,私有仓库地址为127.0.0.1:5000。

请先检查这台机器上的现有映像。

$ Docker Image LS Repository标签Image ID创建的虚拟大小Ubuntu最新ba 5877 DC 9 bec 6周前192.7 MB使用Docker标签将ubuntu:latest的映像标记为127.0.0.1:5000/ubuntu:latest。

格式为docker标记图像[:标记][注册表_主机[:注册表_端口]/]存储库[:标记]。

$ docker tag ubuntu:最新127.0.0.1:5000/ ubuntu:最新$ docker IMAGE ls repository TAG IMAGE ID CREATED VIRTUAL size Ubuntu最新ba5877dc9bec 6周前192.7 MB127.0.0.1:5000/ Ubuntu:最新ba5877dc9bec6周前192.7 MB使用docker push上传标记的图像。

$ docker push 127 . 0 . 0 . 1:5000/Ubuntu:latest push引用repository[127 . 0 . 0 . 1:5000/Ubuntu]373 a 30 c 24545:pushed 9148 f 5200 b 0:pushed cdd 3 de 0940 ab:pushed fc 56279 BBB 33:pushed 38367233d 37:pushed 2 aebd 096 e0e 2:pushed latest:digest

$ curl 127 . 0 . 0 . 1:5000/v2/_ catalog {"repositories":["ubuntu"]}这里可以看到{ " repositories ":[" Ubuntu "]},表示镜像已经上传成功。

首先删除现有的映像,然后尝试从私有存储库中下载该映像。

$ Docker Image RM 127 . 0 . 0 . 1:5000/Ubuntu:最新$ Docker pull 127 . 0 . 0 . 1:5000/Ubuntu:Latest pulling Repository 127 . 0 . 0 . 1:5000/Ubuntu:Latest ba 5877 DC 9 bec:Download Complete 511136 ea 3c 5a:Download Complete 9 bad 880 da 3d 2:Download Complete 25 f 11 f 5 FB 0 CB:Download Complete ebc 34468 f

例如,如果您不想使用127.0.0.1:5000作为仓库地址,您希望此网段中的其他主机将映像推送到专用仓库。你要用192.168.199.100:5000这样的内网地址作为私有仓库地址,然后你会发现你无法成功推送镜像。

这是因为Docker默认情况下不允许非HTTPS推送镜像。我们可以通过Docker的配置选项取消这一限制,或者查看下一部分来配置可以通过HTTPS访问的私有仓库。

Ubuntu 16.04+,Debian 8+,centos 7

对于使用systemd的系统,请在/etc/docker/daemon.json中写入以下内容(如果该文件不存在,请创建一个新文件)

{ " Registry-mirror ":[" https://Registry . docker-cn . com "]," insert-registries ":[" 192 . 168 . 199 . 100:5000 "]}注意:该文件必须符合json规范,否则Docker将无法启动。

其他的

对于Docker Desktop for Windows和Docker Desktop for Mac,在设置中编辑daemon.json并添加与上面相同的字符串。

私有仓库的高级配置

在上一节中,我们构建了一个具有基本功能的私有仓库。在本节中,我们使用Docker Compose构建一个带有权限认证和TLS的私有仓库。

创建一个新文件夹,下面的步骤将在这个文件夹中执行。

准备站点证书

如果你拥有一个域名,国内各大云服务提供商都提供免费的站点证书。您也可以使用openssl来颁发您自己的证书。

让我们假设我们将要建立的私有仓库的地址是docker.domain.com。下面我们来介绍一下如何使用openssl自行发布docker.domain.com的站点的ssl证书。

第一步是创建CA私钥。

$ OpenSSL gen RSA-out " root-ca . key " 4096第二步是用私钥创建CA根证书请求文件。

$ OpenSSL req \-new-key " root-ca . key " \ out " root-ca . CSR "-sha 256 \-subj '/C = cn/st =山西/l =大同/o = your company name/cn = your company name docker registry ca '以上命令/ST表示省;/L表示城市或地区;/O表示组织名称;/CN常用名。

步骤3:配置CA根证书并创建一个新的根-ca.cnf

[root _ ca]basic constraints = critical,ca: true,pathlen: 1 keyusage = critical,nonrepudiation,crlsign,keycertsignpjectkey identifier = hash第四步颁发根证书。

$ OpenSSL 509-req-days 3650-in " root-ca . CSR " \ sign key " root-ca . key "-sha 256-out " root-ca . CRT " \ extfile " root-ca . CNF "-extensions \ root _ ca第5步生成

$ OpenSSL gen RSA-out " docker . domain . com . key " 4096步骤6使用私钥生成证书请求文件。

$ opensslreq-new-key " docker . domain . com . key "-out " site . CNF "-sha 256 \-subj '/c = cn/ST = Shanxi/l =大同/o = your company name/cn = docker . domain . com '第7步配置证书

【服务器】authorityKeyIdentifier=keyid,issuerbasicConstraints = critical,CA:false extendedkey usage = serverAuthkeyUsage = critical,digitalSignature,encryption subjectalname = DNS:docker.domain.com,IP:127 . 0 . 0 . 1 subject key identifier = hash步骤8签署站点SSL证书。

$ OpenSSL x509-req-days 750-in " site . CSR "-sha 256 \-CA " root-CA . CRT "-CAkey " root-CA . key "-CAcreateserial \-out " docker . domain . com . CRT "-extfile " site . CNF "-扩展服务器。所以,我们已经有了docker.domain.com网站的SSL私钥docker.domain.com.key和SSL证书docker.domain.com.crt和CA根证书root-ca.crt。

创建一个新的ssl文件夹,移动docker.domain.com.key docker.domain.com.crt的root-ca.crt的三个文件,并删除其他文件。

配置私有仓库

私有仓库的默认配置文件位于/etc/docker/registry/config.yml,我们先在本地编辑config . yml,然后挂载到容器中。

版本:0.1log: accesslog: disabled: true级别:调试格式化程序:文本字段:服务:注册表环境:staging storage:delete:enabled:true ca che:blob descriptor:in内存文件系统:root directory:/var/lib/registry auth:htpasswd:realm:basic-realm path:/Etc/docker/registry/auth/nginx . htpasswd http:addr::443主机:https://docker.domain.com头:X-Content-Type-Options:[nosniff]http 2:disabled:false TLS

$ mkdir auth $ docker run-RM \-entry point htpasswd \ registry \-Bbn用户名密码& gtAuth/nginx.htpasswd用自己的用户名和密码替换上面的用户名密码。

编辑docker-compose.yml

版本:“3”服务:注册表:映像:注册表端口:-“443:443”卷:-。/:/etc/docker/registry-registry-data:/var/lib/registry卷:registry-data:修改主机

编辑/etc/hosts

27.0.0.1·docker.domain.com开始了。

$ docker-compose up -d所以我们建立了一个带有权限认证和TLS的私有仓库。接下来,我们测试它的功能是否正常。

测试私有仓库功能

由于自颁发的CA根证书不被系统信任,我们需要将CA根证书ssl/root-ca.crt移动到文件夹/etc/docker/certs . d/docker . domain . com中。

$ sudo mkdir-p/etc/docker/certs . d/docker . domain . com $ sudo cpssl/root-ca . CRT/etc/docker/certs . d/docker . domain . com/ca . CRT登录私有仓库。

$ Docker登录docker.domain.com尝试推拉图像。

$ Docker Pull Ubuntu:18.04 $ Docker tag Ubuntu:18.04 docker.domain.com/username/ubuntu:18.04$ Docker push docker.domain.com/username/ Ubuntu:18.04 $ Docker Image RM docker.domain.com/username/ubuntu:18.04$ Docker Pull docker.domain.com/username/ubuntu:18.04如果我们注销了,尽量推映像。

$ Docker Logout Docker.domain.com $ Docker Push docker.domain.com/username/ubuntu:18.04no基本身份验证凭证将提示您在未登录的情况下无法将映像推送到私有仓库。

Nexus3.x的私有仓库

Docker官方注册创建的仓库面临一些维护问题。比如有些图片删除后,空默认不会回收。需要一些命令来回收空并重新启动注册表程序。在企业中,将一些内部工具包放入Nexus是一种常见的做法。最新版本的Nexus3.x完全支持Docker的私有映像。所以用Nexus3.x软件管理Docker、Maven、Yum、PyPI等是明智的选择。

启动Nexus容器

$ docker run-d-name Nexus3-restart = always \-p 8081:8081 \-mount src = nexus-data,target =/nexus-data \ sonatype/nexus 3等待3-5分钟,如果nexus 3容器没有异常退出,那么可以用浏览器打开http://。

第一次启动Nexus时,默认帐户是admin,密码是admin123。登录后,点击页面顶部的齿轮按钮进行设置。

创建仓库

创建私有仓库的方法:仓库->仓库点击右键菜单创建仓库选择docker(托管)

Name: 仓库的名称HTTP: 仓库单独的访问端口Enable Docker V1 API: 如果需要同时支持 V1 版本请勾选此项(不建议勾选)。Hosted -> Deployment pollcy: 请选择 Allow redeploy 否则无法上传 Docker 镜像。

其他的建仓方法可以自己探索。您还可以创建一个docker(代理)类型的仓库,并将其链接到DockerHub。创建另一个docker (group)类型的仓库,并将托管和代理添加在一起。当主机访问时,默认下载私有仓库中的映像。如果它没有链接到DockerHub,它将被下载并缓存在Nexus中。

添加访问权限

安全->“菜单->:领域”将Docker无记名令牌领域移动到右边的框中并保存它。

添加用户规则:菜单安全性->:角色->;在权限选项中创建角色搜索docker,将相应的规则移动到右边的框中并保存。

添加用户:菜单安全性->:用户->;“创建本地用户”选择刚刚在“角色”选项中创建的规则,并将它们移动到右侧窗口进行保存。

NGINX加密代理

证书生成请参考私有仓库高级配置中的证书生成部分。

NGINX示例配置如下

上游注册{服务器“您的主机名或IP”:5001;# port是上面添加的HTTP选项的端口号,check interval = 3000 rise = 2 fall = 10 time out = 1000 type = HTTP;check _ HTTP _ send " HEAD/HTTP/1.0 \ r \ n \ r \ n ";check _ http _ expect _ alive http _ 4xx;}服务器{服务器名称您的域名;#如果没有用于解析的DNS服务器,请删除此选项,并使用本地IP地址访问listen 443 sslSSL _ certificate key/example . CRT;SSL _ certificate _ key key/example . key;ssl _ session _ timeout 5mSSL _ protocols TLS v1 TLS v1.1 TLS v1.2;ssl_ciphers高:!阿努尔:MD5ssl _ prefer _ server _ ciphers onlarge _ client _ header _ buffers 4 32k;client _ max _ body _ size 300mclient _ body _ buffer _ size 512kproxy _ connect _ timeout 600proxy _ read _ timeout 600proxy _ send _ timeout 600proxy _ buffer _ size 128kproxy _ buffers 4 64kproxy _ busy _ buffers _ size 128k代理_临时_文件_写入_大小512klocation/{ proxy _ set _ header Host $ Host;proxy _ set _ header X-Forwarded-Proto $ scheme;proxy _ set _ header X-Forwarded-Port $ server _ Port;proxy _ set _ header X-Forwarded-For $ proxy _ add _ X _ Forwarded _ For;proxy _ http _ version 1.1proxy _ set _ header Upgrade $ http _ Upgrade;proxy_set_header连接$ connection _ upgradeproxy _ redirect offproxy _ set _ header X-Real-IP $ remote _ addr;proxy _ pass http://register;proxy _ read _ timeout 900s} error _ page 500 502 503 504/50x . html;}Docker主机访问镜像存储库

如果没有启用SSL加密,可以通过上一章的方法将可信地址添加到Docker的配置文件中,并重新启动Docker。

使用SSL加密后,程序需要访问,所以不能使用修改配置访问。具体方法如下:

$ OpenSSL s _ client-showcerts-connect您的域名或主机IP:443 & lt;/dev/null 2 & gt;/dev/null | OpenSSL x509-out form PEM & gt;ca . CRT $ catca . CRT | sudo tee-a/etc/SSL/certs/ca-certificates . CRT $ system CTL重启docker使用docker登录你的域名或hostip进行测试,用户名和密码按照上面Nexus中生成的那样填写。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/106510.html

发表回复

登录后才能评论