培训第三十七天(Dockerfile与registry)

2024-08-28 02:20

本文主要是介绍培训第三十七天(Dockerfile与registry),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、使用Dockerfile创建镜像

Dockerfile文件命令介绍:

FORM 指定基础镜像为该镜像的最后修改版本

FROM < img:tag >指定基础镜像为该镜像的⼀个tag版本

MAINTAINER 指定镜像创建者,企业内部不⽤指定,对外发布也可以不指定

RUN 运⾏命令,安装软件

CMD 设置container启动时进⾏的操作,如果容器镜像中有这 个命名,启动容器时,不要⼿动让容器执⾏其他命令

ENTRYPORINT(⼊⼝点)cmd每次只能执⾏⼀个指令, entrypoint可以多⾏执⾏。

USER设置容器进程的⼀些⽤户

EXPOSE 暴露端⼝ 指定容器需要映射到宿主机的端⼝

ENV设置环境变量 -e

ADD 从宿主机src复制⽂件到容器的dest路径

volumn 指定挂载点

WROKDIR 切换⽬录

ONBUILD在⼦镜像中执⾏指令

1、查看docker的原始overlay2文件

 # 删除原始的docker目录,docker恢复原始状态没有任何镜像和容器[root@docker ~]# rm -rf /var/lib/docker/*# 启动docker,自动生成docker目录[root@docker ~]# systemctl start docker# 查看overlay2目录,该目录下只有两个文件# backingFsBlockDev可能与底层文件系统的块设备相关信息有关# l存放了一些链接文件[root@docker ~]# ls /var/lib/docker/overlay2/backingFsBlockDev  l[root@docker 003]# ls -l /var/lib/docker/overlay2/l总用量 0[root@docker ~]# ls -l /var/lib/docker/overlay2/backingFsBlockDev brw-------. 1 root root 253, 0 8月  27 18:49 /var/lib/docker/overlay2/backingFsBlockDev

2、拉取镜像之后观察overlay2文件的变化

 # 拉取centos的镜像[root@docker ~]# docker pull centos# 1341061cbeb80e7b74279a892f637fc3e2f03222f88a05bc93a7019647f9c927为centos的镜像文件[root@docker ~]# ls /var/lib/docker/overlay2/1341061cbeb80e7b74279a892f637fc3e2f03222f88a05bc93a7019647f9c927  backingFsBlockDev  l[root@docker ~]# ls -l /var/lib/docker/overlay2/l总用量 0lrwxrwxrwx. 1 root root 72 8月  27 18:50 5UARUS4DFDNH37GG65JKMFRO4M -> ../1341061cbeb80e7b74279a892f637fc3e2f03222f88a05bc93a7019647f9c927/diff# 查看镜像[root@docker ~]# docker imagesREPOSITORY   TAG       IMAGE ID       CREATED       SIZEcentos       latest    5d0da3dc9764   2 years ago   231MB

