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

news2024/11/13 14:40:57

一、使用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
 总用量 0
 lrwxrwxrwx. 1 root root 72 8月  27 18:50 5UARUS4DFDNH37GG65JKMFRO4M -> ../1341061cbeb80e7b74279a892f637fc3e2f03222f88a05bc93a7019647f9c927/diff
 # 查看镜像
 [root@docker ~]# docker images
 REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
 centos       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.repo
 RUN yum clean all && yum makecache
 RUN yum -y install epel-release
 RUN yum -y install httpd
 # 在最新的镜像的基础上创建可写层将当前目录下的abc.sh文件添加到可写层的/下,然后封装为一个新的镜像。
 ADD abc.sh /abc.sh
 ADD index.html /var/www/html/index.html
 RUN 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  l
 8y0ib03cyjk3bikvwj40k7c37                                         laqzfqudwz025q498kfbo901r
 backingFsBlockDev                                                 m492nzrx1jlex30ds1l70r48e
 cwm0hlso2ikxpnnew7h6r3gsk                                         mp1170uu9wy5pnkchxm3bth3k
 gnntltza2z80epdbv3ih2xga1                                         mrgs02l8tzf0rrmbt2m8fjwpy
 ixnyvcpy4lx99f1y7h8xyz8iu                                         rduyzuv1kxytktqve6jfbodat
 kubfqbqaklvn332f9ypyp4lvo                                         xtcj5pgcz6s3o4wk466q9t09h
 # 查看镜像
 [root@docker 001]# docker images
 REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
 centos       httpd     403dce14659e   About a minute ago   338MB
 centos       latest    5d0da3dc9764   2 years ago          231MB

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

 # 创建容器之后,容器直接在后台运行,是up状态
 [root@docker 001]# docker run -d --name c0 centos:httpd
 5ae9cfa3d3460a737daf4e33860b36edb37e7380e15090faee51a2462cbe3a5c
 # 查看容器状态
 [root@docker 001]# docker ps -a
 CONTAINER ID   IMAGE          COMMAND               CREATED          STATUS         PORTS     NAMES
 5ae9cfa3d346   centos:httpd   "/bin/bash /abc.sh"   10 seconds ago   Up 9 seconds             c0
 # 查看overlay2文件
 [root@docker 001]# ls /var/lib/docker/overlay2/
 25dd2217dc1c5af7a64f050bd9fd7b0d4f73fd1146638b68376553ed1871cb92       kubfqbqaklvn332f9ypyp4lvo
 515b357ebc9fdefa191a492824c9a55ca1958d969cd5e36740787ec16859644f       l
 515b357ebc9fdefa191a492824c9a55ca1958d969cd5e36740787ec16859644f-init  laqzfqudwz025q498kfbo901r
 8y0ib03cyjk3bikvwj40k7c37                                              m492nzrx1jlex30ds1l70r48e
 backingFsBlockDev                                                      mp1170uu9wy5pnkchxm3bth3k
 cwm0hlso2ikxpnnew7h6r3gsk                                              mrgs02l8tzf0rrmbt2m8fjwpy
 gnntltza2z80epdbv3ih2xga1                                              rduyzuv1kxytktqve6jfbodat
 ixnyvcpy4lx99f1y7h8xyz8iu 
 [root@docker 001]# cd

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

 [root@docker ~]# cp -r 001 002
 [root@docker ~]# cd 002
 [root@docker 002]# ls
 abc.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:latest
 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.repo
 RUN yum clean all && yum makecache
 RUN yum -y install epel-release
 CMD /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       kubfqbqaklvn332f9ypyp4lvo
 515b357ebc9fdefa191a492824c9a55ca1958d969cd5e36740787ec16859644f       l
 515b357ebc9fdefa191a492824c9a55ca1958d969cd5e36740787ec16859644f-init  laqzfqudwz025q498kfbo901r
 8y0ib03cyjk3bikvwj40k7c37                                              m492nzrx1jlex30ds1l70r48e
 backingFsBlockDev                                                      mp1170uu9wy5pnkchxm3bth3k
 cwm0hlso2ikxpnnew7h6r3gsk                                              mrgs02l8tzf0rrmbt2m8fjwpy
 gnntltza2z80epdbv3ih2xga1                                              rduyzuv1kxytktqve6jfbodat
 ixnyvcpy4lx99f1y7h8xyz8iu                                              xtcj5pgcz6s3o4wk466q9t09h

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

 [root@docker ~]# cp -r 002 003
 [root@docker ~]# cd 003
 [root@docker 003]# vim Dockerfile
 # 基于centos:yum镜像
 FROM centos:yum
 RUN 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 80
 CMD /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 --all
 CONTAINER ID   IMAGE          COMMAND                   CREATED             STATUS             PORTS                                     NAMES
 34bf6e6f1ecf   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 r2
 r2
 [root@docker ~]# docker ps -a
 CONTAINER ID   IMAGE             COMMAND                   CREATED          STATUS         PORTS                                       NAMES
 fa7e9e9adafa   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 --help
 Usage:  docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
 Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
 Aliases:
   docker image tag, docker tag
 # 将centos:yum打上标签,会产生一个有标签的镜像
 [root@docker ~]# docker tag centos:yum 10.0.0.100:5000/centos:yum
 # 查看镜像列表
 [root@docker ~]# docker images
 REPOSITORY               TAG       IMAGE ID       CREATED             SIZE
 10.0.0.100:5000/centos   yum       3d6ddceabada   About an hour ago   272MB
 centos                   yum       3d6ddceabada   About an hour ago   272MB
 # 将打标签后的镜像推送到私有镜像仓库中
 [root@docker ~]# docker push 10.0.0.100:5000/centos:yum
 The 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]# ls
 registry
 [root@docker docker]# cd registry/
 [root@docker registry]# ls
 v2
 [root@docker registry]# cd v2
 [root@docker v2]# ls
 blobs  repositories
 [root@docker v2]# cd repositories/
 [root@docker repositories]# ls
 centos
 [root@docker repositories]# cd centos/
 [root@docker centos]# ls
 _layers  _manifests  _uploads
 [root@docker centos]# cd _layers/
 [root@docker _layers]# ls
 sha256
 [root@docker _layers]# cd sha256/
 # 发现镜像,并且是一层一层上传的
 [root@docker sha256]# ls
 3127685a2e9b21beb8a870ee9575646f1c0d441661874cdcaa01a724218939e2
 3d6ddceabadaa475bb81ca4b5eae508c311f9068a8be6042d72156c4581e9eec
 a1d0c75327776413fa0db9ed3adcdbadedc95a662eb1d360dad82bb913f8a1d1
 aa878f71d044e7eb143fd07094be06161a149d682da4aec03095b375af7de50b
 c35bf6dcc39cf1d32233a720c48ae058ef098f69466706e5e886df747532fccc
 f53bb2d73e0577b30c56e94b8901c26108dbb5b4a2bb1b4a622c1c41fdf5b489

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2079627.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索Python的Excel力量:openpyxl库的奥秘

