docker创建镜像 Dockerfile

news2024/11/18 21:44:41

目录

docker的创建镜像的方式

dockerfile形成(原理)

docker的核心作用

docker的文件结构

dockerfile的语法

CMD和ENTRPOINT的区别

创建dockerfile镜像

区别

RUN命令的优化

如何把run命令写在一块

copy和ADD区别

区别

centos7 构建Apache的dockerfile(编译安装)

页面访问

​编辑

centos7 构建nginx的dockerfile(编译安装)


创建镜像,创建自定义的镜像

包括配置文件,挂载点,对外暴露的端口,设置环境变量

docker的创建镜像的方式

1、基于已有的镜像进行创建,根据官方提供的镜像源,创建镜像,然后拉起容器,是一个白版,值能提供基础的功能,

扩展性的功能还是需要自定义(进入容器进行操作)

2、基于模版进行创建

导入镜像到本地
docker import 模版 --  模版(Ubuntu:14)

3、dockerfile 联合文件系统(unionFS),docker镜像的基础(镜像通过分层来进行集成,特性:一次同时加载多个文件系统,但是从外面来看,就是一个文件系统)

docker镜像世纪上就是由一层一层的文件系统组成,这种层级的文件系统就是unionFS

每层都是layers,每一层都包含文件系统的一部分,这些层次叠加在一起,最终形成的就是rootfs

dockerfile形成(原理)

bootfs	宿主机的引导文件系统,启动操作系统的文件,启动容器需要的最基本的文件,包含宿主机的bootloader和kernel(提供内核)
rootfs	镜像的操作系统,拉取镜像会给镜像自动创建一恶搞操作系统(拉取镜像)
run add 创建容器时的命令
container
从而形成镜像

bootfs 宿主机提供的内核和引导程序

rootfs 就是容器的操作系统,在dockerfile中,我们可以自己指定(是多个基础镜像和应用镜像结合起来的只读层,镜像实际上就死一个只读文件)

容器基于镜像实例,运行起来之后,容器变成可读可写层

在dockerfile当中每创建一个指定都是一个镜像层

镜像层会被缓存和复用

一旦有一层镜像失败那么所有的镜像层都会失败,镜像也不会创建

镜像层是不可变的,你在某一层当中添加一个新的命令,但是下一层删除了指令,镜像中基于这个命令创建的文件依然存在,但是在容器中看不见

docker的核心作用

用户个性化定制docker的镜像

docker的文件结构

1、基础镜像信息

2、维护者信息

3、镜像的操作指令

4、容器启动时,执行的命令(nginx定义好了容器执行的命令,bin/bash,覆盖了容器内的标准输出)

dockerfile的语法

FROM:指定基础镜像信息,指定容器的操作系统

MAINTAINER:指定维护者信息(可有可无)

RUN:在基础的镜像上执行的命令,每个run就是一层,分层越多,镜像越大

ENTRYPOINT:设置容器运行时的默认命令(容器内部运行的主程序)

CMD:指定容器运行时的默认命令(docker run /bin/bash 后面加了其他的命令,CMD的指令将会被覆盖)

EXPOSE:暴漏端口(指定容器的运行端口)

ENV:设置环境变量,环境变量可以被run命令使用(声明容器运行需要的环境变量)

ADD:复制,解压,解压不支持.zip和.rar tar.gz tar.bz2 支持url地址解压和复制(解压)

COPY:复制文件,不能解压,只能复制本地文件,文件要和dockerfile在一个目录(官方推荐复制用copy)

VOLUME:创建一个容器内的挂载点,既可以为宿主机挂载,也可以供容器挂载

USER:设置运行镜像时使用的用户或者UID(可以不加)

WORKDIR:为后续指令设置的工作目录

ONBUILD:这个镜像可以被其他镜像引用,需要这个命令

ARG:传参,用于创建容器时,传递参数,ENV用于容器运行时设置环境变量

CMD和ENTRPOINT的区别

都是可以作为容器启动时的默认命令

创建dockerfile镜像
vim Dockerfile
FROM centos:7 
MAINTAINER "this is my docker <xb>"
ENTRYPOINT ["echo","hello"]
CMD ["world"]

