Docker创建镜像的方式---Dockerfile

Dockerfile可以创建自定义镜像。包括配置文件,挂载点,对外暴露的端口,设置环境变量。

Docker创建镜像的方式

1、 基于已有镜像创建:根据官方提供的镜像源,创建镜像。然后拉起容器。是一个白板智能提供基础的功能,扩展性的功能需要在容器内自定义

2、 基于模板创建:根据官方提供的模板

docker import ubuntu-14.04-x86-minimal.tar.gz -- ubuntu:14
#导入本地docker镜像

3、 dockerfile

基于Dockerfile

dockerfile:联合文件系统(UnionFS),是docker镜像的基础。

镜像通过分层来进行集成。

dockerfile的特性:一次同时加载多个文件系统,但是从外部来看就是一个文件系统

docker镜像实际上就是由一层一层的文件系统组成。

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

1、 bootfs:宿主机地引导文件系统,启动操作系统的文件,启动容器需要的最基本的文件。包含宿主机的bootloader和kernel。

2、 rootfs:镜像的操作系统。会给镜像自动创建一个操作系统。

3、 RUN、ADD:创建容器时的命令

4、 形成container容器

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

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

镜像层会被缓存和复用。一旦有一层镜像失败那么所有的镜像层都会失败。镜像也不会创建。

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

dockerfile的核心,用户个性化定制docker的镜像。

dockerfile的结构

1、 基础镜像

2、 维护者信息

3、 镜像的操作指令

4、 容器启动时执行的命令

nginx:定义好了容器执行的命令

/bin/bash:覆盖了容器内的标准输出

dockerfile的语法

在dockerfile中所有的语法命令都是大写

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

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

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

