部署内网Docker Registry

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

目前docker 已经分为社区版 (docker CE)和 商业版(docker EE),最新的版本由原来的1.13直接跳到了17.06,目前由于17.06的刚刚发布,在使用Docker 的时候可以根据自己的需求选择相应的版本。


安装新版本docker (docker-ce)


以下内容根据 官方文档 修改而来。

如果你之前安装过 docker,请先删掉

sudo yum remove docker docker-common docker-selinux docker-engine

安装一些依赖

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

根据你的发行版下载repo文件: CentOS/RHEL Fedora


wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo

把软件仓库地址替换为 TUNA:

sudo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

最后安装:

sudo yum makecache fast
sudo yum install docker-ce


启动docker:


1
systemctl start docker



Docker 安装(旧版)


先移除其他非官方的版本:

1
2
yum -y remove docker docker-common container-selinux
yum -y remove docker-selinux

添加yum源,这里选择1.13的版本:

1
2
yum  install  -y yum-utils
yum-config-manager --add-repo https: //docs .docker.com /v1 .13 /engine/installation/linux/repo_files/centos/docker .repo

对yum仓库快速缓存:

1
  yum makecache fast

安装docker:

1
yum -y  install  docker-engine-1.13.1

如果对版本有特殊要求,这里可以使用如下命令,列出可选的版本信息,然后指定版本安装:

1
yum list docker-engine.x86_64  --showduplicates | sort  -r

在启动的配置文件中添加国内的镜像仓库:

1
2
3
4
  vim  /usr/lib/systemd/system/docker .service
...
ExecStart= /usr/bin/dockerd  --registry-mirror https: //qxx96o44 .mirror.aliyuncs.com
...

启动docker:

1
systemctl start docker


Docker Registry


我们可以使用docker registry 作为我们的私有镜像仓库,当本地制作好镜像后,可以直接上传到镜像仓库中,方便其他主机拉取镜像。

在生产环境中,官方建议使用权威的CA证书,如果我们可以申请到公共的CA证书,就可以部署我们的共有镜像仓库。

也可以通过创建私有的证书,在需要访问仓库的主机上添加认证即可。

由于目前都是内部使用,加上服务器权限控制非常严格,所以这里直接使用免CA证书的方式(官方强烈不推荐)

修改registry配置为免CA模式,指定Registry服务器的域名或者IP地址,并指定访问端口(端口可任意,和registry容器端口映射上即可)

创建daemon.json:

1
  vim  /etc/docker/daemon .json
1
2
3
{
   "insecure-registries"  : [ "192.168.60.18:5000" ]
}

重启docker 服务:

1
systemctl restart docker

配置用户密码

1
mkdir  auth

下载registry镜像,并配置账户密码:

1
docker run  --entrypoint htpasswd registry -Bbn trying 123123 > auth /htpasswd

这个命令会拉取registry镜像,以htpasswd的方式对密码进行加密,指定用户 trying 和密码123123,并将密码存在指定文件中。

启动容器仓库:

1
2
3
4
docker run -d -p 5000:5000 --restart=always --name registry_docker \
- v  ` pwd ` /auth : /auth  -e  "REGISTRY_AUTH=htpasswd"  \
-e  "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"  \
-e  "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd"  registry:2

指定容器的映射端口,容器启动时应用自动启动,指定一个数据卷,挂载验证文件htpasswd,并指定验证信息。


使用账号登录仓库,输入账号密码:

1
docker login 192.168.60.18:5000

推送本地镜像到仓库:

1
2
docker tag 256ab8c63c04 192.168.60.18:5000/self-registry:v1
docker push 192.168.60.18:5000/self-registry:v1

其他主机下载镜像:

在另外一台需要获取镜像的主机上配置registry为无CA模式:

1
  vim  /etc/docker/daemon .json
1
2
3
{
   "insecure-registries"  : [ "192.168.60.18:5000" ]
}

启动docker, 登录:

1
2
docker login 192.168.60.18:5000
docker pull 192.168.60.18:5000 /self-registry :v1

拉取成功:

1
2
3
# docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
192.168.60.18:5000 /self-registry    v1                  256ab8c63c04        About an hour ago   401 MB

查看仓库镜像:

使用浏览器访问: http://192.168.60.18:5000/v2/_catalog ,输入之前设置的账号密码 trying/123123登录,即可查看到镜像信息

{"repositories":["self-registry"]}

 

补充说明:

1、内网的其他主机如果需要从本地仓库拉取镜像,都需要添加daemon.json的文件。

2、在registry的容器中,我们可以看到挂载的宿主机磁盘信息:

1
2
3
4
5
6
7
8
  # df -h
Filesystem                Size      Used Available Use% Mounted on
overlay                  80.0G      3.3G     76.7G   4% /
/dev/vda1                 80.0G      3.3G     76.7G   4%  /auth
/dev/vda1                 80.0G      3.3G     76.7G   4%  /etc/resolv .conf
/dev/vda1                 80.0G      3.3G     76.7G   4%  /etc/hostname
/dev/vda1                 80.0G      3.3G     76.7G   4%  /etc/hosts
/dev/vda1                 80.0G      3.3G     76.7G   4%  /var/lib/registry

在容器中,镜像的存放位置为/var/lib/registry/docker/registry/v2/repositories/  那么对应的宿主机目录是/var/lib/docker/image/

可以在启动registry时,挂载宿主机上指定的目录到容器的/var/lib/registry上,当容器发生故障后,可以重启一个新的,存储的镜像不会有任何影响。

这里将docker 镜像仓库映射到宿主机的 /data/images目录下:

1
2
3
4
docker run -d -p 5000:5000 --restart=always --name registry1 - v  ` pwd ` /auth : /auth  \
- v  /data/images : /var/lib/registry  -e  "REGISTRY_AUTH=htpasswd"  \
-e  "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"  \
-e  "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd"  registry:2

3、如果我们要改变registry宿主机上的映射端口,所有的主机上的daemon.jason文件都需要修改为对应的端口,并重启docker 服务。




 本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1948328
相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
5天前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
152 91
|
6天前
|
存储 NoSQL Redis
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
|
21天前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
13天前
|
JavaScript 前端开发 Docker
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
72 44
|
1月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
58 23
|
25天前
|
SQL Java Maven
docker部署apollo
docker部署apollo步骤
|
1月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
49 22
|
1月前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
225 93
|
6天前
|
网络协议 API Docker
Docker+consul容器服务的更新与发现
通过本文的介绍,我们详细探讨了如何结合Docker和Consul来实现容器服务的更新与发现。通过Consul的服务注册和发现功能,可以高效地管理和监控容器化服务,确保系统的高可用性和可扩展性。希望本文能帮助您在实际项目中更好地应用Docker和Consul,提高系统的可靠性和管理效率。
41 23
|
6天前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
131 15