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

培训第三十七天(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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 设计模式—工厂模式
  • Redux的中间件原理分析
  • R 语言学习教程,从入门到精通,R 绘图 中文支持(25)
  • C语言迷宫制造
  • 写个IDEA插件
  • C语言基础(二十)
  • OpenCV几何图像变换(9)仿射变换函数warpAffine()的使用
  • 【iOS安全】iPhone8 iOS14.4.2 越狱教程
  • ubuntu22.04安装redis
  • 免费分享:2000-2020年MODIS中国积雪物候数据集(附下载办法)
  • [论文阅读] mobile aloha实验部分
  • 一. 初始 Spring Boot
  • 充电桩定期检测是如何实现的
  • 【银河麒麟】银河麒麟桌面操作系统 V10 (SP1) 2403 版(ARM64)安装 Windows 软件(Wine)
  • 泰山派小手机---ubuntu 环境的搭建
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • create-react-app做的留言板
  • CSS中外联样式表代表的含义
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • FineReport中如何实现自动滚屏效果
  • If…else
  • Java的Interrupt与线程中断
  • React的组件模式
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • VuePress 静态网站生成
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • - 概述 - 《设计模式(极简c++版)》
  • 回流、重绘及其优化
  • 基于遗传算法的优化问题求解
  • 简单基于spring的redis配置(单机和集群模式)
  • 聚簇索引和非聚簇索引
  • 开源地图数据可视化库——mapnik
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 算法系列——算法入门之递归分而治之思想的实现
  • 消息队列系列二(IOT中消息队列的应用)
  • 新手搭建网站的主要流程
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • postgresql行列转换函数
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • $.ajax,axios,fetch三种ajax请求的区别
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (Matlab)使用竞争神经网络实现数据聚类
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Core WebAPI中封装Swagger配置
  • .net FrameWork简介,数组,枚举
  • .NET 表达式计算:Expression Evaluator