构建镜像
[root@docker1 test1]# docker build -t centos7:test .
[+] Building 17.0s (5/5) FINISHED                                                                             docker:default
 => [internal] load .dockerignore                                                                                       0.0s
 => => transferring context: 2B                                                                                         0.0s
 => [internal] load build definition from Dockerfile                                                                    0.0s
 => => transferring dockerfile: 183B                                                                                    0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                             4.5s
 => [1/1] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4      12.5s
 => => resolve docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4       0.0s
 => => sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc 76.10MB / 76.10MB                        8.6s
 => => sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4 1.20kB / 1.20kB                          0.0s
 => => sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f 529B / 529B                              0.0s
 => => sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9 2.75kB / 2.75kB                          0.0s
 => => extracting sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc                               3.8s
 => exporting to image                                                                                                  0.0s
 => => exporting layers                                                                                                 0.0s
 => => writing image sha256:95db50faac27607f675dd62ed2fd7a54e573f28c4b4c6b6b19f8c0718a71c0bc                            0.0s
 => => naming to docker.io/library/centos7:test                                                                         0.0s
创建容器
[root@docker1 test1]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos7      test      95db50faac27   2 years ago   204MB
[root@docker1 test1]# docker run -it --name test1 centos7:test 
hello world
[root@docker1 test1]# 
区别

1、cmd可以把参数传给ENTRYPOINT

2、多个ENTRYPOINT和多个cmd只会运行最后一个(一个Dockerfile当中只会有一个ENTRYPOINT和CMD)

3、ENTRYPOINT的指令不会被覆盖,CMD的指令如果在docker run的后面加上输出,会被覆盖

4、ENTRYPOINT的指令在容器启动时启动时执行,都会成为容器的主进程,主进程负责接收信号,处理容器的生命周期,主进程退出,容器也将会终止运行

RUN命令的优化

主要是减少镜像的层数:把多个run命令写在一块

如何把run命令写在一块
&& 符号
RUN yum -y install nginx && make -j 4 && make install
前一个命令执行成功才会执行下一个命令

; 符号
RUN yum -y install nginx ; make -j 4 ; make install
不管前一个命令是否成功,后面的命令都会执行

|| 符号
RUN yum -y install nginx || make -j 4 || make install
如果前面的命令执行失败,才会执行后面的操作

反斜杠\ 换行  符号
RUN yum -y install nginx \
&& make j 4\
&& make install
可读性更高
copy和ADD区别

copy和add都可以吧本地文件复制到镜像中,但是官方推荐如果是复制使用copy

区别

add可以解压,如果是一个压缩文件,add在复制之后会自动解压(tar.gz和tar.bz2) 可以支持URL下载源文件,支持下载,但不能解压,通过URL拷贝的文件无法自动解压

copy只能复制,不能解压,而且只能是本地文件,不支持URL路径

centos7 构建Apache的dockerfile(编译安装)
把源码包拖到opt目录下
vim Dockerfile
#创建基础镜像
FROM centos:7
MAITAIENR "this is my apache <dn>"
RUN yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl
ADD apr-1.6.2.tar.gz /opt
ADD httpd-2.4.29.tar.bz2 /opt
ADD apr-util-1.6.0.tar.gz /opt
RUN mv /opt/apr-1.6.2 /opt/httpd-2.4.29/srclib/apr && mv /opt/apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util &&\
cd /opt/httpd-2.4.29 &&\
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi &&\
make -j 4 && make install
EXPOSE 80
CMD ["/usr/local/httpd/bin/apachectl","-D","FOREGROUND"]

docker build -t apache:centos .

docker run -itd --name httpd1 -p 50:80 apache:centos

基于镜像的二次构建
FROM centos:7 AS first
MAITAIENR "this is my apache <dn>"
RUN yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl
ADD apr-1.6.2.tar.gz /opt
ADD httpd-2.4.29.tar.bz2 /opt
ADD apr-util-1.6.0.tar.gz /opt
RUN mv /opt/apr-1.6.2 /opt/httpd-2.4.29/srclib/apr && mv /opt/apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util &&\
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi &&\
make -j 4 && make install
#二层构建
FROM centos:7
COPY --from=first /usr/local/httpd /usr/local/httpd
RUN yum -y cre pcre-devel expat-devel perl
EXPOSE 80
CMD ["/usr/local/httpd/bin/apachectl","-D","FOREGOUND"]

docker build -t apache1:centos .

docker run -itd --name httpd1 -p 50:80 apache:centos
页面访问
centos7 构建nginx的dockerfile(编译安装)
把源码包拖到opt/test目录下
vim Dockerfile
FROM centos:7
MAINTAINER "this is nginx <xb>"
ADD nginx-1.22.0.tar.gz /opt/test/
RUN yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel &&\
useradd -M -s /sbin/nologin nginx &&\
cd /opt/test/nginx-1.22.0/ &&\
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module &&\
make -j 4 && make install &&\
chown -R nginx.nginx /usr/local/nginx/ &&\
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]


