当前位置: 首页 > news >正文

容器之王--Docker镜像的管理及镜像仓库的构建演练

3.docker镜像构建

3.1 docker镜像结构

image-20250804195238614

  • 共享宿主机的kernel
  • base镜像提供的是最小的Linux发行版
  • 同一docker主机支持运行多种Linux发行版
  • 采用分层结构的最大好处是:共享资源

3.2 镜像运行的基本原理

image-20250804195249916
  • Copy-on-Write 可写容器层
  • 容器层以下所有镜像层都是只读的
  • docker从上往下依次查找文件
  • 容器层保存镜像变化的部分,并不会对镜像本身进行任何修改
  • 一个镜像最多127层

3.3 镜像获得方式

  • 基本镜像通常由软件官方提供

  • 企业镜像可以用官方镜像+Dockerfile来生成

  • 系统关于镜像的获取动作有两种:

    • docker pull 镜像地址

    • docker load –i 本地镜像包

3.4 镜像构建

3.4.1 构建参数
FROM指定base镜像 eg:FROM busybox:version
COPY复制文件 eg:COPY file /file 或者 COPY [“file”,”/”]
MAINTAINER指定作者信息,比如邮箱 eg:MAINTAINER user@example.com
在最新版的docker中用LABEL KEY="VALUE"代替
ADD功能和copy相似,指定压缩文件或url eg: ADD test.tar /mnt 或者 eg:ADD http://ip/test.tar /mnt
ENV指定环境变量 eg:ENV FILENAME test
EXPOSE暴漏容器端口 eg:EXPOSE 80
VOLUME申明数据卷,通常指数据挂载点 eg:VOLUME [“/var/www/html”]
WORKDIR切换路径 eg:WORKDIR /mnt
RUN在容器中运行的指令 eg: touch file
CMD在启动容器时自动运行动作可以被覆盖 eg:CMD echo $FILENAME 会调用shell解析 eg:CMD [“/bin/sh”,”-c”,“echo $FILENAME”] 不调用shell解析
ENTRYPOINT和CMD功能和用法类似,但动作不可被覆盖
3.4.1.1 参数示例及用法
# FROM COPY 和 MAINTAINER
[root@Docker-node1 ~]# mkdir  docker/
[root@Docker-node1 ~]# cd docker/
[root@Docker-node1 docker]# touch leefile
[root@Docker-node1 docker]# vim Dockerfile 
FROM busybox:latest				# 指定使用的基础镜像
COPY leefile /					# 复制当前目录文件到容器指定位置,leefile必须在当前目录中[root@Docker-node1 docker]# docker build -t example:v1 .	#构建镜像#ADD
[root@Docker-node1 docker]# touch leefile{1..3}
[root@Docker-node1 docker]# tar zcf leefile.gz leefile*
[root@Docker-node1 docker]# vim Dockerfile
FROM busybox
MAINTAINER lee@timinglee.org
COPY leefile /
ADD leefile.gz /[root@Docker-node1 docker]# docker build -t example:v2 .
[root@Docker-node1 docker]# docker run -it --rm --name test example:v2
/ # ls
bin       etc       leefile   leefile2  lib       proc      sys       usr
dev       home      leefile1  leefile3  lib64     root      tmp       var#ENV CMD
FROM busybox
MAINTAINER lee@timinglee.org
ENV NAME lee
CMD echo $NAME
#CMD ["/bin/echo", "$NAME"]
#CMD ["/bin/sh", "-c", "/bin/echo $NAME"]
[root@Docker-node1 docker]# docker run -it --rm --name test example:v3
leeFROM busybox
MAINTAINER lee@timinglee.org
ENV NAME lee
#CMD echo $NAME
CMD ["/bin/echo", "$NAME"]
#CMD ["/bin/sh", "-c", "/bin/echo $NAME"]
[root@Docker-node1 docker]# docker run -it --rm --name test example:v3
$NAME#ENV CMD
FROM busybox
MAINTAINER lee@timinglee.org
ENV NAME lee
#CMD echo $NAME
#CMD ["/bin/echo", "$NAME"]
CMD ["/bin/sh", "-c", "/bin/echo $NAME"]
[root@Docker-node1 docker]# docker run -it --rm --name test example:v3
lee#ENTRYPOINT
FROM busybox
MAINTAINER lee@timinglee.org
ENV NAME lee
ENTRYPOINT echo $NAME
[root@Docker-node1 docker]# docker run -it --rm --name test example:v3  sh
lee#EXPOSE VOLUME VOLUME
FROM busybox
MAINTAINER lee@timinglee.org
ENV NAME lee
EXPOSE 80 443
VOLUME /var/www/html
WORKDIR /var/www/html
RUN touch leefile[root@Docker-node1 docker]# docker build -t example:v4 .
[root@Docker-node1 docker]# docker run -it --rm --name test example:v4
/var/www/html #
3.4.2 Dockerfile实例
3.4.2.1 建立构建目录,编写构建文件
# 以下是对于centos:7的更新了我们自己的版本(也就是yum仓库的配置,commit了一个配置了阿里云仓库的镜像)
[root@docker-node1 docker]# docker images[root@docker-node1 docker]# docker run -it --name centos centos:7[root@7349c08b4034 /]# rm -rf /etc/yum.repos.d/*
[root@7349c08b4034 /]# vi /etc/yum.repos.d/rhel7.repo
[rhel7]
name = rhel7
baseurl = https://mirrors.aliyun.com/centos/7/os/x86_64/
gpgcheck = 0[root@7349c08b4034 yum.repos.d]# yum makecache[root@docker-node1 ~]# docker commit -m "add repo" centos  centos:repo[root@docker-node1 ~]# docker images[root@docker-node1 ~]#mdkir docker
[root@docker-node1 ~]# cd docker/
[root@docker-node1 docker]# cp  ~/nginx-1.26.1.tar.gz  .
[root@docker-node1 docker]# vim Dockerfile
FROM    centos:repo
ADD     nginx-1.26.1.tar.gz /mnt
RUN     yum install -y gcc make pcre-devel openssl-devel
WORKDIR /mnt/nginx-1.26.1
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN     ./configure --with-http_ssl_module --with-http_stub_status_module
RUN     make && make install
VOLUME  ["/usr/local/nginx/html"]
RUN echo ceshi > /usr/local/nginx/html/index.html
EXPOSE  80
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
3.4.2.2 通过dockerfile生成镜像
[root@docker-node1 docker]# docker build -t nginx:dhj .
image-20250805185635010
3.4.2.3 测试镜像可用性
[root@docker-node1 docker]# docker images
nginx             dhj       7ef2b313b365   2 minutes ago   469MB[root@server1 docker]# docker history  nginx:dhj
[root@docker-node1 docker]# docker run -d --name ceshi nginx:dhj
image-20250805190017415
3.4.2.4 查看容器详情
[root@docker-node1 docker]# docker inspect ceshi

