从零开始学Docker(三):DockerFile镜像定制

宿主机环境:RockyLinux 9

前言,定制docker镜像的方式有两种:

  • 手动修改容器内容,然后docker commit提交容器为新的镜像
  • 通过在dockerfile中定义一系列的命令和参数构成的脚本,然后这些命令应用于基础镜像,依次添加层, 最终生成一个新的镜像。极大的简化了部署工作。

Dockfile简介

镜像是多层存储,每一层在前一层的基础上进行修改;

容器也是多层存储,以镜像为基础层,在其基础上加一层作为容器运行时的存储层。

官方提供的dockerfile实例

https://github.com/CentOS/CentOS-Dockerfiles

Dockerfile命令

 Dockfile实践

需求,通过dockfile,构建nginx镜像,且运行容器后,生成页面显示“云原生基础,从零开始学Docker!”

  1. 编辑dockfile文件
    [root@192 ~]# mkdir learn_docker
    [root@192 learn_docker]# ls
    [root@192 learn_docker]# cat dockerfile 
    FROM nginx
    RUN echo '<meta charset=utf8>云原生基础,从零开始学Docker!' > /usr/share/nginx/html/index.html
  2. 根据dockfile构建镜像
    [root@192 learn_docker]# docker build .[root@192 learn_docker]# docker images 
    REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
    <none>         <none>    b268ad835d4c   12 minutes ago   187MB
    nginx_hunter   latest    53807fe50cad   6 hours ago      187MB
    nginx          latest    89da1fb6dcb9   31 hours ago     187MB# 对其生成的镜像重命名 repository和tag
    [root@192 learn_docker]# docker tag b268ad8 my_nginx
    [root@192 learn_docker]# docker images 
    REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
    my_nginx       latest    b268ad835d4c   13 minutes ago   187MB
    nginx_hunter   latest    53807fe50cad   6 hours ago      187MB
    nginx          latest    89da1fb6dcb9   31 hours ago     187MB
    
  3. 根据构建镜像创建容器并运行
    # 创建并启动nginx容器
    [root@192 learn_docker]# docker run -d -p 86:80 --name my_nginx001 my_nginx
    2c4ee3f20fff7f15af0b9ace26dc2c246810ef8240751849a9c4fc4bea8bf39a
    [root@192 learn_docker]# docker ps 
    CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS             PORTS                               NAMES
    2c4ee3f20fff   my_nginx   "/docker-entrypoint.…"   5 seconds ago   Up 4 seconds       0.0.0.0:86->80/tcp, :::86->80/tcp   my_nginx001
    6627aa9383d9   nginx      "/docker-entrypoint.…"   6 hours ago     Up About an hour   0.0.0.0:85->80/tcp, :::85->80/tcp   nginx001
    
  4. 验证结果 

Dockfile构建一个网站镜像

这里以我之前关注过的一个前端框架Demo为例

文档地址:Vben Admin

  1.  打包前端框架,并上传至宿主机指定目录
    [root@192 html]# pwd
    /root/learn_docker/html
    [root@192 html]# ls
    # 这里就是我们打包好的前段静态文件
    _app.config.js  assets  favicon.ico  index.html  logo.png  resource
    
  2. 编写dockfile
    [root@192 learn_docker]# cat /root/learn_docker/dockerfile FROM nginxMAINTAINER Hunter4JCOPY html/ /usr/share/nginx/html/EXPOSE 5173
    

    构建的nginx实例中,我使用的是默认的nginx.conf配置,文件位置在 /etc/nginx/conf.d/default.conf 

    server {listen       80;listen  [::]:80;server_name  localhost;#access_log  /var/log/nginx/host.access.log  main;location / {root   /usr/share/nginx/html;index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}
    }
    
  3. 生成镜像
    [root@192 learn_docker]# docker build -t myvben .[root@192 learn_docker]# docker images 
    REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
    myvben         latest    fae1690423df   20 minutes ago   194MB
  4. 创建并运行容器

    [root@192 learn_docker]# docker run -d -p 8080:80 --name myvben001 myvben
    153421a01df490b70a238ed7706ded3d4e9efd2bf477e0c5497c4608a125dec2[root@192 learn_docker]# docker ps 
    CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS         PORTS                                   NAMES
    153421a01df4   myvben     "/docker-entrypoint.…"   3 seconds ago   Up 3 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   myvben001
  5. 浏览器验证容器中程序运行情况

 至此,我们在容器中第一个运行的项目已经部署成功了

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

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