3、使用Dockerfile自动化创建httpd镜像

 # 创建001目录[root@docker ~]# mkdir 001# 切换到001目录中[root@docker ~]# cd 001# 编辑abc.sh脚本文件[root@docker 001]# vim abc.sh#!/bin/bash# 删除有关httpd的所有文件rm -rf /run/httpd/*# “/sbin/httpd”:这是 HTTP 服务器的可执行文件路径# “-D FOREGROUND”:这是传递给 httpd 可执行文件的参数# “-D” 通常用于指定一个服务器特定的指令或选项。# “FOREGROUND” 表示将服务器运行在前台,而不是作为后台进程运行。这样可以在终端窗口中直接看到服务器的输出信息,便于观察服务器的启动过程、运行状态以及可能出现的错误消息exec /sbin/httpd -D FOREGROUND# 编辑首页文件[root@docker 001]# echo "ff" > index.html# 创建Dockerfile文件[root@docker 001]# vim Dockerfile# 基于什么镜像创建本镜像FROM centos:latest# 在基础镜像的基础上创建可写层运⾏RUN的命令,然后继续封装为一个新的镜像。以下的命令都是执行一次创建一次新的镜像。RUN rm -rf /etc/yum.repos.d/*RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repoRUN yum clean all && yum makecacheRUN yum -y install epel-releaseRUN yum -y install httpd# 在最新的镜像的基础上创建可写层将当前目录下的abc.sh文件添加到可写层的/下,然后封装为一个新的镜像。ADD abc.sh /abc.shADD index.html /var/www/html/index.htmlRUN chmod  +x /abc.sh# 设置container启动时进⾏的操作,如果容器镜像中有这个命名,启动容器时,不要⼿动让容器执⾏其他命令CMD ["/bin/bash","/abc.sh"]# 使用build命令进行httpd镜像构建[root@docker 001]# docker build -t centos:httpd .[+] Building 205.2s (14/14) FINISHED # 查看overlay2文件,发现创建了很多中间镜像文件[root@docker 001]# ls /var/lib/docker/overlay2/25dd2217dc1c5af7a64f050bd9fd7b0d4f73fd1146638b68376553ed1871cb92  l8y0ib03cyjk3bikvwj40k7c37                                         laqzfqudwz025q498kfbo901rbackingFsBlockDev                                                 m492nzrx1jlex30ds1l70r48ecwm0hlso2ikxpnnew7h6r3gsk                                         mp1170uu9wy5pnkchxm3bth3kgnntltza2z80epdbv3ih2xga1                                         mrgs02l8tzf0rrmbt2m8fjwpyixnyvcpy4lx99f1y7h8xyz8iu                                         rduyzuv1kxytktqve6jfbodatkubfqbqaklvn332f9ypyp4lvo                                         xtcj5pgcz6s3o4wk466q9t09h# 查看镜像[root@docker 001]# docker imagesREPOSITORY   TAG       IMAGE ID       CREATED              SIZEcentos       httpd     403dce14659e   About a minute ago   338MBcentos       latest    5d0da3dc9764   2 years ago          231MB

4、使用刚才创建的httpd镜像创建一个httpd的容器(不用执行/bin/bash命令)

 # 创建容器之后,容器直接在后台运行,是up状态[root@docker 001]# docker run -d --name c0 centos:httpd5ae9cfa3d3460a737daf4e33860b36edb37e7380e15090faee51a2462cbe3a5c# 查看容器状态[root@docker 001]# docker ps -aCONTAINER ID   IMAGE          COMMAND               CREATED          STATUS         PORTS     NAMES5ae9cfa3d346   centos:httpd   "/bin/bash /abc.sh"   10 seconds ago   Up 9 seconds             c0# 查看overlay2文件[root@docker 001]# ls /var/lib/docker/overlay2/25dd2217dc1c5af7a64f050bd9fd7b0d4f73fd1146638b68376553ed1871cb92       kubfqbqaklvn332f9ypyp4lvo515b357ebc9fdefa191a492824c9a55ca1958d969cd5e36740787ec16859644f       l515b357ebc9fdefa191a492824c9a55ca1958d969cd5e36740787ec16859644f-init  laqzfqudwz025q498kfbo901r8y0ib03cyjk3bikvwj40k7c37                                              m492nzrx1jlex30ds1l70r48ebackingFsBlockDev                                                      mp1170uu9wy5pnkchxm3bth3kcwm0hlso2ikxpnnew7h6r3gsk                                              mrgs02l8tzf0rrmbt2m8fjwpygnntltza2z80epdbv3ih2xga1                                              rduyzuv1kxytktqve6jfbodatixnyvcpy4lx99f1y7h8xyz8iu [root@docker 001]# cd

