Dockerfile介绍及创建流程

news2024/9/22 1:03:46

什么是Dockerfile

Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),用于构建镜像。每一条指令构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建。

Dockerfile 用于指示 docker image build 命令自动构建Image的源代码是纯文本文件

为什么要使用Dockerfile

日后用户可以将自己应用打包成镜像,这样就可以让我们应用进行容器运行.还可以对官方镜像做扩展,以打包成我们生产应用的镜像。

docker build工作原理

docker build  -t ImageName:TagName dir
  • -t − 给镜像加一个Tag
  • ImageName − 给镜像起的名称
  • TagName − 给镜像的Tag名
  • Dir − Dockerfile所在目录

Docker 在运行时分为 Docker 引擎(也就是服务端守护进程)和客户端工具。Docker 的引擎提供了一组 REST API,被称为 Docker Remote API ,而如 docker 命令这样的客户端工具,则是通过这组 API 与 Docker 引擎交互,从而完成各种功能。因此,虽然表面上我们好像是在本机执行各种 docker 功能,但实际上,一切都是使用的远程调用形式在服务端(Docker 引擎)完成。也因为这种 C/S 设计,让我们操作远程服务器的 Docker 引擎变得轻而易举。

Dockerfile常用指令

示例

创建Dockerfile文件

FROM centos:7
​
#作者信息

MAINTAINER "shizh"

#工作目录

WORKDIR /usr/local/src/

#定义环境变量

ENV NG_VERSION nginx-1.21.0

#安装epel仓库

RUN yum -y install epel-release

#安装wget

RUN yum -y install wget

#下载nginx文件并解压

RUN wget http://nginx.org/download/$NG_VERSION.tar.gz && tar xzvf $NG_VERSION.tar.gz

#安装编译依赖包

RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel && yum install -y pcre-devel libxslt-devel gd-devel GeoIP GeoIP-devel GeoIP-data

#清理仓库

RUN yum clean all

#创建nginx用户

RUN useradd -M -s /sbin/nologin nginx

#切换工作目录

WORKDIR /usr/local/src/$NG_VERSION

#编译安装nginx

RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install

#复制测试页面到容器中

ADD index.html /usr/local/nginx/html

#设置容器中要挂在到宿主机的目录

VOLUME /usr/local/nginx/html

#设置sbin环境变量

ENV PATH /usr/local/nginx/sbin:$PATH

#暴露80端口

EXPOSE 80/tcp

ENTRYPOINT ["nginx"]

CMD ["-g","daemon off;"]

#当ENTRYPOINT和CMD连用时,CMD的命令是ENTRYPOINT命令的参数,两者连用相当于nginx -g "daemon off;"而当一起连用的时候命令格式最好一致(这里选择的都是json格式的是成功的,如果都是sh模式可以试一下)

#创建一个index.html文件,用于显示页面

<html>

<head></head>

<body>

<h1>Hello World</h1>

</body>

</html>

#执行构建镜像语句

> docker build -t nginx:0.0.1 .​​​​​​​

#查看构建的镜像

> docker inspect nginx:0.0.1

#结果JSON

