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

news2024/11/17 3:32:37

宿主机环境: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 nginx
    
    MAINTAINER Hunter4J
    
    COPY 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.coloradmin.cn/o/814098.html

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

相关文章

leetcode 面试题 0106.字符串压缩

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;面试题 0106.字符串压缩 思路&#xff1a; 开辟一个新的空间&#xff08;空间要大一点&#xff0c;因为可能压缩后的字符串比原字符串大&#xff09;&#xff0c;然后遍历原字符串统计当前字符的个数&#xff0c;再写入到…

使用vmd渲染并保存指定分辨率的图片

准备TCL脚本文件 # 设置渲染分辨率为1920x1080,600dpi render TachyonInternal out.tga width 1920 height 1080 dpi 600# 启用抗锯齿选项 display antialias on运行TCL 输入&#xff1a; source render.tcl使用Photoshop打开输出的out.tga文件并保存常用图片格式

【蓝桥杯备考资料】如何进入国赛?

目录 写在前面注意事项数组、字符串处理BigInteger日期问题DFS 2013年真题Java B组世纪末的星期马虎的算式振兴中华黄金连分数有理数类&#xff08;填空题&#xff09;三部排序&#xff08;填空题&#xff09;错误票据幸运数字带分数连号区间数 2014年真题蓝桥杯Java B组03猜字…

RK3568平台开发系列讲解(应用篇)输入设备应用编程

🚀返回专栏总目录 文章目录 一、输入设备介绍二、input 子系统三、读取输入设备四、按键应用编程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将讲解输入设备应用编程。 一、输入设备介绍 输入设备是指可以接收用户输入的设备,例如键盘、鼠标、触摸屏等…

41. linux通过yum安装postgresql

文章目录 1.下载安装包2.关闭内置PostgreSQL模块:3.安装postgresql服务:4.初始化postgresql数据库:5.设置开机自启动:6.启动postgresql数据库7.查看postgresql进程8.通过netstat命令或者lsof 监听默认端口54329.使用find命令查找了一下postgresql.conf的配置位置10.修改postgre…

保姆级秋招教程之简历篇

大家好&#xff0c;我是千寻哥&#xff0c;个人简历在程序员求职过程中扮演着至关重要的角色。 今天我将详细给大家介绍一下写简历的必备要素和布局&#xff0c;同时强调应避免的“坑”&#xff01; 希望能通过这些技巧&#xff0c;能帮助程序员打造一份出色的简历&#xff0c;…

Python - print

文章目录 1. end‘’2. 未完待续~ 1. end‘’ 如果没有end‘’&#xff0c;每次print语句都会自动换行&#xff0c;而有了这个语句&#xff0c;数据就不会自动换行&#xff0c;而是在输出的数据后面加上空格&#xff08;空格数取决于引号里面的空格数&#xff09;示例&#xf…

Vulnhub: hacksudo: search靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.170 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.170 80端口目录爆破 feroxbuster -k -d 1 --url http://192.168.111.170 -w /opt/zidian/SecLists-2022.2/Discovery/Web…

计网 第三章错题整理 (3.4以后)

3.4 ③ 发送窗口不能大于接收窗口 否则窗口大小大于序号范围一般的时候 超时重传接收方没法辨别是新帧还是旧帧 本题有歧义 因为编号个数可以自定义的话&#xff0c;信道利用率都可达到百分之百 数据帧长度为128B的话 发送同样一个比特序列&#xff0c;需要更多的比特数 所以要…

7、单元测试--测试RestFul 接口

单元测试–测试RestFul 接口 – 测试用例类使用SpringBootTest(webEnvironment WebEnvironment.RANDOM_PORT)修饰。 – 测试用例类会接收容器依赖注入TestRestTemplate这个实例变量。 – 测试方法可通过TestRestTemplate来调用RESTful接口的方法。 测试用例应该定义在和被测…

【多模态】22、UniDetector | 检测开放世界中的一切!(CVPR2023)

文章目录 一、背景二、方法2.1 UniDetector 框架结构2.2 Heterogeneous Label Space Training2.3 open-world inference 三、效果3.1 数据集3.2 Object Detection in the Open World3.3 Object Detection in the Closed World3.4 Object Detection in the Wild3.5 Comparison w…

msf 渗透基础篇(基本命令)

一 Metasploit 目录结构 以 kali 为例&#xff0c;几个关键路径&#xff0c;熟悉一下&#xff0c;为了更方便的查找。 1、msf 的安装路径&#xff1a; ┌──(root㉿kali)-[/usr/share/metasploit-framework] └─# ls app documentation metasploit-framework.gemspec…

力扣 746. 使用最小花费爬楼梯

题目来源&#xff1a;https://leetcode.cn/problems/min-cost-climbing-stairs/description/ C题解1&#xff1a;动态规划。虽然我的本意是跳到第i个台阶的花费&#xff0c;但代码写着写着就歪了。。 class Solution { public:int minCostClimbingStairs(vector<int>&am…

李群李代数

0.知识回顾 描述旋转本身的矩阵叫做旋转矩阵&#xff0c;旋转矩阵是一个行列式为1的正交矩阵 &#xff0c;反之&#xff0c;行列式为1的正交矩阵也是一个旋转矩阵。将n维旋转矩阵的集合定义如下&#xff1a; S O ( n ) { R ∈ R n ∗ n ∣ R R T I &#xff0c; d e t ( R …

事件标志组

Q: 什么是事件标志组&#xff1f; A: 事件标志位&#xff1a;表明某个事件是否发生&#xff0c;联想&#xff1a;全局变量 flag。通常按位表示&#xff0c;每一个位表示一个事件&#xff08;高8位不算&#xff09; 事件标志组是一组事件标志位的集合&#xff0c; 可以简单的理…

Android应用开发(24)启用广色域(wideColorGamut)

Android应用开发学习笔记——目录索引 参考android官网&#xff1a; 使用广色域内容增强图形效果 | Android 开发者 | Android Developers ColorSpace | Android Developers Wide Color Photos Are Coming to Android: Things You Need to Know to be Prepared 广色域…

redis主从复制 哨兵模式

目录 1.主从 1.主从概念 2.作用 3.主从流程 2.哨兵 1.哨兵核心 2.原理 3.作用 4.结构 3.案例 主从搭建 哨兵搭建 1.主从 1.主从概念 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(Master)&#xff0c;后者…

Psim 2022电力仿真--锁相环控制程序

目录 目录 1.原理 2.代码实现 3.仿真实现 4.仿真结果 5.讨论 1.原理 三相锁相环是一种用于控制交流&#xff08;AC&#xff09;信号的相位、频率和波形的电路&#xff0c;其原理和应用也广泛用于电源领域。使用三相锁相环可以使交流电源输出的电压稳定、精准地与输入信号…

Kotlin基础(九):对象和委托

前言 本文主要讲解kotlin对象和委托。 Kotlin文章列表 Kotlin文章列表: 点击此处跳转查看 目录 1.1 对象 在Kotlin中&#xff0c;对象&#xff08;Object&#xff09;是一个具有特殊用途的单例实例。它是一种创建单个实例的方式&#xff0c;确保在整个应用程序中只存在一个特…

C语言:扫雷(递归+清屏)详细讲解

目录 一.前言 二.功能功能实现 1.游戏菜单/雷盘定义 menu: 雷盘定义&#xff1a; 2.定义布局(数组)/初始化雷盘 数组&#xff1a; 初始化雷盘: 3.打印棋盘 4.布置雷&#xff08;利用随机数&#xff09; 5.排查雷(判断周围雷) 1.判断周围雷数&#xff1a; 2.递归排查…