5、使用Dockerfile自动化创建yum镜像

 [root@docker ~]# cp -r 001 002[root@docker ~]# cd 002[root@docker 002]# lsabc.sh  Dockerfile  index.html[root@docker 002]# rm -rf abc.sh [root@docker 002]# rm -rf index.html[root@docker 002]# vim Dockerfile FROM centos:latestRUN rm -rf /etc/yum.repos.d/*RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repoRUN yum clean all && yum makecacheRUN yum -y install epel-releaseCMD /bin/bash# 完成特别快只用了0.1s,说明该创建的镜像在创建httpd镜像时已经创建过了,现在只是又调用了一下而已[root@docker 002]# docker build -t centos:yum .[+] Building 0.1s (9/9) FINISHED[root@docker 002]# ls /var/lib/docker/overlay2/25dd2217dc1c5af7a64f050bd9fd7b0d4f73fd1146638b68376553ed1871cb92       kubfqbqaklvn332f9ypyp4lvo515b357ebc9fdefa191a492824c9a55ca1958d969cd5e36740787ec16859644f       l515b357ebc9fdefa191a492824c9a55ca1958d969cd5e36740787ec16859644f-init  laqzfqudwz025q498kfbo901r8y0ib03cyjk3bikvwj40k7c37                                              m492nzrx1jlex30ds1l70r48ebackingFsBlockDev                                                      mp1170uu9wy5pnkchxm3bth3kcwm0hlso2ikxpnnew7h6r3gsk                                              mrgs02l8tzf0rrmbt2m8fjwpygnntltza2z80epdbv3ih2xga1                                              rduyzuv1kxytktqve6jfbodatixnyvcpy4lx99f1y7h8xyz8iu                                              xtcj5pgcz6s3o4wk466q9t09h

6、使用Dockerfile自动化创建nginx镜像

 [root@docker ~]# cp -r 002 003[root@docker ~]# cd 003[root@docker 003]# vim Dockerfile# 基于centos:yum镜像FROM centos:yumRUN yum -y install nginx# 在 Nginx 的配置文件/etc/nginx/nginx.conf中添加 “daemon off;” 这一行内容。# 通常情况下,Nginx 在默认配置中是以守护进程(daemon)的方式运行的。添加 “daemon off;” 可以让 Nginx 在前台运行,而不是作为后台守护进程。这在某些特定的场景下可能是有用的,比如在容器环境中,希望 Nginx 直接在前台运行以便更好地观察其运行状态或者与其他进程进行交互。RUN echo "daemon off;" >> /etc/nginx/nginx.conf# 暴露端⼝ 指定容器需要映射到宿主机的端⼝EXPOSE 80CMD /usr/sbin/nginx[root@docker 003]# docker build -t centos:nginx .[+] Building 194.2s (7/7) FINISHED  

7、使用刚才创建的nginx镜像创建一个nginx的容器(不用执行/bin/bash命令)

 [root@docker 003]# docker run -d --name nc centos:nginx 34bf6e6f1ecfcb0e1f717385a3553fe058bab65caa4603280951d98976efebe6[root@docker 003]# docker ps --allCONTAINER ID   IMAGE          COMMAND                   CREATED             STATUS             PORTS                                     NAMES34bf6e6f1ecf   centos:nginx   "/bin/sh -c /usr/sbi…"   8 seconds ago       Up 7 seconds       80/tcp                                    nc

二、搭建私有仓库

1、拉取registry镜像并创建运行容器

容器注册表(Container Registry)

容器注册表是用于存储和分发容器镜像的存储库。它就像一个集中的仓库,开发者可以将自己构建的容器镜像推送到注册表中进行存储,也可以从注册表中拉取所需的镜像来部署应用。

 # 拉取registry[root@docker 003]# docker pull registry# 创建挂载目录[root@docker ~]# mkdir /regist# 启动容器同时映射端口,挂载目录[root@docker ~]# docker run -d --name r2 -v /regist/:/var/lib/registry -p5000:5000 registry:latest# 访问仓库,发现仓库中并没有镜像[root@docker ~]# curl localhost:5000/v2/_catalog{"repositories":[]}# 浏览器访问:10.0.0.100:5000/v2/_catalog