[
    {
        "Id": "sha256:97075f3916b57bc7057dc619623ccee5fa8fe0b8268caedc171710a9289e1ceb",
        "RepoTags": [
            "nginx:0.0.1"
        ],
        "RepoDigests": [],
        "Parent": "sha256:0af4cc893f3413c96550aeeb70a4dbacf80a131becc7038b100ff190476edd0a",
        "Comment": "",
        "Created": "2022-08-24T06:20:00.75041395Z",
        "Container": "50888b1331987bc12d367a039e10f70904fe49d98a9e67602e35f478606c34b4",
        "ContainerConfig": {
            "Hostname": "50888b133198",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NG_VERSION=nginx-1.21.0"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"-g\" \"daemon off;\"]"
            ],
            "Image": "sha256:0af4cc893f3413c96550aeeb70a4dbacf80a131becc7038b100ff190476edd0a",
            "Volumes": {
                "/usr/local/nginx/html": {}
            },
            "WorkingDir": "/usr/local/src/nginx-1.21.0",
            "Entrypoint": [
                "nginx"
            ],
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20201113",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS",
                "org.opencontainers.image.created": "2020-11-13 00:00:00+00:00",
                "org.opencontainers.image.licenses": "GPL-2.0-only",
                "org.opencontainers.image.title": "CentOS Base Image",
                "org.opencontainers.image.vendor": "CentOS"
            }
        },
        "DockerVersion": "20.10.17",
        "Author": "\"zhbr_zyn\"",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NG_VERSION=nginx-1.21.0"
            ],
            "Cmd": [
                "-g",
                "daemon off;"
            ],
            "Image": "sha256:0af4cc893f3413c96550aeeb70a4dbacf80a131becc7038b100ff190476edd0a",
            "Volumes": {
                "/usr/local/nginx/html": {}
            },
            "WorkingDir": "/usr/local/src/nginx-1.21.0",
            "Entrypoint": [
                "nginx"
            ],
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20201113",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS",
                "org.opencontainers.image.created": "2020-11-13 00:00:00+00:00",
                "org.opencontainers.image.licenses": "GPL-2.0-only",
                "org.opencontainers.image.title": "CentOS Base Image",
                "org.opencontainers.image.vendor": "CentOS"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 1127213093,
        "VirtualSize": 1127213093,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/docker_data/overlay2/efb8993f117e32e0994e907a99b89a724a2739b0fcb1e4138281d4bd05c0c7b7/diff:/docker_data/overlay2/78a1f799e7f74d2d8c922821912f83208ebe70bd450455fe217a2e97613c2e2a/diff:/docker_data/overlay2/5d5137e53eff53a800bb1e815f5cfcc1f68b8413e57cdb2a39015842dea0941c/diff:/docker_data/overlay2/d1df391b231a4595bc0ac2c854a36cc697e65f033084c210a702a51ee3ec627d/diff:/docker_data/overlay2/ef1f50c4a5e8fcecaad18db0540a2618fa3bbce6081ca2e488b7013799e5efea/diff:/docker_data/overlay2/e8ac2e0d9a4f1055db1382eb9d40a60cd112e2f9efeff44417767a71c83fd2dc/diff:/docker_data/overlay2/479006f3fcdef88500c53833edcd235c7c4b9bb19219258639d7ae79937b8daf/diff:/docker_data/overlay2/d23636ff691c3c062f5f2625337b06d4e095177d3aa9b58f03a5806cc6f7f036/diff",
                "MergedDir": "/docker_data/overlay2/37a0b97cbed1ac629e279689ed0a70ebd362cbda2a61295ada513a4aca977a16/merged",
                "UpperDir": "/docker_data/overlay2/37a0b97cbed1ac629e279689ed0a70ebd362cbda2a61295ada513a4aca977a16/diff",
                "WorkDir": "/docker_data/overlay2/37a0b97cbed1ac629e279689ed0a70ebd362cbda2a61295ada513a4aca977a16/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02",
                "sha256:85a6b441826628c36ccc1fb9ba0a2cc59a2f08d966655bdd9d86b5d2030094f7",
                "sha256:9d7711266a016d104d4e8affd6984f852baca1f64c3045e5c2d53fa47c33dc42",
                "sha256:4436d938df2a9c1e938b07b35645839ede499ef7d14a5cc16811b7b91f587acc",
                "sha256:da2357cf68b4532793baf3b4663053cf241555ecde8b2762746883aa513e443c",
                "sha256:ff505e9fa608e7169a2fa9b3e03e7a7c002c2894f013c4de305f018910dbf8ae",
                "sha256:2ed6f17047f797fb8ba17e6db8f92893e0887bda6253c2b48f3a2f74e4c77e1d",
                "sha256:77ba3416ffe3e1a5db1db88a8954ad54bda039ed4f69b3d17b62fe8102a3cd0b",
                "sha256:dbc575b44a6d99bc06984756d1cdf13357a63addf6b3886234fbc4e0839e3331"
            ]
        },
        "Metadata": {
            "LastTagTime": "2022-08-24T14:20:00.762344685+08:00"
        }
    }
]​​​​​​​