ENTRYPOINT:设置容器运行时的默认命令(容器内部运行的主程序)(和CMD任选其一

CMD:指定容器运行时的默认命令(docker run /bin/bash后面加了其他命令那么cmd的命令将会被覆盖)(和ENTRYPOINT任选其一

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

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

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

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

VOLUME:创建一个容器内的挂载点。既可以为宿主机挂载,也可以实现容器与容器之间挂载。

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

WORKDIR:为后续指令设置的工作目录(指定ENTRYPOINT和CMD命令的工作目录)

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

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

Dockerfile创建镜像

所有的Dockerfile都叫Dockerfile

FROM centos:7MAINTAINER "this is my docker <zyg>"ENTRYPOINT ["echo","hello"]CMD ["world"]docker build -t centos7:test .
#.:使用当前dockerfile文件

ENTRYPOINT和CMD的区别

1、 cmd可以把参数传递给ENTRYPOINT

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

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

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

RUN命令的优化

主要是减少镜像的层数,把多个RUN命令写在一块。

1、 &&符号:

RUN yum -y install nginx && make -j 4 && make install

前一个命令执行成功才会执行下一个命令

2、 ;符号:了解即可

RUN yum -y install nginx ; make -j 4 ; make install

3、 ||符号:逻辑或。了解即可

RUN yum -y install nginx || make -j 4 || make install

如果前一个命令执行失败才会执行后面的操作

4、 \符号:可以理解为换行

RUN yum -y install nginx \
make -j 4 \
make install

提高可读性

COPY和ADD的区别

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

区别:

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

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

基于centos7构建apach的Dcokerfile(编译安装)

mkdir apache
cd /opt/apache
#创建基础镜像
FROM centos:7
MAINTAINER "this is my apache <zyg>"
RUN yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl
ADD apr-1.6.2.tar.gz /opt
ADD apr-util-1.6.0.tar.gz /opt
ADD httpd-2.4.29.tar.bz2 /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 http1 -p 1314:80 apache:centos
#根据创建好的镜像创建一个容器名为http1
通过指定的端口在外部浏览器测试一下
20.0.0.41:1314

基于镜像进行二次构建

vim Dockerfile
#创建基础镜像
FROM centos:7 AS first
MAINTAINER "this is my apache <zyg>"
RUN yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl
ADD apr-1.6.2.tar.gz /opt
ADD apr-util-1.6.0.tar.gz /opt
ADD httpd-2.4.29.tar.bz2 /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
#二层构建:了解即可
FROM centos:7
COPY --from=first /usr/local/httpd /usr/local/httpd
RUN yum -y install make pcre pcre-devel expat-devel perl
EXPOSE 80
CMD ["/usr/local/httpd/bin/apachectl","-D","FOREGROUND"]docker build -t apache1:centos .

基于centos7构建nginx的Dcokerfile(编译安装)

#创建基础镜像
FROM centos:7
MAINTAINER "this is my nginx <zyg>"
ADD nginx-1.22.0.tar.gz /opt
RUN yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel &&\
useradd -M -s /sbin/nologin nginx &&\
cd /opt/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 &&\
ln -s /usr/local/nginx/sbin/nginx /usr/sbin
RUN mkdir -p /usr/local/nginx/run
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

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

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

相关文章

RPG:一种面向Rust库的模糊测试目标自动生成技术(ICSE‘24)

- 这是我们在ICSE’24的论文RPG: Rust Library Fuzzing with Pool-based Fuzz TargetGeneration and Generic Support [1] 的科普版本。- 插播一条广告&#xff1a;西安电子科技大学广州研究院 ICTT(GZ) 实验室长期接收硕士、博士、博士后、教师岗位申请&#xff0c;欢迎勤奋、…

Linux:Oracle19c安装创建仓库

环境介绍 操作系统&#xff1a;centos7.9 使用yum&#xff1a;公网yum源 内核版本&#xff1a;3.10.0-1160.el7.x86_64 运行内存&#xff1a;4G swap交换内存&#xff1a;8G ssh软件&#xff1a; 软件包&#xff1a;LINUX.X64_193000_db_home.zip 下载链接&#xff1a; 适用于…

鸿蒙生态千帆起:从者众,行则远

“轻舟已过万重山”&#xff0c;鸿蒙的成长速度惊人&#xff0c;一定程度上打破了iOS和安卓二分天下的格局。短短四年时间&#xff0c;搭载华为鸿蒙系统的生态设备数已经突破7亿&#xff0c;开发者突破220万。据Counterpoint数据显示&#xff0c;华为HarmonyOS系统在中国的市场…

IoTDB JavaAPI

文章目录 使用样例Java使用样例 官方已经给出了相关使用Demo&#xff0c;下载地址为: https://github.com/apache/iotdb 直接拉取相对应版本的源码 使用样例 Java使用样例 代码位置 iotdb/example/session/src/main/java/org/apache/iotdb/SessionExample.java iotdb/exa…

HyperGCN笔记

1 Title HyperGCN: A New Method of Training Graph Convolutional Networks on Hypergraphs&#xff08;Naganand Yadati、Prateek Yadav、Anand Louis、Madhav Nimishakavi、Vikram Nitin、Partha Talukdar&#xff09;【NeurIPS 2019】 2 Conclision This paper proposes H…

爬虫解析——Xpath的安装及使用(五)

目录 一、Xpath插件的安装 二、安装 lxml 三、Xpath解析文件 1.解析本地文件 &#xff08;1&#xff09;导入本地文件 &#xff08;2&#xff09;解析本地文件 2.服务器文件解析 &#xff08;1&#xff09;获取网页源码 &#xff08;2&#xff09;解析服务器响应文件 …

SQL进阶 | 自连接

概述 SQL的自连接是指在一个SQL表中&#xff0c;使用自身表格中的实例进行联接并查询的操作。自连接通常使用别名来标识一个表格&#xff0c;在自连接中&#xff0c;表格被视为两个不同的表格&#xff0c;并分别用不同的别名来标识。然后&#xff0c;在WHERE子句中使用这些别名…

【c】数组元素移动

本题的难点之处就是不让你创建新的数组&#xff0c;而且移动的距离也没有给限制&#xff0c;比如有7个数&#xff0c;本题没有限制必须移动距离小于7&#xff0c;也可能移动的距离大于7&#xff0c;甚至更多&#xff0c;下面附上我的代码 #include<stdio.h>int main() {…

ERA5逐时、逐日、逐月气象数据的手动下载与Python代码批量下载方法

本文介绍在ERA5气象数据的官方网站中&#xff0c;手动下载、Python代码自动批量下载逐小时、逐日与逐月的ERA5气象数据各类产品的快捷方法。 ERA5&#xff08;fifth generation ECMWF atmospheric reanalysis of the global climate&#xff09;是由欧洲中期天气预报中心&#…

千帆竞渡,鸿蒙已过万重山

近期&#xff0c;华为宣布其自主研发的鸿蒙Next系统将不再兼容Android系统&#xff0c;而是完全独立运营。 也就是说&#xff0c;你的 Android APK 已经不能在 HarmonyOS NEXT 上运行&#xff0c;因为系统已经不存在 AOSP 代码&#xff0c;甚至没有 JVM。 此举意味着鸿蒙系统…

SSD在AI发展中的关键作用:从高速缓存到数据湖-1

随着人工智能技术的飞速发展&#xff0c;存储在其中发挥着至关重要的作用。特别是在AI训练过程中&#xff0c;存储SSD&#xff08;固态硬盘&#xff09;的高性能和可靠性对于提升训练效率和保证数据安全具有不可替代的作用。 存储SSD在AI发展中的作用和趋势&#xff0c;存储将…

css的介绍与实战(有实现案例)

目录 css的简单介绍 css的基础选择器 css的字体属性&#xff08;背下来&#xff09; css的文本属性&#xff08;背下来&#xff09; css的引入方式&#xff08;背下来&#xff09; 实战案例 css的简单介绍 HTML 的局限性 说起 HTML&#xff0c;这其实是个非常单纯的家伙…