2、修改daemon.json文件,指定私有仓库地址

 # 修改daemon.json文件[root@docker ~]# vim /etc/docker/daemon.json# “insecure_registries”:这个配置项用于指定不安全的容器注册表地址列表。# “http://10.0.0.100:5000”:这是一个具体的容器注册表地址。这里使用的是 HTTP 协议,而不是更安全的HTTPS 协议。{"registry-mirrors" : ["https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"],"host" : ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"],"insecure_registries" : ["hhtp://10.0.0.100:5000"]    }# 重启docker服务[root@docker ~]# systemctl restart docker.service# 启动registry容器[root@docker ~]# docker start r2r2[root@docker ~]# docker ps -aCONTAINER ID   IMAGE             COMMAND                   CREATED          STATUS         PORTS                                       NAMESfa7e9e9adafa   registry:latest   "/entrypoint.sh /etc…"   16 minutes ago   Up 2 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   r2# 访问仓库[root@docker ~]# curl localhost:5000/v2/_catalog{"repositories":[]}

3、为本地镜像打标签,并上传打标签的镜像到私有仓库中

 # 查看tag的使用方式[root@docker ~]# docker tag --helpUsage:  docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]Create a tag TARGET_IMAGE that refers to SOURCE_IMAGEAliases:docker image tag, docker tag# 将centos:yum打上标签,会产生一个有标签的镜像[root@docker ~]# docker tag centos:yum 10.0.0.100:5000/centos:yum# 查看镜像列表[root@docker ~]# docker imagesREPOSITORY               TAG       IMAGE ID       CREATED             SIZE10.0.0.100:5000/centos   yum       3d6ddceabada   About an hour ago   272MBcentos                   yum       3d6ddceabada   About an hour ago   272MB# 将打标签后的镜像推送到私有镜像仓库中[root@docker ~]# docker push 10.0.0.100:5000/centos:yumThe push refers to repository [10.0.0.100:5000/centos]4f03d8e3bd27: Pushed 8ce251db6acd: Pushed d7497f8ce860: Pushed 84f544839c6f: Pushed 74ddd0ec08fa: Pushed yum: digest: sha256:e80a8c39150c1ba15a9cb34d9960a450a26f341f35f943fdac7caa40d39f817a size: 1366# 访问仓库,发现有一个centos的镜像[root@docker ~]# curl localhost:5000/v2/_catalog{"repositories":["centos"]}

4、查看regist文件内容

 [root@docker ~]# ls /regist/docker[root@docker ~]# cd /regist/docker/[root@docker docker]# lsregistry[root@docker docker]# cd registry/[root@docker registry]# lsv2[root@docker registry]# cd v2[root@docker v2]# lsblobs  repositories[root@docker v2]# cd repositories/[root@docker repositories]# lscentos[root@docker repositories]# cd centos/[root@docker centos]# ls_layers  _manifests  _uploads[root@docker centos]# cd _layers/[root@docker _layers]# lssha256[root@docker _layers]# cd sha256/# 发现镜像,并且是一层一层上传的[root@docker sha256]# ls3127685a2e9b21beb8a870ee9575646f1c0d441661874cdcaa01a724218939e23d6ddceabadaa475bb81ca4b5eae508c311f9068a8be6042d72156c4581e9eeca1d0c75327776413fa0db9ed3adcdbadedc95a662eb1d360dad82bb913f8a1d1aa878f71d044e7eb143fd07094be06161a149d682da4aec03095b375af7de50bc35bf6dcc39cf1d32233a720c48ae058ef098f69466706e5e886df747532fcccf53bb2d73e0577b30c56e94b8901c26108dbb5b4a2bb1b4a622c1c41fdf5b489

这篇关于培训第三十七天(Dockerfile与registry)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1113450

相关文章

内卷时代无人机培训机构如何做大做强

在当今社会,随着科技的飞速发展,“内卷”一词频繁被提及,反映了各行业竞争日益激烈的现象。对于无人机培训行业而言,如何在这样的时代背景下脱颖而出,实现做大做强的目标,成为每个培训机构必须深思的问题。以下是从八个关键方面提出的策略,旨在帮助无人机培训机构在内卷时代中稳步前行。 1. 精准定位市场需求 深入研究市场:通过市场调研,了解无人机行业的最新趋势、政策导向及未来发展方向。 明确目标

网络安全运维培训一般多少钱