[root@docker1 test]# docker build -t nginx:centos .
[+] Building 0.0s (8/8) FINISHED                                                                              docker:default
 => [internal] load build definition from Dockerfile                                                                    0.0s
 => => transferring dockerfile: 791B                                                                                    0.0s
 => [internal] load .dockerignore                                                                                       0.0s
 => => transferring context: 2B                                                                                         0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                             0.0s
 => [internal] load build context                                                                                       0.0s
 => => transferring context: 95B                                                                                        0.0s
 => [1/3] FROM docker.io/library/centos:7                                                                               0.0s
 => CACHED [2/3] ADD nginx-1.22.0.tar.gz /opt/test/                                                                     0.0s
 => CACHED [3/3] RUN yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel &&useradd -M -s /sb  0.0s
 => exporting to image                                                                                                  0.0s
 => => exporting layers                                                                                                 0.0s
 => => writing image sha256:5f90f4b42382377324edf884560f8118d6873889dd8179df68b47de39b6fb334                            0.0s
 => => naming to docker.io/library/nginx:centos                                                                         0.0s
[root@docker1 test]# docker run -itd --name xiaobu -p 8080:80 nginx:centos 
61beb14328b28a424a4c2e88d7e3a1f63e4ac55b551ec32a3656bcff3cb0711b
[root@docker1 test]# docker ps -a

CONTAINER ID   IMAGE            COMMAND                  CREATED         STATUS                     PORTS                                   NAMES
61beb14328b2   nginx:centos     "/usr/local/nginx/sb…"   5 seconds ago   Exited (1) 4 seconds ago                                           xiaobu
6068029975ff   apache1:centos   "/usr/local/httpd/bi…"   3 hours ago     Up 3 hours                 0.0.0.0:1314->80/tcp, :::1314->80/tcp   httpd1
5b6c5af75176   apache:centos    "/usr/local/httpd/bi…"   3 hours ago     Exited (0) 3 hours ago                                             http1

页面访问

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

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

相关文章

jdk常用命令

1.jinfo命令 jinfo命令主要查看虚拟机配置参数信息&#xff0c;也可用于调整虚拟机的配置参数。jinfo不仅可以查看运行时某一个Java虚拟机参数的实际取值&#xff0c; 甚至可以在运行时修改部分参 数&#xff0c;并使之立即生效。 但是&#xff0c;并非所有参数都支持动态修改。…

springboot使用validation-api对入参进行校验

springboot使用validation-api对入参进行校验 前言&#xff1a;在实际开发中&#xff0c;我们不能完全相信前端给我们的参数是否符合预期或规范&#xff0c;为了避免恶意入参&#xff0c;引发系统或数据安全问题&#xff0c;需要对前端传过来的参数进行校验。例如字符串长度校…

牛客网BC107矩阵转置

答案&#xff1a; #include <stdio.h> int main() {int n0, m0,i0,j0,a0,b0;int arr1[10][10]{0},arr2[10][10]{0}; //第一个数组用来储存原矩阵&#xff0c;第二个数组用来储存转置矩阵scanf("%d%d",&n,&m); if((n>1&&n<10)&&am…

ShopsN commentUpload 文件上传漏洞复现

0x01 产品简介 ShopsN 是一款符合企业级商用标准全功能的真正允许免费商业用途的开源网店全网系统。 0x02 漏洞概述 ShopsN commentUpload 接口处存在任意文件上传漏洞,攻击者可以利用文件上传漏洞执行恶意代码、写入后门、读取敏感文件,从而可能导致服务器受到攻击并被控…

千梦网创:Too Young,to simple

大多数人啊&#xff0c;还是too young&#xff0c;包括我。 网上的评论对我而言并不影响我通过提供价值服务经营生活&#xff0c;但是有时候对于我的思考还是有一些帮助的。 我把很多可以争与不可争的事件看做是一种现象&#xff0c;这种现象往往可以给予我新的能量。 当学员…

2024美赛备战-美赛必备技能(matlab 和SPSS入门必备)

( 一 )Matlab 1.数值计算和符号计算功能 Matlab 以矩阵作为数据操作的基本单位&#xff0c;它的指令表达式与数学、工程中 常用的符号、表达式十分相似&#xff0c;故用Matlab 来解算问题要比用C、FORTRAN 等 语 言完成相同的事情简捷得多&#xff0c;使学者易于学习和掌握…

完蛋,我的AI自己动起来了

故事的开始 一开始&#xff0c;我只是给我的公众号接入了星火认知大模型。但是公众号的应用场景不足&#xff0c;没办法当成群机器人来用。所以我后来办了张新的电话卡&#xff0c;注册了个小号微信。想把小号打造成微信群聊助手&#xff0c;在我没时间翻冗长的聊天记录的时候…

平面腔体谐振计算与仿真

