docker创建镜像 Dockerfile

目录

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 -aCONTAINER 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.hqwc.cn/news/282655.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式培训-数据结构-day23-线性表

线性表 线性表是包含若干数据元素的一个线性序列 记为&#xff1a; L(a0, ...... ai-1, ai, ai1 ...... an-1) L为表名&#xff0c;ai (0≤i≤n-1)为数据元素&#xff1b; n为表长,n>0 时&#xff0c;线性表L为非空表&#xff0c;否则为空表。 线性表L可用二元组形式描述…

【POI的如何做大文件的写入】

&#x1f513;POI如何做大文件的写入 &#x1f3c6;文件和POI之间的区别是什么&#xff1f;&#x1f3c6;POI对于当今的社会发展有何重要性&#xff1f;&#x1f3c6;POI大文件的写入&#x1f396;️使用XSSF写入文件&#x1f396;️使用SXSSFWorkbook写入文件&#x1f396;️对…

日期计算 C语言xdoj68

问题描述 给定一个年份y和一个整数d&#xff0c;问这一年的第d天是几月几日&#xff1f; 注意闰年的2月有29天&#xff0c;且满足下面条件之一的是闰年&#xff1a; 1&#xff09; 年份是4的整数倍&#xff0c;而且不是100的整数倍&#xff1b; 2&#xff09; 年份是…

至强 E5-2680 v4 攒机小记

缘何攒机 原有一台自用的 MacBook Pro 已用了5年左右&#xff0c;主要用来上网、处理文档和照片&#xff0c;日常使用率并不高。但自从主板坏了一次后就有了置办新设备的想法。笔记本、台式机、Mini主机都有考虑&#xff0c;一度几乎确定就是Mini主机了&#xff0c;主要看了零…

图扑物联助力打造现代化绿色智慧港口

“智慧港口”是以现代化基础设施设备为基础&#xff0c;以云计算、大数据、物联网、移动互联网、智能控制等新一代信息技术与港口运输业务深度融合为核心&#xff0c;以港口运输组织服务创新为动力&#xff0c;以完善的机制、法律法规、标准规范、发展政策为保障。能够在更高层…

RabbitMQ搭建集群环境、配置镜像集群、负载均衡

RabbitMQ集群搭建 Linux安装RabbitMQ下载安装基本操作命令开启管理界面及配置 RabbitMQ集群搭建确定rabbitmq安装目录启动第一个节点启动第二个节点停止命令创建集群查看集群集群管理 RabbitMQ镜像集群配置启用HA策略创建一个镜像队列测试镜像队列 负载均衡-HAProxy安装HAProxy…

dysmsapi

dysmsapi DY - SMS - API 短信服务接口 短信服务_SDK中心-阿里云OpenAPI开发者门户 <!-- 阿里dayu sms api短信群发接口 --><!-- https://mvnrepository.com/artifact/com.aliyun/dysmsapi20170525/2.0.24 --><dependency><groupId>com.aliyun&l…

SpringBoot上传图片文件到七牛云

准备工作 maven pom.xml添加七牛云的sdk依赖 <dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>7.2.27</version></dependency>配置项 七牛云上传必要的配置有&#xff1a;acces…

escapeshellarg参数绕过和注入的问题

escapeshellcmd escapeshellcmd(string $command): string command--要转义的命令。 escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec() 或 system() 函数&#xff0c;或者 执行操作符 之前进行转义。 …

LVS-DR部署

目录 LVS的工作模式及其工作过程 NAT模式&#xff08;VS-NAT&#xff09; 直接路由模式&#xff08;VS-DR&#xff09; IP隧道模式&#xff08;VS-TUN&#xff09; DR模式 LVS负载均衡群集的分析及特点 数据包流向分析 DR 模式的特点 LVS-DR部署实例 LVS-DR模式部署流…

实验八 A/D模数转换(汇编与微机原理)

实验目的&#xff1a; 掌握ADC0809模数转换的工作原理。 掌握用ADC0809来进行电压转换的使用方法。 实验内容&#xff1a; 用模数转换器件ADC0809测量外部输入的模拟电压&#xff0c;将转换结果输出到数码管的最右边两位上显示。 实验原理&#xff1a; 0809A/D转换芯片有8…

18.XML

XML简介 • XML–可扩展标记语言 eXtensible Markup Language • 由W3C组织发布&#xff0c;目前推荐遵守的是W3C组织于2000年发布的XML1.0规范 • XML的使命&#xff0c;就是以一个统一的格式&#xff0c;组织有关系的数据&#xff0c;为不同平台下的应用程序服务 • XML用来…