第三章:Docker搭建私服-本地镜像库

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 第三章:Docker搭建私服-本地镜像库

搭建场景:


项目场景:首先需要二台机器,一个是客户端,用来部署项目运行的机器;一个是私服,用来部署本地镜像仓库的,这二台机器都要安装配置好docker。


机器配置:


这里我买了一台阿里云的G5服务器作为私服,配置如下: 2核心8G内存80G云盘1M宽带 用来专门搭建gitlab,jenkins,以及docker私服绰绰有余

另外一台客户端也是阿里云的轻量应用服务器,配置如下: 1核心2G内存40G云盘1M宽带 用来部署测试项目


搭建流程:


二台机器都更换镜像源(因为默认的太慢了,国内的更快,网易的)


sudo vim /etc/default/docker


输入以下参数:

DOCKER_OPTS="--registry-mirror=http://hub-mirror.c.163.com"


在阿里云G5私服上拉取仓库


docker pull registry


然后查看镜像


sudo docker images


启动该容器


创建目录,这里以/opt/data/registry为宿主机存储的目录


mkdir -p /opt/data/registry


运行镜像,配置端口以及将容器内的数据映射挂载在自己指定的目录上


docker run -d -v /opt/data/registry:/var/lib/registry -p 5000:5000 --restart=always --privileged=true --name private_registry registry:latest


参数说明:


-d : 让容器可以后台运行

-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;

-v:把宿主机的opt/data/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;

-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了(前者是宿主机的端口号,后者是容器的端口号);

–restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;

–name private_registry:创建容器命名为private_registry,你可以随便命名;

registry:latest:这个是刚才pull下来的镜像;

如果成功执行,则表示我们的docker私有仓库搭建成功。

下面对这条命令的部分内容做下说明。

/registry表示宿主机目录,该目录如果不存在会自动创建。

docker -v 宿主机目录:容器目录


查看是否启动成功


sudo docker ps


这个时候镜像运行成功说明本地的镜像仓库就已经弄好了,是不是很快,别急,还要把自个的项目弄到本地镜像仓库上面去,到时候就可以直接通过命令拉取本地镜像仓库运行项目了,下面我以tomcat作为我们实际运行的项目为例。


在客户端制作tomcat镜像


docker pull tomcat


这个时候,如果已经成功拉取tomcat之后,后面需要把我们客户端的tomcat推送到我们的私服上面去,到时候我们就可以直接通过私服拉取,而不是官方的docker hub,官方的私库需要自己去注册账号并且登录上去做操作,我们这里主要讲本地镜像仓库。那有同学可能会问了,服务器掉一个东西,肯定是需要登录或者给个什么密钥才能允许操作的呀,这就是后面我们要配置的东西了,docker私有仓库服务器,默认是基于https传输的,所以我们需要在客户端做相关设置,不使用https传输。


修改/etc/docker/daemon.json文件


vi /etc/docker/daemon.json


将私服的ip替换进去

{
        "registry-mirrors": ["https://njrds9qc.mirror.aliyuncs.com"],
        "insecure-registries":["你私服本地镜像仓库的ip:5000"]
}


重置配置

systemctl daemon-reload


重启docker

systemctl restart docker


制作属于自个的tomcat镜像


查看tomcat镜像id


docker images


e9561b3b607f4b81b8768b78d5b15c47.png


开始制作:docker tag tomcat镜像id 私服本地镜像仓库的ip:5000/tomcat


#我的镜像id是b0e0b0a92cf9,ip我就不暴露了
docker tag b0e0b0a92cf9 私服ip:5000/tomcat


推送到私服本地镜像仓库上


docker push 私服ip:5000/tomcat


客户端(轻量)和服务器(G5)上分别执行curl -X GET http://私服ip:5000/v2/_catalog,查看私有仓库的镜像信息,都能见到相同的信息


curl -X GET http://私服ip:5000/v2/_catalog


{“repositories”:[“tomcat”]}


验证


在轻量服务器上删除tomcat镜像


docker rmi 私服ip:5000/tomcat tomcat


创建一个容器,映射8080端口


docker run --name tomcat001 -p 8080:8080 -idt 私服ip:5000/tomcat


使用轻量服务器的ip加端口访问8080,正常可以是不是会出现以下的页面


99a409de4d5f45ce9aa83cfcc833a8d9.png


由于我们是一个新的服务器,所以出现了linux中docker安装tomcat,linux中tomcat访问404问题的情况


