Fork me on GitHub

一起学 Docker(五)-- 仓库

1.Docker Hub

仓库是集中存放镜像的地方。

目前 Docker 官方仓库维护了一个公共仓库https://hub.docker.com,其中已经包括 15000 多个的镜像。

大部分需求都可以通过在 Docker Hub 中直接下来镜像来实现。

登录

可以通过执行 docker login 命令来输入用户名、密码和邮箱来完成注册登录。

基本操作

用户无需登录可以通过 docker search 命令来查找官方仓库中的镜像,并利用 docker pull 下载到本地,可以通过 docker push 命令将本地镜像推送到 docker hub。

先 tag 一下复制一个镜像,然后把镜像 push 到服务器上

2. 创建和使用私有仓库

使用 registry 镜像创建私有仓库

可以通过 docker 官方提供的 registry 镜像来搭建一套本地私有仓库。

镜像地址:https://hub.docker.com/_/registry/

命令:

docker run -e SEARCH_BACKEND=sqlalchemy -e SQLALCHEMY_INDEX_DATABASE=sqlite:////tmp/docker-registry.db -d --name registry -p 5000:5000 registry

-e 设定环境变量

-d 从后台启动的方式镜像启动

-name 启动的容器起个名字

-p 暴露端口,容器内部的 5000 绑定到宿主机的 5000 端口上。

registry 镜像本身

SEARCH_BACKEND=sqlalchemy 默认索引是可以查询的

参考地址:

https://github.com/docker/docker-registry#search-engine-options

https://hub.docker.com/_/registry/

自动下载并启动一个 registry 容器,创建本地的私有仓库服务。

默认仓库创建在 /tmp/registry 目录下。

上传到本地的私有仓库中,

报错了:http:server gave HTTP response to HTTPS client 后面会告诉你如何解决往下看。

docker 启动参数配置:

环境:centos7 解决上边的问题

配置文件:/lib/systemd/system/docker.service

修改成:

#ExecStart=/usr/bin/dockerd

ExecStart=/usr/bin/dockerd-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry192.168.100.146:5000

(此处默认 2375 为主管理端口,unix:///var/run/docker.sock 用于本地管理,7654 是备用的端口)

重启服务,在启动一个私有仓库的容器,然后 push 到私有仓库中

参考地址:https://docs.docker.com/engine/admin/configuring/

3. 仓库加速服务

加速下载官方镜像。

推荐服务:https://dashboard.daocloud.io/

点击加速器:https://dashboard.daocloud.io/mirror

配置 Docker 加速器:

下载第三方官方仓库。

4. 仓库 web 管理工具 DockerUI

Docker 提供一个平台来把应用程序当作容器来打包、分发、共享和运行,它已经通过节省工作时间来拯救了成千上万的系统管理员和开发人员。Docker 不用关注主机上运行的操作系统是什么,它没有开发语言、框架或打包系统的限制,并且可以在任何时间、任何地点运行,从小型计算机到高端服务器都可以。
由于运行 Docker 容器和管理它们可能会花费一点点努力和时间,因为基于 web 的应用程序-DockerUI 应运而生,它可以让管理和运行容器变得很简单。

DockerUI 是一个开源的基于 Docker API 的 web 应用程序,提供等同 Docker 命令行的大部分功能,支持 container 管理,image 管理。它最值得称道的是它华丽的设计和用来运行和管理 docker 的简洁的操作界面。

DockerUI 优点:

1)支持 container 批量操作;

2)支持 image 管理(虽然比较薄弱)

DockerUI 缺点:

不支持多主机。

下面记录在 DockerUI 管理环境的部署过程:

1)首先拉去 dockerUI 镜像,现在 dockerUI 镜像位置变了,如下:

[root@localhost ~]# docker pull uifd/ui-for-docker  // 之前镜像位置为 dockerui/dockerui
Using default tag: latest
latest: Pulling from uifd/ui-for-docker
841194d080c8: Pull complete 
Digest: sha256:3f015313831d8b777760ea5b17a92d9372c1ef450bff9df5bd5f9fca56718215
Status: Downloaded newer image for uifd/ui-for-docker:latest
[root@localhost ~]# docker images
REPOSITORY  TAG IMAGE IDCREATED SIZE
nginx   latest  be1f31be9a875 days ago  109MB
registrylatest  2e2f252f3c883 weeks ago 33.3MB
hello-world latest  4ab4c602aa5e4 weeks ago 1.84kB
yhaing/hello-world  latest  4ab4c602aa5e4 weeks ago 1.84kB
192.168.56.47:5000/yh/ubuntu_test   latest  cd6d8154f1e14 weeks ago 84.1MB
ubuntu  latest  cd6d8154f1e14 weeks ago 84.1MB
uifd/ui-for-docker  latest  965940f98fa52 years ago 8.1MB

2)启动 DockerUI 容器。
如果服务器开启了 Selinux,那么就得使用–privileged 标志。这里我在本机关闭了 Selinux,所以不用添加–privileged

[root@localhost ~]# docker run -it -d --name registry_ui -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock uifd/ui-for-docker

[root@localhost ~]# docker ps
CONTAINER IDIMAGE  COMMAND CREATED STATUS  PORTSNAMES
c078f0f41285docker.io/uifd/ui-for-docker   "/ui-for-docker"4 seconds ago   Up 2 seconds0.0.0.0:9000->9000/tcp   docker-web

[root@localhost ~]# vim /etc/sysconfig/iptables
......
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9000 -j ACCEPT

[root@localhost ~]# systemctl restart iptables.service

接着就可以在浏览器访问 DockerUI 管理界面了。启动了 DockerUI 容器之后,就可以用它来执行启动、暂停、终止、删除以及 DockerUI 提供的其它操作 Docker 容器的命令。在浏览器里面输入 http://ip-address:9000,默认情况下登录不需要认证,但是可以配置我们的 web 服务器来要求登录认证。

DockerUI 的管理:

1)Dashboard 控制台 。点击Running Containers 下面活跃的容器,进入容器的管理界面进行相关操作,比如修改容器名,commit 提交容器为新的镜像等。

2)container 容器管理。点击Display All ,可以显示所有创建了的容器,包括没有启动的。然后点击 Action,可以对容器进行启动,关闭,重启,删除,挂起等操作。

3)images 镜像管理。点击Action,可以对已有的镜像镜像移除操作。点击Pull,可以拉取镜像。点击镜像 ID 进去后可以添加或移除镜像 tag

如下截图,Pull 镜像的时候,Registry 为空,默认从 docker hub 上拉取镜像。

点击镜像 ID 进入,可以添加或删除镜像 tag 标识。

*当你发现自己的才华撑不起野心时,就请安静下来学习吧*

赞赏是最好的支持与鼓励!
-------------本文结束感谢您的阅读-------------