​

运行docker镜像

> docker run -it --name mynginx -p 8123:80 -d nginx:0.0.1

查看容器是否启动起来

> docker ps | grep mynginx

6352fc93060c   nginx:0.0.1             "nginx -g 'daemon of…"   12 minutes ago   Up 12 minutes   0.0.0.0:8123->80/tcp, :::8123->80/tcp                                                           mynginx

验证结果

浏览器查看

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

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

相关文章

2024最新AI创作系统,ChatGPT商业运营系统,AI绘画系统源码,AI视频生成系统,AI智能体、文档分析、多模态模型一站式AIGC解决方案

一、人工智能 人工智能技术正在迅速发展&#xff0c;AI语言模型、AI绘画、AI视频在多个领域都有广泛的应用。它们不仅在科技创新方面表现出色&#xff0c;还在艺术创作、内容生产和商业应用中展现出巨大的潜力。 AI语言模型可以用于自动化内容生成、智能客服、文本翻译等方面…

科技云报道:产业为根大模型应用为擎,容联云推动企业营销服场景重塑

科技云报道原创。 “没有应用&#xff0c;光有一个基础模型&#xff0c;不管是开源还是闭源&#xff0c;一文不值。”在2024世界人工智能大会&#xff08;WAIC 2024&#xff09;现场&#xff0c;百度创始人、董事长兼首席执行官李彦宏直言。 国产大模型的种类越发丰富&#x…

浅谈大模型工程化中的安全防护

之前在社区看很多人谈论大模型&#xff0c;感觉大模型无所不能。但是近期我也是陆续做了两个大模型应用项目&#xff0c;深刻感受到目前阶段大模型还是存在很多问题&#xff0c;深刻体验到了大模型在迈向工程化的过程中任重而道远。 今天把发现的一些主要问题粗略梳理&#xff…

CAN总线学习

can主要用于汽车、航空等控制行业&#xff0c;是一种串行异步通信方式&#xff0c;因为其相较于其他通信方式抗干扰能力更强&#xff0c;更加稳定。原因在于CAN不像其他通信方式那样&#xff0c;以高电平代表1&#xff0c;以低电平代表0&#xff0c;而是通过电压差来表示逻辑10…

树莓派关机

文件 shutdown.sh #!/usr/bin/bash sudo shutdown -r nowpython 文件开头添加 #!/usr/bin/python3

在VSCode上创建Vue项目详细教程

1.前期环境准备 搭建Vue项目使用的是Vue-cli 脚手架。前期环境需要准备Node.js环境&#xff0c;就像Java开发要依赖JDK环境一样。 1.1 Node.js环境配置 1&#xff09;具体安装步骤操作即可&#xff1a; npm 安装教程_如何安装npm-CSDN博客文章浏览阅读836次。本文主要在Win…

企业全历史行为数据 让你对竞争对手的一切清清楚楚

关于商业竞争&#xff0c;在刚进入信息时代的那些年&#xff0c;人们说“现代商战就是信息战”&#xff0c;强调用非对称的或者更快获得的信息来赢得竞争&#xff1b;近些年进入大数据时代&#xff0c;人们又说“得数据者得天下”&#xff0c;发现“数据算法”有很多妙用&#…

890亿,瞄准集成电路和人工智能等领域!

近日&#xff0c;上海市政府近期宣布拟设立总规模达890亿元的三只产业先导母基金&#xff0c;专注于集成电路、生物医药和人工智能三大先导产业的发展。这一举措旨在推动这些领域的创新和产业升级&#xff0c;同时也响应了国家战略新兴产业的发展需求&#xff0c;为支持上海市集…

pytest测试框架+allure超详细教程

1、测试识别和运行 文件识别&#xff1a; 在给定的目录中&#xff0c;搜索所有test_.py或者_test.py文件 用例识别&#xff1a; Test*类包含的所有test_*的方法&#xff08;测试类不能有__init__方法&#xff09;不在类中的所有test_*方法pytest也能执行unit test写的用例和…

一个真正有本事的人,往往有这4个特征,遇见一定要深交!