3.5 镜像优化方案

3.5.1 镜像优化策略
  • 选择最精简的基础镜像
  • 减少镜像的层数
  • 清理镜像构建的中间产物
3.5.2 镜像优化示例
3.5.2.1 方法1:缩减镜像层
[root@server1 docker]# vim Dockerfile
FROM centos:7 AS build
ADD nginx-1.23.3.tar.gz /mnt
WORKDIR /mnt/nginx-1.23.3
RUN yum install -y gcc make pcre-devel openssl-devel && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --with-http_ssl_module --with-http_stub_status_module && make && make install && cd .. && rm -fr nginx-1.23.3 && yum clean all
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"][root@server1 docker]# docker build -t webserver:v2 .[root@server1 docker]# docker images  webserver
REPOSITORY   TAG       IMAGE ID       CREATED             SIZE
webserver    v2        caf0f80f2332   4 seconds ago       317MB
webserver    v1        bfd6774cc216   About an hour ago   494MB
3.5.2.2 方法2:阶段构建
[root@server1 docker]# vim Dockerfile
FROM centos:7 AS build
ADD nginx-1.23.3.tar.gz /mnt
WORKDIR /mnt/nginx-1.23.3
RUN yum install -y gcc make pcre-devel openssl-devel && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --with-http_ssl_module --with-http_stub_status_module && make && make install && cd .. && rm -fr nginx-1.23.3 && yum clean allFROM centos:7
COPY --from=build /usr/local/nginx /usr/local/nginx
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"][root@server1 docker]# docker build -t webserver:v3 .[root@server1 docker]# docker images  webserver
REPOSITORY   TAG       IMAGE ID       CREATED             SIZE
webserver    v3        1ac964f2cefe   29 seconds ago      205MB
webserver    v2        caf0f80f2332   3 minutes ago       317MB
webserver    v1        bfd6774cc216   About an hour ago   494MB
3.5.2.3 方法3:使用最精简镜像