相关文章

websocket服务端大报文发送连接自动断开分析

概述 当前springboot版本&#xff1a;2.7.4 使用依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>现象概述&#xff1a; 客户端和服务端已经有心跳…

iframe跨域解决方案

在 Web 开发中&#xff0c;跨域是指在一个域&#xff08;例如&#xff0c;https://www.example.com&#xff09;的页面中请求了另一个域&#xff08;例如&#xff0c;https://api.example.com&#xff09;的资源&#xff0c;浏览器出于安全考虑会阻止这样的请求。为了解决 ifra…

Jmeter如何添加插件

一、前言 ​ 在我们的工作中&#xff0c;我们可以利用一些插件来帮助我们更好的进行性能测试。今天我们来介绍下Jmeter怎么添加插件&#xff1f; 2023最新Jmeter接口测试从入门到精通&#xff08;全套项目实战教程&#xff09; 二、插件管理器 ​ 首先我们需要下载插件管理器j…

机器学习 | Python实现NARX模型预测控制

机器学习 | Python实现NARX模型预测控制 目录 机器学习 | Python实现NARX模型预测控制效果一览基本介绍研究内容程序设计参考资料效果一览 基本介绍 机器学习 | Python实现NARX模型预测控制 研究内容 贝叶斯黑盒模型预测控制,基于具有外源输入的非线性自回归模型的预期自由能最…

地址空间细致入微+深入了解页表

目录 地址空间保存了什么&#xff1f; 页表到底是怎么存储的 我们都知道&#xff0c;我们进程看到的空间其实是虚拟内存&#xff0c;真正的内存是需要页表的映射才能找到真正的物理内存&#xff0c;那么我我们有两个问题的引出那么进程地址空间是保存了什么呢&#xff1f;页表…

HCIP中期考试实验

目录 考试需求 公司分部&#xff1a; 公司总部&#xff1a; 公司骨干网&#xff1a; 优化&#xff1a; 实验步骤&#xff1a; 步骤一&#xff1a;跟具题意配置IP地址&#xff0c;并创建拓扑 R1~R9配置 R10 &#xff1a;配置同时划分VLAN LSW4&#xff1a;划分VLAN交换…

Android 面试题 虚拟机、进程、线程 七

&#x1f525; 安卓虚拟机 &#x1f525; 虽然Android程序是使用Java语言开发的&#xff0c;当然&#xff0c;现在也可以使用kotlin语言。但是实际上我们开发出来的Android程序并不能运行在JVM上&#xff0c;而是只能运行在一个类似JVM的Android虚拟机上。Android虚拟机有两种&…

Spring Boot 日志

Spring Boot 日志 ​ 在 Spring Boot 里面是有一个内置了的日志框架的&#xff0c;所以才能运行的时候在控制台打印出来。默认情况下的日志是系统定义和打印的&#xff0c;但我们也可以自行自定义打印日志。 日志的好处&#xff1a; 1、发现问题和定位问题&#xff1b;☆&am…

QT编写的串口助手

QT编写的串口助手 提前的知识 创建UI界面工程 找帮助文档 添加串口的宏

亚马逊品牌推荐金计划:通过亚马逊外营销活动赚取奖金!

亚马逊美国站发布公告称新推出的品牌推荐金计划可以让卖家在通过亚马逊外营销活动的销售中获得奖金&#xff0c;当卖家将非亚马逊营销流量引导至亚马逊时&#xff0c;您将获得促销产品以及客户在接下来的两周内购买的任何品牌产品平均销售额的10%的奖金&#xff0c;以下是公告内…