点击上方△腾阳 关注 转载请联系授权 你好&#xff0c;我是腾阳。 根据社会学和心理学的研究&#xff0c;一个人在其一生中可能会有更深层次交往的人数通常是有限的。 英国人类学家罗宾邓巴提出了著名的“邓巴数字”&#xff0c;即一个人能够维持稳定社交关系的人数大约在15…

使用嵌入式知识打造智能手环:nRF52蓝牙开发实战(C++/BLE/传感器)

项目概述 现代人越来越注重健康管理&#xff0c;智能穿戴设备应运而生。本项目旨在利用低功耗蓝牙芯片nRF52832&#xff0c;结合加速度计、心率传感器、陀螺仪等传感器&#xff0c;开发一款功能完善、性能稳定的智能运动手环。该手环能够实时采集用户的运动数据和生理指标&…

c++ map operator[] 陷阱

背景&#xff1a;以前做的一个功能&#xff0c;在程序中保存了一个map&#xff0c;这个map的类型是这样的&#xff1a; std::map<int, std::set<自定义类型>>&#xff0c;一般情况下这个 set 只有一个元素&#xff0c;特殊情况是允许set有两个元素。现在是项目测试…

线程间通信与变量修改感知:几种常用方法

线程间通信与变量修改感知&#xff1a;几种常用方法 1. 使用volatile关键字2. 使用synchronized关键字3. 使用wait/notify/notifyAll机制4. 使用轮询&#xff08;Polling&#xff09; &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java…

入选中国信通院首期全景图,美创数据安全再显“专、精、全”

近日&#xff0c;中国信息通信研究院&#xff08;简称“中国信通院”&#xff09;正式发布《数字安全护航技术能力全景图》&#xff0c;共划分为14项一级目录103项二级目录&#xff0c;从391家报名厂商中审核评估&#xff0c;共收录147家厂商。 美创科技入选21个细分领域&#…

unity3d脚本使用start,updata,awake

最近学了一下unity&#xff0c;脚本编写用的c#&#xff0c;虽说没学过c#但是勉强根据教学还能写点代码。 在这里我来记录一下在我学习过程中感觉最重要的东西 消息函数&#xff1a; 在我们创建一个脚本文件的时候&#xff0c;我们首先可以看到两个默认给你写出来的函数。 这两…

数据结构——单链表与双链表(java实现)

文章目录 前言链表&#xff1a;链表分类&#xff1a; 一 单链表单链表的实现&#xff1a;节点的实现头插法&#xff1a;尾插法在任意位置插入数据&#xff1a;查找单链表中是否有key关键字&#xff08;即是否有值为key的数据&#xff09;删除第一次出现的关键字为key的节点删除…

深度解析:如何优雅地删除GitHub仓库中的特定commit历史

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

2024.7.15 csp-j第一场模拟赛赛后总结

题目&#xff1a; T1&#xff1a;P1211 [USACO1.3] 牛式 Prime Cryptarithmhttps://www.luogu.com.cn/problem/P1211 T2&#xff1a;P2035 [USACO08JAN] iCow Bhttps://www.luogu.com.cn/problem/P2035 T3&#xff1a;P6207 [USACO06OCT] Cows on Skates Ghttps://www.luogu…

CUDA cuDNN和pytorch(GPU版)的完整安装教程

​ * 说明: 本教程使用wsl-ubuntu20.04, 其他发行版linux的命令可能有所区别. *实测机型: i5-13500HX | RTX 4060 Laptop 一、下载CUDA12.X版本 这里以下载CUDA12.2为例。 前往cuda-12.2下载页, 按照如图方式选择合适的选项&#xff1a; 按照官方给出的命令&#xff0c; 在b…

《昇思25天学习打卡营第22天|基于MindSpore的GPT2文本摘要》

#学习打卡第22天# 1. 数据集 1.1 数据下载 使用nlpcc2017摘要数据&#xff0c;内容为新闻正文及其摘要&#xff0c;总计50000个样本。 from mindnlp.utils import http_get from mindspore.dataset import TextFileDataset# download dataset url https://download.mindspor…