文章目录 探索Python的Excel力量&#xff1a;openpyxl库的奥秘背景&#xff1a;为什么选择openpyxl&#xff1f;库简介&#xff1a;openpyxl是什么&#xff1f;安装指南&#xff1a;如何安装openpyxl&#xff1f;快速上手&#xff1a;五个基本函数实战演练&#xff1a;三个应用…

Python实现Word文档转换为图片(JPG、PNG、SVG等常见格式)例子解析

在Python中将Word文档转换为图片&#xff08;如JPG、PNG、SVG等格式&#xff09;可以通过多种库实现&#xff0c;例如Spire.Doc for Python和Aspose.Words for Python。以下是一些详细的代码示例&#xff0c;展示了如何使用这些库完成转换。 使用Spire.Doc for Python转换Word…

网络服务器及IO模型

网络服务器 单循环服务器&#xff1a;服务器在同一时刻只能响应一个客户端的请求 并发服务器模型&#xff1a;服务器在同一时刻可以响应多个客户端的请求 实现TCP并发服务器 1.多进程 2.多线程 3.IO多路复用&#xff1a; 为了解决进程或线程阻塞到某个 I/O 系统调用而出现的…

几种前端处理文本换行展示

文章目录 一、使用 CSS 的 white-space 属性二、使用 CSS 的 word-break 和 word-wrap 属性三、 使用 CSS 的 flex 布局和自动换行四、 使用overflow实现换行 一、使用 CSS 的 white-space 属性 可以将 white-space 属性设置为 pre-wrap 或 pre-line。 pre-wrap&#xff1a;保…

【STM32】FMC

FMC功能与FSMC类似&#xff0c;但比FSMC更强大&#xff0c;但仅在F4 / F7 / H7等高级一点的MCU上支持&#xff0c;F1不支持。虽然我的是F103&#xff0c;但顺便都看了。 大部分图片来源&#xff1a;正点原子HAL库课程 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 目…

数据结构学习:栈

栈的简介 栈&#xff08;Stack&#xff09;是限定仅在表尾进行插入租删除操作的线性表。 允许插入和删除的一端称为栈顶(top),另-端称为栈底(bottom) 不含任何数据元素的栈称为空栈 栈又称为后进先出的线性表,简称LIFO结构 栈的插入操作&#xff0c;也叫做进栈&#xff0c…

java JVM

JVM的组成 Java虚拟机&#xff08;JVM&#xff09;是执行Java字节码的运行时环境。它由以下几个主要部分组成&#xff1a; 1. **类加载器&#xff08;ClassLoader&#xff09;**&#xff1a; - 负责加载Java类的字节码到JVM中&#xff0c;并进行链接和初始化。 关于Java的…

C++基础练习