【NLP】训练chatglm2的评价指标BLEU,ROUGE

当进行一定程度的微调后&#xff0c;要评价模型输出的语句的准确性。由于衡量的对象是一个个的自然语言文本&#xff0c;所以通常会选择自然语言处理领域的相关评价指标。这些指标原先都是用来度量机器翻译结果质量的&#xff0c;并且被证明可以很好的反映待评测语句的准确性&a…

ubuntu服务器配置ftp服务

需求&#xff1a;配置ftp服务用于在windows电脑上直接浏览、下载、上传ubuntu服务器上的文件&#xff0c;用于文件共享&#xff0c;方便实用 效果&#xff1a;用户打开windows资源管理器后输入ftp://xxx.xxx.xxx.xxx &#xff08;公网IP地址&#xff09;后&#xff0c;即可浏览…

ChatGPT及其工作原理;OpenAI申请注册商标GPT-5,引发关注

&#x1f989; AI新闻 &#x1f680; OpenAI申请注册商标GPT-5&#xff0c;引发关注 摘要&#xff1a;OpenAI已在上月18日申请注册商标GPT-5&#xff0c;显示该模型将提供文本生成、自然语言理解、语音转录、翻译、分析等功能。此前OpenAI曾表示尚未开始训练GPT-4的后继者GPT…

Atlas200DK A2联网实战

文章目录 1.Atlas原始网络信息2. 开发板联网2.1 使用Type-c 连接开发板2.2 修改本地网络适配器2.3 修改开发板网络信息2.4 测试外网连接 1.Atlas原始网络信息 Type-C 网口 ETH0 网口 ETH1 网口 2. 开发板联网 2.1 使用Type-c 连接开发板 使用xshell 等ssh终端登录开发板&…

(树) 剑指 Offer 33. 二叉搜索树的后序遍历序列 ——【Leetcode每日一题】

❓剑指 Offer 33. 二叉搜索树的后序遍历序列 难度&#xff1a;中等 输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true&#xff0c;否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树&#xff1…

Linux lvs负载均衡

LVS 介绍&#xff1a; Linux Virtual Server&#xff08;LVS&#xff09;是一个基于Linux内核的开源软件项目&#xff0c;用于构建高性能、高可用性的服务器群集。LVS通过将客户端请求分发到一组后端服务器上的不同节点来实现负载均衡&#xff0c;从而提高系统的可扩展性和可…

PHP正则绕过解析

正则绕过 正则表达式PHP正则回溯PHP中的NULL和false回溯案例案例1案例2 正则表达式 在正则中有许多特殊的字符&#xff0c;不能直接使用&#xff0c;需要使用转义符\。如&#xff1a;$,(,),*,,.,?,[,,^,{。 这里大家会有疑问&#xff1a;为啥小括号(),这个就需要两个来转义&a…

智能制造企业如何建立大客户管理模型?

01、大客户管理依然是智能制造企业经营的黄金定律 《连线》杂志创始人凯文凯利&#xff08;Kevin Kelly&#xff09;在《技术元素》一书中写道&#xff1a;“数量不是目的&#xff0c;质量才是根本&#xff0c;重视1%的超级用户才是提高效率的关键。” 根据“二八定律”&…

filebeat介绍

1、filebeat概述 Filebeat是用于转发和集中日志数据的轻量级传送工具。Filebeat监视您指定的日志文件或位置&#xff0c;收集日志事件&#xff0c;并将它们转发到Elasticsearch或 Logstash或kafka进行索引 1.1 Filebeat两个主要组件 prospector 和 harvester。 prospector&a…

C++---list常用接口和模拟实现

list---模拟实现 list的简介list函数的使用构造函数迭代器的使用list的capacitylist element accesslist modifiers list的模拟实现构造函数&#xff0c;拷贝构造函数和迭代器begin和endinsert和eraseclear和析构函数 源码 list的简介 list是用双向带头联表实现的一个容器&…