使用google提供的最精简镜像

下载地址:

https://github.com/GoogleContainerTools/distroless

下载镜像:

docker pull gcr.io/distroless/base

利用最精简镜像构建

[root@docker-node1 ~]# cd /mnt
[root@docker-node1 mnt]# cd packages/[root@docker-node1 packages]# docker load -i debian11.tar.gz
[root@docker-node1 packages]# docker load -i nginx-1.23.tar.gz
[root@server1 ~]# mkdir new
[root@server1 ~]# cd new/
[root@server1 new]# vim Dockerfile
FROM nginx:1.23 AS baseRUN mkdir -p /opt/var/cache/nginx && \cp -a --parents /usr/lib/nginx /opt && \cp -a --parents /usr/share/nginx /opt && \cp -a --parents /var/log/nginx /opt && \cp -aL --parents /var/run /opt && \cp -a --parents /etc/nginx /opt && \cp -a --parents /etc/passwd /opt && \cp -a --parents /etc/group /opt && \cp -a --parents /usr/sbin/nginx /opt && \cp -a --parents /usr/sbin/nginx-debug /opt && \cp -a --parents /lib/x86_64-linux-gnu/ld-* /opt && \cp -a --parents /usr/lib/x86_64-linux-gnu/libpcre* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libc* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libdl* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libpthread* /opt && \cp -a --parents /lib/x86_64-linux-gnu/libcrypt* /opt && \cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /optFROM gcr.io/distroless/base-debian11
COPY --from=base /opt /
EXPOSE 80 443
ENTRYPOINT ["nginx", "-g", "daemon off;"][root@docker-node1 docker]# docker build -t nginx:min .[root@docker-node1 docker]# docker images
nginx                             min       81e58ea79685   8 seconds ago   34.5MB
gcr.io/distroless/base-debian11   latest    2a6de77407bf   N/A             20.6MB[root@docker-node1 ~]# docker run -d -p 80:80 --name ceshi  nginx:min
b75b186f48b2c8d5619dacfe215f74c6fab9b14faf53d037858da3206f80f954[root@docker-node1 ~]# curl 172.25.254.10:80
image-20250807101555657

4.docker 镜像仓库的管理

4.1 什么是docker仓库

image-20250804195310374

Docker 仓库(Docker Registry) 是用于存储和分发 Docker 镜像的集中式存储库。

它就像是一个大型的镜像仓库,开发者可以将自己创建的 Docker 镜像推送到仓库中,也可以从仓库中拉取所需的镜像。

Docker 仓库可以分为公共仓库和私有仓库:

  • 公共仓库,如 Docker Hub,任何人都可以访问和使用其中的镜像。许多常用的软件和应用都有在 Docker Hub 上提供的镜像,方便用户直接获取和使用。
    • 例如,您想要部署一个 Nginx 服务器,就可以从 Docker Hub 上拉取 Nginx 的镜像。
  • 私有仓库则是由组织或个人自己搭建和管理的,用于存储内部使用的、不希望公开的镜像。
    • 比如,一家企业为其特定的业务应用创建了定制化的镜像,并将其存储在自己的私有仓库中,以保证安全性和控制访问权限。

通过 Docker 仓库,开发者能够方便地共享和复用镜像,加速应用的开发和部署过程。

4.2 docker hub

image-20250804195322515

官网:https://hub.docker.com/

image-20250804195403221