1》提示并输入一个字符串&#xff0c;统计该字符串中字母个数、数字个数、空格个数、其他字符的个数 1 #include<iostream>2 using namespace std;3 4 int main()5 {6 string str1; //定义字符串数据7 cout << "请输入一个字符串>>>" ;8…

三种常用的Word打印部分内容操作技巧

作为打工人&#xff0c;我们经常需要处理Word文档&#xff0c;有时还会遇到只需要打印文档中的部分内容而非整个文档的情况。为了高效地完成这一任务&#xff0c;Word提供了多种灵活的设置方法。本文将详细介绍三种常用的方法来帮助你实现只打印Word文档中的部分内容。 方法一&…

第一周学习--联邦学习

OUC读研--第一周 目录 1、课程学习 2、fedavg的算法实现 关于代码详解 1、client __init__ 方法 local_train 方法 2、server 3、get_dataset 函数定义 数据集加载 MNIST 数据集 CIFAR-10 数据集 返回值 使用示例 4、 main 代码解释 可能的改进点 5、models …

机器学习之 K-means算法的代码实现

K-means 算法简介 K-means 是一种常用的无监督学习算法&#xff0c;主要用于数据聚类。它的主要思想是将数据集中的数据分成 K 个簇&#xff08;Cluster&#xff09;&#xff0c;使得簇内的数据点尽可能相似&#xff0c;而簇间的差异尽可能大。K-means 算法的核心步骤包括初始…

关于类与构造函数继承的小挑战

题目 /* 使用构造函数将电动汽车&#xff08;称为 EV&#xff09;作为 Car 的子 “类 ”来实现。除了品牌和当前速度外&#xff0c;EV 还具有当前电池电量&#xff08;百分比&#xff09;&#xff08;“charge ”属性&#xff09;&#xff1b;实现一个 “chargeBattery ”方法…

Vitis AI 基本认知(Tiny-VGG 项目代码详解)

目录 1. 简介 1.1 Tiny-VGG 1.2 data 目录结构 2. 代码分析 2.1 Import packages 2.2 Dataset 2.3 Train step 2.4 Vali & Test step 2.5 Ceate model 2.6 Compile model 2.6.1 计算 loss 2.6.2 计算平均值 3.6.3 计算准确度 2.7 训练循环 2.7.1 自定义训练…

BLE蓝牙协议详解

BLE蓝牙协议详解 1、BLE协议栈 1、协议栈结构 蓝牙LE协议栈按功能分为三个层&#xff1a;Controller、Host和Application Profiles and Services。 HCI event是按BLE Spec标准设计的&#xff0c;是BLE Controller和Host用来交互的事件&#xff1b;GAP event是BLE host定义的…

环境配置 --- miniconda安装torch报错OSError: [WinError 126] 找不到指定的模块

环境配置 — miniconda安装torch报错OSError: [WinError 126] 找不到指定的模块。 CSDN 原因&#xff1a;fbegmm.dll文件出现问题 解决方案&#xff1a; 使用依赖分析工具https://github.com/lucasg/Dependencies/releases/tag/v1.11.1 检测报错提示的那个dll文件发现哪个文…

Nuclei:开源漏洞扫描器

Nuclei 拥有灵活的模板系统&#xff0c;可以适应各种安全检查。 它可以使用可自定义的模板向多个目标发送请求&#xff0c;确保零误报并实现跨多台主机的快速扫描。 它支持多种协议&#xff0c;包括 TCP、DNS、HTTP、SSL、文件、Whois、Websocket 等。 特征 模板库&#xf…

Java中的定时器(Timer)

目录 一、什么是定时器? 二、标准库中的定时器 三、实现定时器 一、什么是定时器? 定时器就像一个"闹钟"&#xff0c;当它到达设定的时间后&#xff0c;就会执行预定的代码。 例如&#xff0c;我们在TCP的超时重传机制中讲过&#xff0c;如果服务器在规定的时间…

XDMA - AXI4 Memory Mapped

目录 1. What is SG DMA2. Descriptor3. Transfer for H2CStep 1. The host prepares stored data and creates descriptors in main memoryStep 2. The host enables DMA interruptsStep 2. The driver initializes DMA with descriptor start addressStep 3. The driver writ…

数据结构(邓俊辉)学习笔记】串 06——KMP算法:构造next[]表

文章目录 1. 递推2. 算法3. 实现 1. 递推 接下来的这节&#xff0c;我们就来讨论 next 查询表的构造算法。我们将会看到非常有意思是&#xff0c; next 表的构造过程与 KMP 主算法的流程在本质上是完全一样的。 在这里&#xff0c;我们不妨采用递推策略。我们只需回答这样一个…

带你深入浅出新面经:十六、十大排序之快速排序

此为面经第十六谈&#xff01;关注我&#xff0c;每日带你深入浅出一个新面经。 我们要了解面经要如何“说”&#xff01; 很重要&#xff01;很重要&#xff01;很重要&#xff01; 我们通常采取总-分-总方式来阐述&#xff01;&#xff08;有些知识点&#xff0c;你可以去…