在当今数字化时代,网络安全已成为企业和个人关注的焦点。而网络安全运维作为保障网络安全的重要环节,其专业人才的需求也日益增长。许多人都对网络安全运维培训感兴趣,那么,网络安全运维培训一般多少钱呢?   一、影响网络安全运维培训价格的因素   1. 培训内容的深度和广度   不同的网络安全运维培训课程涵盖的内容有所不同。一些基础的培训课程可能主要涉及网络安全基础知识、常见安全工具的使用等,价

培训第九周(部署k8s基础环境)

一、前期系统环境准备 1、关闭防火墙与selinux  [root@k8s-master ~]# systemctl stop firewalld[root@k8s-master ~]# systemctl disable firewalldRemoved symlink /etc/systemd/system/multi-user.target.wants/firewalld.servi

超全泛微E10-eBuilder功能培训视频教程(精华)含源码 火!!!

引言  在当今数字化转型的浪潮中,掌握强大而高效的工具将是职业发展的关键。泛微E10的低代码平台e-Builder不仅是一个功能强大的数字化运营管理平台,还为希望在工作中提升效率和技术技能的从业者提供了丰富的学习资源。在这篇文章中,我们将详细介绍泛微E10-eBuilder功能培训视频教程的内容,帮助你了解这款平台如何帮助你在数字化转型和职业提升中领先一步。 一、课程目录介绍 本次培训视频

知名AIGC人工智能专家培训讲师唐兴通谈AI大模型数字化转型数字新媒体营销与数字化销售

在过去的二十年里,中国企业在数字营销领域经历了一场惊心动魄的变革。从最初的懵懂无知到如今的游刃有余,这一路走来,既有模仿学习的艰辛,也有创新突破的喜悦。然而,站在人工智能时代的门槛上,我们不禁要问:下一个十年,中国企业将如何在数字营销的浪潮中乘风破浪? 一、从跟风到精通:中国数字营销的进化史 回顾过去,中国企业在数字营销领域的发展可谓是一部"跟风学习"的编年史。从最初的搜索引擎营销(SEM),

2014年暑假培训 - 数论

A银河上的星星 /**************************************************************     Problem: 1014     User: DoubleQ     Language: C++     Result: Accepted     Time:190 ms     Memor

代码随想录八股训练营第三十七天| C++

前言 一、map和unorder_map的区别? 1.1.内部实现: 1.2.排序: 1.3.查找效率: 1.4.内存使用: 1.5.迭代器: 1.6.键的唯一性: 1.7.使用场景: 二、C++11 新特性有哪些? 2.1.std::map: 总结 前言 在现代软件开发中,选择合适的数据结构如 C++ 标准库中的 std::map 和 std::unordered_

前端 Dockerfile 及 Nginx 配置

🚀 需求:前端 Vue 项目,需要打包为 Docker 镜像,并通过外部 Nginx 访问到这个前端容器。 ⭐ 解决:使用 Nginx 作为 Docker 基础镜像,即使用 Nginx 代理前端静态资源。 Dockerfile Dockerfile 如下: #使用 nginx 最新版本作为基础镜像FROM harbor.xxx.com/enterprise/nginx:1.26-boo

字节内部培训的《大模型落地应用案例集》,52个大模型落地精选案例!

《2023大模型落地应用案例集》是一本极具价值的书籍,它提供了对大模型在各个领域应用的详细解析,从金融到医疗,再到教育和制造等多个行业,都有深入的案例研究。这些案例展示了大模型技术的广泛应用前景,不仅反映了各行业对该技术的认可,也为技术的进一步推广提供了动力 特别值得关注的是医疗健康领域的案例,如MiniMax大模型医疗咨询解决方案。这个案例展示了大模型在医疗领域中的潜力,通过智能化的咨询服

TPM管理培训:学以致用,才是硬道理

全面生产维护(TotalProductiveMaintenance,TPM)作为一种先进的管理体系,正被越来越多的企业所采用,以期通过全员参与、全系统改善的方式,实现设备综合效率的最大化。然而,理论学习与实践应用之间往往存在鸿沟,如何将TPM管理培训的精髓真正融入企业日常运营中,做到“学以致用”,才是其发挥效用的硬道理。 一、理论奠基 TPM起源于日本,其核心思想在于通过构建一个以预防为主