Docker Hub 是 Docker 官方提供的一个公共的镜像仓库服务。

它是 Docker 生态系统中最知名和广泛使用的镜像仓库之一,拥有大量的官方和社区贡献的镜像。

以下是 Docker Hub 的一些关键特点和优势:

  1. 丰富的镜像资源:涵盖了各种常见的操作系统、编程语言运行时、数据库、Web 服务器等众多应用的镜像。
    • 例如,您可以轻松找到 Ubuntu、CentOS 等操作系统的镜像,以及 MySQL、Redis 等数据库的镜像。
  2. 官方支持:提供了由 Docker 官方维护的一些重要镜像,确保其质量和安全性。
  3. 社区贡献:开发者们可以自由上传和分享他们创建的镜像,促进了知识和资源的共享。
  4. 版本管理:对于每个镜像,通常都有多个版本可供选择,方便用户根据需求获取特定版本。
  5. 便于搜索:用户可以通过关键词轻松搜索到所需的镜像。
4.2.1 docker hub的使用方法
#登陆官方仓库
[root@docker ~]# docker login
Log in with your Docker ID or email address 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.
You can log in with your password or a Personal Access Token (PAT). Using a limited-scope PAT grants better security and is required for organizations using SSO. Learn more at https://docs.docker.com/go/access-tokens/Username: timinglee
Password:
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/#credential-storesLogin Succeeded#登陆信息保存位置
[root@docker ~]# cd .docker/
[root@docker .docker]# ls
config.json
[root@docker .docker]# cat config.json
{"auths": {"https://index.docker.io/v1/": {"auth": "dGltaW5nbGVlOjY3NTE1MTVtaW5nemxu"}}[root@docker ~]# docker tag gcr.io/distroless/base-debian11:latest  timinglee/base-debian11:latest
[root@docker ~]# docker push  timinglee/base-debian11:latest
The push refers to repository [docker.io/timinglee/base-debian11]
6835249f577a: Pushed
24aacbf97031: Pushed
8451c71f8c1e: Pushed
2388d21e8e2b: Pushed
c048279a7d9f: Pushed
1a73b54f556b: Pushed
2a92d6ac9e4f: Pushed
bbb6cacb8c82: Pushed
ac805962e479: Pushed
af5aa97ebe6c: Pushed
4d049f83d9cf: Pushed
9ed498e122b2: Pushed
577c8ee06f39: Pushed
5342a2647e87: Pushed
latest: digest: sha256:f8179c20f1f2b1168665003412197549bd4faab5ccc1b140c666f9b8aa958042 size: 3234
image-20250804195438185

4.3 docker仓库的工作原理

仓库中的三个角色

index docker索引服务,负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。

registry docker仓库,是镜像和图表的仓库,它不具有本地数据库以及不提供用户认证,通过Index Auth service的Token的方式进行认证

Registry Client Docker充当registry客户端来维护推送和拉取,以及客户端的授权。

4.3.1 pull原理

镜像拉取分为以下几步:

1.docker客户端向index发送镜像拉去请求并完成与index的认证

2.index发送认证token和镜像位置给dockerclient

3.dockerclient携带token和根据index指引的镜像位置取连接registry

4.Registry会根据client持有的token跟index核实身份合法性

5.index确认此token合法性

6.Registry会根据client的请求传递镜像到客户端

4.3.2 push原理
image-20250804195521687

镜像上传的步骤:

1.client向index发送上传请求并完成用户认证

2.index会发方token给client来证明client的合法性

3.client携带index提供的token连接Registry

4.Registry向index合适token的合法性

5.index证实token的合法性

6.Registry开始接收客户端上传过来的镜像

4.3 搭建docker的私有仓库

4.3.1 为什么搭建私有仓库

docker hub虽然方便,但是还是有限制

  • 需要internet连接,速度慢
  • 所有人都可以访问
  • 由于安全原因企业不允许将镜像放到外网

好消息是docker公司已经将registry开源,我们可以快速构建企业私有仓库

地址: https://docs.docker.com/registry/deploying/

4.3.2 搭建简单的Registry仓库
4.3.2.1 下载Registry镜像
[root@docker ~]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
930bdd4d222e: Pull complete
a15309931e05: Pull complete
6263fb9c821f: Pull complete
86c1d3af3872: Pull complete
a37b1bf6a96f: Pull complete
Digest: sha256:12120425f07de11a1b899e418d4b0ea174c8d4d572d45bdb640f93bc7ca06a3d
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest# 也可以使用我们的
[root@docker-node1 mnt]# cd packages/
[root@docker-node1 packages]# docker load -i registry.tag.gz
4.3.2.2 开启Registry
[root@docker ~]# docker run  -d -p 5000:5000 --restart=always --name registry registry:latest[root@docker ~]# docker ps
4.3.2.3 上传镜像到仓库中
# 给要上传的镜像打标签
[root@docker ~]# docker tag busybox:latest  172.25.254.10:5000/busybox:latest#docker在上传的过程中默认使用https,但是我们并没有建立https认证需要的认证文件所以会报错
[root@docker ~]# docker push 172.25.254.100:5000/busybox:latest
The push refers to repository [172.25.254.100:5000/busybox]
Get "https://172.25.254.100:5000/v2/": dial tcp 172.25.254.100:5000: connect: connection refused#配置非加密端口
[root@docker ~]# vim /etc/docker/daemon.json
{"insecure-registries" : ["http://172.25.254.10:5000"]
}[root@docker ~]# systemctl restart docker#上传镜像
[root@docker ~]# docker push  172.25.254.10:5000/busybox:latest
The push refers to repository [172.25.254.100:5000/busybox]
d51af96cf93e: Pushed
latest: digest: sha256:28e01ab32c9dbcbaae96cf0d5b472f22e231d9e603811857b295e61197e40a9b size: 527#查看镜像上传
[root@docker ~]# curl 172.25.254.10:5000/v2/_catalog
{"repositories":["busybox"]}
4.3.3 为Registry提供加密传输
[root@docker-node1 ~]# docker ps
[root@docker-node1 ~]# docker rm -f registry[root@docker-node1 ~]# rm -rf /etc/docker/daemon.json
# 创建了证书与密钥
[root@docker-node1 ~]# mkdir -p /data/certs
[root@docker-node1 ~]# openssl req -newkey  rsa:4096 \
-nodes -sha256 -keyout /data/certs/dhj.org.key \
-addext "subjectAltName = DNS:reg.dhj.org" \
-x509 -days 365 -out /data/certs/dhj.org.crtCommon Name (eg, your name or your server's hostname) []:reg.dhj.org		# 指定备用名称(在此必须为上面DNS处的信息)
# 启动registry仓库
[root@docker-node1 ~]# docker run -d -p 443:443 --restart=always --name registry \
-v /opt/registry:/var/lib/registry \
-v /data/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/dhj.org.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/dhj.org.key registry

测试:

[root@docker-node1 ~]# docker tag busybox:latest reg.dhj.org/busybox:latest
[root@docker-node1 ~]# docker push reg.dhj.org/busybox:latest				# docker客户端没有key和证书
The push refers to repository [reg.dhj.org/busybox]
Get "https://reg.dhj.org/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority
# 创建证书目录并部署信任证书(使Docker客户端信任私有仓库的HTTPS证书)
[root@docker docker]# mkdir /etc/docker/certs.d/reg.dhj.org/ -p
[root@docker docker]# cp /data/certs/dhj.org.crt  /etc/docker/certs.d/reg.dhj.org/ca.crt
[root@docker docker]# systemctl restart docker
[root@docker-node1 ~]# docker push reg.dhj.org/busybox:latest
The push refers to repository [reg.dhj.org/busybox]
d51af96cf93e: Pushed
latest: digest: sha256:28e01ab32c9dbcbaae96cf0d5b472f22e231d9e603811857b295e61197e40a9b size: 527[root@docker docker]# curl  -k https://reg.dhj.org/v2/_catalog
{"repositories":["busybox"]}
4.3.4 为仓库建立登录认证
# 安装建立认证文件的工具包
[root@docker docker]# dnf install httpd-tools -y# 建立认证文件
[root@docker ~]# mkdir -p /data/auth
[root@docker ~]# htpasswd -Bc /data/auth/htpasswd dhj	 # -B 强制使用最安全加密方式,默认用md5加密
New password:dhj
Re-type new password:dhj
Adding password for user dhj[root@docker-node1 ~]# htpasswd -B /data/auth/htpasswd admin	# 建立第二个用户时不需要-c(如果加的话,则会覆盖前面的用户信息)
New password:admin
Re-type new password:admin
Adding password for user admin# 添加认证到registry容器中	
[root@docker-node1 ~]# docker run -d -p 443:443 --restart=always --name registry \
-v /opt/registry:/var/lib/registry \
-v /data/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/dhj.org.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/dhj.org.key \
-v /data/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry[root@docker-node1 ~]# systemctl restart docker[root@docker-node1 ~]# docker ps[root@docker-node1 ~]# curl -k https://reg.dhj.org/v2/_catalog -u dhj:dhj
{"repositories":["busybox"]}# 登录测试
[root@docker-node1 ~]# docker login reg.dhj.org
image-20250807150933796

当仓库开启认证后必须登陆仓库才能进行镜像上传

# 如果上面测试过之后,需要登出,执行logout命令
[root@docker-node1 ~]# docker logout reg.dhj.org# 未登陆情况下上传镜像
[root@docker-node1 ~]# docker push  reg.dhj.org/busybox
Using default tag: latest
The push refers to repository [reg.dhj.org/busybox]
d51af96cf93e: Preparing
no basic auth credentials# 未登陆情况下也不能下载
[root@docker-node1 ~]# docker pull reg.dhj.org/busybox
Using default tag: latest
Error response from daemon: Head "https://reg.dhj.org/v2/busybox/manifests/latest": no basic auth credentials

4.4 构建企业级私有仓库

image-20250804195543343

下载软件包地址:https://github.com/goharbor/harbor/releases

Harbor 是由vmware公司开源的企业级 Docker Registry 项目。

它提供了以下主要功能和特点:

  1. 基于角色的访问控制(RBAC):可以为不同的用户和用户组分配不同的权限,增强了安全性和管理的灵活性。
  2. 镜像复制:支持在不同的 Harbor 实例之间复制镜像,方便在多个数据中心或环境中分发镜像。
  3. 图形化用户界面(UI):提供了直观的 Web 界面,便于管理镜像仓库、项目、用户等。
  4. 审计日志:记录了对镜像仓库的各种操作,有助于追踪和审查活动。
  5. 垃圾回收:可以清理不再使用的镜像,节省存储空间。
4.4.1 部署harbor
# 如果在测试环境,前期需要做https的加密认证(上面的实验中有所提到)
# 在生产环境中,需要正规的CA认证[root@docker-node1 ~]# cd /mnt/packages/
[root@docker-node1 packages]# ls
[root@docker-node1 packages]# cp -p harbor-offline-installer-v2.5.4.tgz  /root
[root@docker-node1 packages]# cd[root@docker-node1 ~]# tar zxf harbor-offline-installer-v2.5.4.tgz
[root@docker-node1 ~]# cd harbor/
[root@docker-node1 harbor]# ls
[root@docker-node1 harbor]# cp harbor.yml.tmpl harbor.yml
# 需要修改内容如下(如果一致,不变即可):
[root@docker-node1 harbor]# vim harbor.yml5 hostname: reg.dhj.org17   certificate: /data/certs/dhj.org.crt				# 看自己的存放位置18   private_key: /data/certs/dhj.org.key				# 看自己的存放位置34 harbor_admin_password: admin						# 初始密码47 data_volume: /data									# 此处挂载的目录(需要跟上面证书与密钥在一个目录下)[root@docker harbor]# ./install.sh --help
Please set --with-notary 				#证书签名
Please set --with-trivy  				#安全扫描
Please set --with-chartmuseum if needs enable Chartmuseum in Harbor# 先将之前的registry容器删除,要不会影响实验(没有的话则忽略)
[root@docker-node1 harbor]# docker rm -f registry[root@docker harbor]# ./install.sh --with-chartmuseum
image-20250807165158666 image-20250807155047346 image-20250807155555516
# 管理harbor的容器
[root@docker-node1 harbor]# docker compose stop
[root@docker-node1 harbor]# docker compose start
[root@docker harbor]# docker compose  up -d			# 此处的 up -d 功能比start更加强大# 此时去浏览器中去测试172.25.254.10
4.4.2 管理仓库
4.4.2.1 登陆
image-20250807155939043
4.4.2.2 建立仓库项目

image-20250807160002031

image-20250807160024840

4.4.2.3 上传镜像
[root@docker-node1 docker]# cd /etc/docker/
[root@docker-node1 docker]# vim daemon.json
{"registry-mirrors": ["https://reg.dhj.org"]
}
[root@docker-node1 docker]# systemctl restart docker[root@docker-node1 harbor]# docker logout reg.dhj.org[root@docker-node1 harbor]# systemctl restart docker
[root@docker-node1 harbor]# docker compose up -d[root@docker-node1 harbor]# docker login reg.dhj.org
Login Succeeded[root@docker-node1 harbor]# docker tag busybox:latest  reg.dhj.org/ceshi/busybox:latest
[root@docker-node1 harbor]# docker push reg.dhj.org/ceshi/busybox:latest
The push refers to repository [reg.dhj.org/ceshi/busybox]
d51af96cf93e: Pushed
latest: digest: sha256:28e01ab32c9dbcbaae96cf0d5b472f22e231d9e603811857b295e61197e40a9b size: 527[root@docker-node1 harbor]# curl -k https://reg.dhj.org/v2/_catalog
{"errors":[{"code":"UNAUTHORIZED","message":"unauthorized to list catalog: unauthorized to list catalog"}]}
[root@docker-node1 harbor]# curl -k https://reg.dhj.org/v2/_catalog -u admin:admin
{"repositories":["ceshi/busybox"]}
4.4.2.4 查看上传的镜像
image-20250807165959787

image-20250807170006612

http://www.dtcms.com/a/318971.html

相关文章:

  • W25Q64模块
  • 智慧园区系统:打造未来城市生活新体验
  • 从周末去哪儿玩到决策树:机器学习算法的生活启示
  • 机试备考笔记 7/31
  • 【数据结构】排序(sort) -- 交换排序(冒泡快排)
  • 接入免费的数字人API接口详细教程!!!——小甲鱼数字人
  • OpenCV的关于图片的一些运用
  • 一个基于 select 实现的多路复用 TCP 服务器程序:
  • Opencv-管理图片
  • 计算机视觉--opencv(代码详细教程)
  • ansible-playbook之获取服务器IP存储到本地文件
  • Spring事务失效场景?
  • 光纤滑环 – 光纤旋转接头(FORJ)- 杭州驰宏科技
  • 科技云报到:热链路革命:阿卡 CRM 的 GTM 定位突围
  • 芯谷科技--高效噪声降低解决方案压缩扩展器D5015
  • 全球化2.0 | 泰国IT服务商携手云轴科技ZStack重塑云租赁新生态
  • 安全守护,温情陪伴 — 智慧养老产品上新
  • Element Plus实现分页查询
  • 码头岸电系统如何保障供电安全?安科瑞绝缘监测及故障定位方案解析
  • Rust爬虫与代理池技术解析
  • NAS技术在县级融媒体中心的架构设计与安全运维浅析
  • VSCode ssh一直在Setting up SSH Host xxx: Copying VS Code Server to host with scp等待
  • 支付宝小程序商城怎么搭?ZKmall开源商城教你借力蚂蚁生态做增长
  • 【Agent】ReAct:最经典的Agent设计框架
  • 【pytorch(06)】全连接神经网络:基本组件认知,线性层、激活函数、损失函数、优化器
  • Django 表单:深度解析与最佳实践
  • 高性能分布式通信框架:eCAL 介绍与应用
  • 解锁高效开发:AWS 前端 Web 与移动应用解决方案详解
  • 区块链技术原理(2) -数据结构
  • 云平台运维工具 ——AWS 原生工具