PCB的电源网络是由电介质材料隔开的两个平行金属板所组成&#xff0c;可以通过以下的3种方法对其谐振模式进行分析&#xff1a; 1. 基于腔体模型的计算&#xff1b; 2. 基于SPICE等效电路&#xff1b; 3. 基于全波数值电磁算法的3D模型。 设计得当的前提下&#xff0c;上述3种方…

西工大计院计算机系统基础实验二(配置gdb插件)

第二次实验是二进制炸弹实验&#xff0c;为了简化操作&#xff0c;并且让大家接下来能够按照作者之前已经为网安院写好的博客西工大网络空间安全学院计算机系统基础实验二&#xff08;清楚实验框架及phase_1&#xff09;-CSDN博客来走&#xff0c;大家需要下载一款好用的gdb插件…

退回论文如何修改最好最快 快码论文

大家好&#xff0c;今天来聊聊退回论文如何修改最好最快&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 退回论文如何修改最好最快 当论文被退回时&#xff0c;如何修改才…

“快速排序:一种美丽的算法混沌”

欢迎来到我的博客&#xff01;在今天的文章中&#xff0c;我将采用一种独特且直观的方式来探讨我们的主题&#xff1a;我会使用一幅图像来贯穿整篇文章的讲解。这幅精心设计的图表不仅是我们讨论的核心&#xff0c;也是一个视觉辅助工具&#xff0c;帮助你更深入地理解和掌握本…

【idea】idea尾部自动删除空格,idea2023.1.2关闭自动去除行尾空格的功能

这个功能是由于git或者svn上的代码有许多空格的时候&#xff0c;会自动把空格去掉&#xff0c;就会导致出现许多更改的地方&#xff0c;会自动删空格。 尾部刚打好空格准备写代码&#xff0c;自动就删掉空格&#xff0c;又得重打空格后继续编码&#xff0c;非常不爽。 设置如…

linux sed批量修改替换文件中的内容/sed特殊字符

sed系列文章 linux常用命令(9)&#xff1a;sed命令(编辑/替换/删除文本)linux sed命令删除一行/多行_sed删除第一行/linux删除文件某一行linux sed批量修改替换文件中的内容/sed特殊字符 文章目录 sed系列文章一、sed替换文本语法1.1、基础语法1.2、高阶语法 二、实战/实例2.1…

群晖7.2使用Docker安装容器魔方结合内网穿透实现远程访问

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 1. 拉取容器魔方镜像2. 运行容器魔方3. 本地访问容器魔…

SpringTask

SpringTask是一种用于定时任务调度的框架周期性任务、定时任务需要SpringTask框架 比较出名的框架有三种&#xff1a; &#xff08;1&#xff09;SpringTask(没有很大的并发量需求量&#xff0c;用SpringTask足够) &#xff08;2&#xff09;Quartz(老牌的定时任务&#xff0c…

在IDEA 2023.3中Jrebel debug 模式无法启动

目录 版本说明问题描述解决方式 版本说明 IDEA&#xff1a;IntelliJ IDEA 2023.3 (Ultimate Edition) Jrebel&#xff1a; JRebel Agent 2023.4.2 (202312041035) 问题描述 在IDEA中启动debug模式时无法正常启动 解决方式 在 IDEA 2023.3 版本修改了默认的配置&#xff…

仿淘宝、京东首页icons横向滑动效果

一、效果展示 淘宝&#xff1a; 京东&#xff1a; 二、话不多说&#xff0c;直接上demo 案例效果 代码 <template><div class"demo-page"><h1>滚动效果</h1><div classicons-slide-wrapper><div class"icons-container&quo…

k8s节点not ready

开发小伙伴反应&#xff0c;发布应用失败。检查后发现有个虚拟机挂掉了 启动后先重启服务&#xff1a;&#xff08;一般是自启动&#xff0c;自动拉起pod服务&#xff09; service docker restart docker ps |grep kube-apiserver|grep -v pause|awk ‘{print $1}’|xargs -i …

【SpringBoot】配置文件

配置文件官网 1. 配置方式 application.propertiesapplication.yml / application.yaml 2. 自定义配置信息 将实体类中的本应该写死的信息写在属性配置文件中。 可以使用 Value("${键名}") 获取&#xff0c;也可以使用 ConfigurationProperties(prefix"前…

C++_类的定义和使用

目录 1、类的引用 1.1 类的成员函数 1.2 类成员函数的声明和定义 2、类的定义 2.1 类的访问限定&#xff08;封装&#xff09; 3、类重名问题 4、类的实例化 4.1 类的大小 5、隐含的this指针 5.1 空指针问题 结语&#xff1a; 前言&#xff1a; C的类跟c语言中的结…