通过日志排查

dockerlogs -f mytomcat --tail=500


通过端口排查

docker port tomcat


进入docker运行的tomcat目录中

docker exec -it tomcat运行的id /bin/bash


通过命令

ls -l


发现有一个webapps目录和webapps.dist目录

进入webapps目录并ls -l发现为空

进入webapps.dist目录发现root文件夹

接下来,删除webapps目录,更改webapps.dist目录名为webapps

rm -rf webapps
mv webapps.dist webapps


发现还是404,后面想起还有jdk没有安装

docker pull jdk


340866b45b3143a4816e5d76fa631ff6.png


出现:Error response from daemon: pull access denied for jdk, repository does not exist or may require ‘docker login’: denied: requested access to the resource is denied

需要登录docker,这个其实也不用管了,因为已经出现tomcat欢迎页面了。

当然也可以继续登录进行,命令如下:

docker login


[root@ip ~]# docker login Login with your Docker ID to push and pull

images from Docker Hub. If you don’t have a Docker ID, head over to

https://hub.docker.com to create one. Username: 你docker登录名 Password:

你docker登录密码 WARNING! Your password will be stored unencrypted in

/root/.docker/config.json. Configure a credential helper to remove

this warning. See

https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded


总结:


博文介绍了Docker搭建私服-本地镜像库的具体实现,以tomcat为例演示,帮助大家快速理解上手。

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
18天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
88 0
|
18天前
|
存储 安全 持续交付
【Docker 专栏】Docker 镜像的版本控制与管理
【5月更文挑战第9天】本文探讨了Docker镜像版本控制与管理的重要性,包括可重复性、回滚能力、协作开发和持续集成。常用方法有标签、构建参数和版本控制系统。管理策略涉及定期清理、分层管理和镜像仓库。语义化标签、环境变量和配置文件在版本控制中有应用。版本系统与Docker结合能跟踪历史和促进协作。注意点包括优化镜像大小、确保安全性和兼容性。案例分析和未来趋势展示了持续发展的镜像管理技术,为Docker应用的稳定与进步保驾护航。
【Docker 专栏】Docker 镜像的版本控制与管理
|
2天前
|
关系型数据库 MySQL 应用服务中间件
Docker 镜像的创建(二)
Docker 镜像的创建(二)
|
2天前
|
缓存 Linux Apache
Docker 镜像的创建(一)
Docker 镜像的创建(一)
|
4天前
|
Docker 容器
mac构建Docker镜像报错failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpec
mac构建Docker镜像报错failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpec
5 0
|
10天前
|
缓存 Linux 开发工具
Ubantu docker学习笔记(二)拉取构建,属于你的镜像
Ubantu docker学习笔记(二)拉取构建,属于你的镜像
|
11天前
|
Java Maven Docker
Docker化Spring Boot3应用:从镜像构建到部署
本文介绍了如何在Linux上通过命令行构建和运行Spring Boot 3服务的Docker镜像。首先,基于Ubuntu创建包含JDK 21的基础镜像,然后使用Maven打包Spring Boot应用。接着,构建服务镜像,将应用和依赖添加到镜像中,并设置工作目录和暴露端口。最后,利用docker-compose部署服务,挂载宿主机目录以方便更新静态文件。Docker简化了应用部署,确保了不同环境的一致性。
64 2
Docker化Spring Boot3应用:从镜像构建到部署
|
16天前
|
存储 Linux Docker
CentOS7修改Docker容器和镜像默认存储位置
CentOS7修改Docker容器和镜像默认存储位置
|
18天前
|
存储 安全 开发者
如何删除 Docker 镜像、容器和卷?
【5月更文挑战第11天】
58 2
如何删除 Docker 镜像、容器和卷?
|
18天前
|
运维 安全 Docker
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
【5月更文挑战第9天】Docker技术在软件开发和部署中带来便利,但其镜像安全问题不容忽视。本文探讨了Docker镜像安全扫描与漏洞修复,强调了镜像安全对应用和系统的重要性。文中介绍了静态和动态扫描方法,列举了软件漏洞、配置漏洞和恶意软件等常见安全问题,并提到了Clair和Trivy等扫描工具。修复策略包括更新软件、调整配置和重建镜像。此外,加强安全意识、规范镜像制作流程和定期扫描是管理建议。未来,将持续面对新的安全挑战,需持续研究和完善安全技术。
【Docker 专栏】Docker 镜像安全扫描与漏洞修复