再看dockerfile指令用法:80分钟一口气学完docker+k8s!带你掌握docker+k8s所有核心知识点,全程干货,无废话!

news2024/11/25 7:03:06

dockerfile实践

 需求:通过dockerfile,构建nginx镜像,且容器运行后,生成的页面显示“书季,要攒劲哦~”

#1、穿件dockerfile,注意文件名必须是这个。
[root@Hadoop2 learn_docker]# cat dockerfile 
FROM nginx
RUN echo '<meta charset=utf8>书季,要攒劲哦~' > /usr/share/nginx/html/index.html


#运行该镜像
docker run -d -p 80:80 my-nginx 

构建dockerfile

[root@Hadoop2 learn_docker]# docker build .
[+] Building 0.2s (4/5)                                                                                                                                                                             docker:default
[+] Building 0.3s (4/5)                                                                                                                                                                             docker:default
[+] Building 0.5s (4/5)                                                                                                                                                                             docker:default
[+] Building 0.6s (4/5)                                                                                                                                                                             docker:default
[+] Building 0.6s (6/6) FINISHED                                                                                                                                                                    docker:default
 => [internal] load build definition from dockerfile                                                                                                                                                          0.0s
 => => transferring dockerfile: 136B                                                                                                                                                                          0.0s
 => [internal] load .dockerignore                                                                                                                                                                             0.0s  => => transferring context: 2B                                                                                                                                                                               0.0s  => [internal] load metadata for docker.io/library/nginx:latest                                                                                                                                               0.0s  => [1/2] FROM docker.io/library/nginx                                                                                                                                                                        0.0s  => [2/2] RUN echo '<meta charset=utf8>书季,要攒劲哦~' > /usr/share/nginx/html/index.html                                                                                                                           0.6s
 => exporting to image                                                                                                                                                                                        0.0s
 => => exporting layers                                                                                                                                                                                       0.0s
 => => writing image sha256:a11bcc0eb36abea562c257ded795d2906e4e709bed7deb1f510e452c11afd05f                                                                                                                  0.0s
[root@Hadoop2 learn_docker]# docker images
REPOSITORY                           TAG       IMAGE ID       CREATED         SIZE
<none>                               <none>    a11bcc0eb36a   2 minutes ago   187MB
shujidockerhuzhangao/jingxiangming   latest    e2ce129f8ae8   35 hours ago    559MB
<none>                               <none>    b57d813f9e5d   3 days ago      559MB
redis                                latest    da63666bbe9a   6 days ago      138MB
nginx                                latest    f5a6b296b8a2   2 weeks ago     187MB
centos                               latest    5d0da3dc9764   2 years ago     231MB
[root@Hadoop2 learn_docker]# 

更换镜像名称

[root@Hadoop2 learn_docker]# docker images
REPOSITORY                           TAG       IMAGE ID       CREATED         SIZE
<none>                               <none>    a11bcc0eb36a   2 minutes ago   187MB
shujidockerhuzhangao/jingxiangming   latest    e2ce129f8ae8   35 hours ago    559MB
<none>                               <none>    b57d813f9e5d   3 days ago      559MB
redis                                latest    da63666bbe9a   6 days ago      138MB
nginx                                latest    f5a6b296b8a2   2 weeks ago     187MB
centos                               latest    5d0da3dc9764   2 years ago     231MB

更换镜像名称
[root@Hadoop2 learn_docker]# docker tag a11bcc0eb36a my_nginx
[root@Hadoop2 learn_docker]# docker images
REPOSITORY                           TAG       IMAGE ID       CREATED          SIZE
my_nginx                             latest    a11bcc0eb36a   11 minutes ago   187MB
shujidockerhuzhangao/jingxiangming   latest    e2ce129f8ae8   35 hours ago     559MB
<none>                               <none>    b57d813f9e5d   3 days ago       559MB
redis                                latest    da63666bbe9a   6 days ago       138MB
nginx                                latest    f5a6b296b8a2   2 weeks ago      187MB
centos                               latest    5d0da3dc9764   2 years ago      231MB

构建出的镜像如下

[root@Hadoop2 learn_docker]# docker images
REPOSITORY                           TAG       IMAGE ID       CREATED          SIZE
my_nginx                             latest    a11bcc0eb36a   11 minutes ago   187MB

运行该镜像

[root@Hadoop2 learn_docker]# docker run -d -p 80:80 my_nginx
bed35ba39a9259941777659603e2098051ea2365686191ac4c5b73097a093341
[root@Hadoop2 learn_docker]# docker ps 
CONTAINER ID   IMAGE      COMMAND                   CREATED              STATUS              PORTS                               NAMES
bed35ba39a92   my_nginx   "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp   thirsty_tesla

查看宿主机的80端口。用的虚拟机ip进去看的。

如何下指令该怎么用

#COPY
copy chaoge.py /home/

#支持多个文件,以及通配符形式复制,语法要满足Golang的filepath.Match
copy chaoge& /tmp/cc?.text. /home/

#ADD
ADD chaoge.tgz
RUN Linux命令(XXX修改命令)
 
#CMD在容器内运行某个命令,启动程序
CMD["参数1",“参数2”]
docker不是虚拟机,容器就是一个进程,既然是进程,那么程序在启动的时候就需要指定某些运行参数,这就是CMD指令的作用
[root@Hadoop2 learn_docker]# docker run -it centos
[root@321efadff6f0 /]# exit
exit
[root@Hadoop2 learn_docker]# docker run -it centos bash
[root@3d9f6273908d /]#exit
exit

CMD["/bin/bash"]
[root@Hadoop2 learn_docker]# docker run -it centos /bin/bash
[root@6a4053428167 /]# 

#该容器运行时,执行的命令:
CMD["cat","/etc/os-release"]
#等同于命令行的直接操作:
[root@Hadoop2 learn_docker]# docker run -it centos cat /etc/os-release

容器内运行程序

把宿主机安装,启动nginx的理念放到dockerfile

1、RUN yum install nginx

2、RUN 配置文件修改 sed

3、RUN systemctl start nginx 错,容器内的程序必须在前台执行,你的容器是启动不了的

4、正确的应该是CMD[“nginx”,"-g",“daemon of;”]

 用dockerfile制作镜像

[root@Hadoop2 learn_docker]# vim dockerfile 
[root@Hadoop2 learn_docker]# cat dockerfile 
FROM centos:7.8.2003
RUN rpm --rebuilddb && yum install epel-release -y
RUN rpm --rebuilddb && yum install curl -y
CMD ["curl","-S","http:"//ipinfo.io/ip"]

[root@Hadoop2 learn_docker]# docker build .
[+] Building 59.2s (7/7) FINISHED                                                                                                                                                                   docker:default
 => [internal] load build definition from dockerfile                                                                                                                                                          0.0s
 => => transferring dockerfile: 196B                                                                                                                                                                          0.0s
 => [internal] load .dockerignore                                                                                                                                                                             0.0s
 => => transferring context: 2B                                                                                                                                                                               0.0s
 => [internal] load metadata for docker.io/library/centos:7.8.2003                                                                                                                                            6.8s
 => [1/3] FROM docker.io/library/centos:7.8.2003@sha256:8540a199ad51c6b7b51492fa9fee27549fd11b3bb913e888ab2ccf77cbb72cc1                                                                                     15.9s
 => => resolve docker.io/library/centos:7.8.2003@sha256:8540a199ad51c6b7b51492fa9fee27549fd11b3bb913e888ab2ccf77cbb72cc1                                                                                      0.0s
 => => sha256:afb6fca791e071c66276202f8efca5ce3d3dc4fb218bcddff1bc565d981ddd1e 2.79kB / 2.79kB                                                                                                                0.0s
 => => sha256:9b4ebb48de8dbb85a3d9fbdec4d28a3e2e14912f27b7234c10c1658a05c320a5 75.84MB / 75.84MB                                                                                                             12.6s
 => => sha256:8540a199ad51c6b7b51492fa9fee27549fd11b3bb913e888ab2ccf77cbb72cc1 319B / 319B                                                                                                                    0.0s
 => => sha256:50b9a3bc27378889210f88d6d0695938e45a912aa99b3fdacfb9a0fef511f15a 529B / 529B                                                                                                                    0.0s
 => => extracting sha256:9b4ebb48de8dbb85a3d9fbdec4d28a3e2e14912f27b7234c10c1658a05c320a5                                                                                                                     3.0s
 => [2/3] RUN rpm --rebuilddb && yum install epel-release -y                                                                                                                                                 22.2s
 => [3/3] RUN rpm --rebuilddb && yum install curl -y                                                                                                                                                         13.7s 
 => exporting to image                                                                                                                                                                                        0.6s 
 => => exporting layers                                                                                                                                                                                       0.6s 
 => => writing image sha256:4864d24a31c6a8da2a646ae4aece4dbaf8c4e0dd55feed18eda1c24e5db4c2ff                                                                                                                  0.0s

检查镜像:

[root@Hadoop2 learn_docker]# docker images
REPOSITORY                           TAG       IMAGE ID       CREATED          SIZE
centos_curl                          latest    4864d24a31c6   31 minutes ago   635MB
centos                               latest    4864d24a31c6   31 minutes ago   635MB

运行镜像,生成容器记录,没有前台运行,因此前台立即挂了

运行此镜像
[root@Hadoop2 learn_docker]# docker run centos_shuji
221.237.228.177[root@Hadoop2 learn_docker]# 


[root@Hadoop2 learn_docker]# curl -s http://ipinfo.io/
{
  "ip": "221.237.228.177",
  "hostname": "177.228.237.221.broad.cd.sc.dynamic.163data.com.cn",
  "city": "Chengdu",
  "region": "Sichuan",
  "country": "CN",
  "loc": "30.6667,104.0667",
  "org": "AS4134 CHINANET-BACKBONE",
  "timezone": "Asia/Shanghai",
  "readme": "https://ipinfo.io/missingauth"
}[root@Hadoop2 learn_docker]# 

上述运行正确,但是我想传入一个参数,该怎么办?

发现是无法直接传入参数的,该形式会覆盖镜像中的cmd

就好比把docker镜像,当做一个环境,去执行后面的命令

[root@Hadoop2 learn_docker]# docker run centos_shuji
221.237.228.177[root@Hadoop2 learn_docker]#

[root@Hadoop2 learn_docker]# docker run centos_shuji pwd
/

想要正确的给容器传入一个-I参数该怎么办?

希望容器内能够正确完整执行以下命令

curl -s http://ipinfo.io/ -i

解决方法一:给容器传入新的完整的命令。有违dockerfile精神的方法。

[root@Hadoop2 learn_docker]# docker run centos_shuji  curl -s http://ipinfo.io/ -I
HTTP/1.1 200 OK
access-control-allow-origin: *
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
referrer-policy: strict-origin-when-cross-origin
content-type: application/json; charset=utf-8
content-length: 302
date: Thu, 28 Sep 2023 08:25:32 GMT
x-envoy-upstream-service-time: 1
strict-transport-security: max-age=2592000; includeSubDomains
vary: Accept-Encoding
Via: 1.1 google

[root@Hadoop2 learn_docker]# 

解决方法二:正确的方法应该使用ENTRYPOINT

修改dockerfile,如下:

FROM centos:7.2.1511
RUN rpm --rebuilddb &&  yum install epel-release -y
RUN rpm --rebuilddb &&  yum install curl -y
ENTRYPOINT ["curl","-s","http://ipinfo.io/ip"]

重新构建镜像

[root@Hadoop2 learn_docker]# docker build .
[+] Building 2.8s (7/7) FINISHED                                                                                                                                                                    docker:default
 => [internal] load build definition from dockerfile                                                                                                                                                          0.0s
 => => transferring dockerfile: 204B                                                                                                                                                                          0.0s
 => [internal] load .dockerignore                                                                                                                                                                             0.0s
 => => transferring context: 2B                                                                                                                                                                               0.0s
 => [internal] load metadata for docker.io/library/centos:7.2.1511                                                                                                                                            2.7s
 => [1/3] FROM docker.io/library/centos:7.2.1511@sha256:50cca1e74da4b6a4eb4ade029c8fdd4ee8564776801914d9bd89df8c6344add0                                                                                      0.0s
 => CACHED [2/3] RUN rpm --rebuilddb &&  yum install epel-release -y                                                                                                                                          0.0s
 => CACHED [3/3] RUN rpm --rebuilddb &&  yum install curl -y                                                                                                                                                  0.0s
 => exporting to image                                                                                                                                                                                        0.0s
 => => exporting layers                                                                                                                                                                                       0.0s
 => => writing image sha256:e1050cc4a79dd1425121661373ebbd1b81aae944caf9c630475ae962d3ed3fed    

重新运行该镜像,看结果,以及传入新的参数

[root@Hadoop2 learn_docker]# docker tag e1050cc4a79d centos_curl_new
[root@Hadoop2 learn_docker]# docker run centos_curl_new
221.237.228.177[root@Hadoop2 learn_docker]# 

此时传入的CMD指令,当做了ENTRYPOINT的参数
221.237.228.177[root@Hadoop2 learn_docker]# docker run centos_curl_new -I
HTTP/1.1 405 Method Not Allowed
server: fasthttp
date: Thu, 28 Sep 2023 08:53:09 GMT
content-type: text/plain; charset=utf-8
content-length: 18
allow: GET, OPTIONS
x-envoy-upstream-service-time: 0
strict-transport-security: max-age=2592000; includeSubDomains
Via: 1.1 google


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

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

相关文章

linux opensuse使用mtk烧录工具flashtool

环境 linux发行版&#xff1a;opensuse leap 15.5 工具&#xff1a;SP_Flash_Tool_Selector_exe_Linux_v1.2316.00.100.rar 或其他版本 目标&#xff1a;mtk设备 下载链接 https://download.csdn.net/download/zmlovelx/88382784 或网络搜索。 使用 opensuse可直接解压后使…

HOMER7配置告警

概述 HOMER是一款100%开源的针对SIP/VOIP/RTC的抓包工具和监控工具。 HOMER是一款强大的、运营商级、可扩展的数据包和事件捕获系统&#xff0c;是基于HEP/EEP协议的VoIP/RTC监控应用程序&#xff0c;并可以使用即时搜索、处理和存储大量的信令、RTC事件、日志和统计信息。 …

【数据仓库设计基础(二)】维度数据模型

文章目录 一. 概述二. 维度数据模型建模过程三. 维度规范化四. 维度数据模型的特点五. 维度数据模型1. 星型模式1.1&#xff0e;事实表1.2&#xff0e;维度表1.3&#xff0e;优点1.4&#xff0e;缺点1.5&#xff0e;示例 2. 雪花模式2.1&#xff0e;数据规范化与存储2.2&#x…

PreMaint设备管理系统:实现制药企业的CSV合规性

在当今数字化时代&#xff0c;制药企业越来越依赖计算机化系统来支持其各个方面的运营&#xff0c;从研发到生产再到质量控制。然而&#xff0c;这些系统的使用不仅需要高效性和可靠性&#xff0c;还需要符合法规要求&#xff0c;尤其是药品生产质量管理规范&#xff08;Good M…

新零售革命:可视化助力零售业焕发新生

一、什么是新零售&#xff1f; 新零售是一种融合了传统零售业和数字科技的商业模式&#xff0c;旨在提升零售业的效率、便捷性和个性化。它将线上和线下的零售渠道结合在一起&#xff0c;通过数字技术、大数据分析、人工智能等手段&#xff0c;实现了以下几个主要特征和目标&a…

图像语义分割 FCN图像分割网络详解

图像语义分割 FCN图像分割网络详解 0、介绍1、VGG16网络结构2、转置卷积3、FCN-32S、FCN-16S&#xff0c;FCN-8S网络结构4、损失函数5、膨胀卷积6、FCN(Backbone-ResNet-50)6.1 项目框架6.2 ResNet50网络结构6.3 FCN(Backbone-ResNet-50)网络结构6.4 FCN(Backbone-ResNet-50)模…

基于SpringBoot的大学生就业招聘系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 求职信息管理 首页 招聘信息管理 岗位申请管理 岗位分类 企业管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网信息的飞速发展&#xff0c;大学生就业成为一个难题&#xff0c;好多公司都舍不…

【RV1103】Luckfox Pico RV1103 开发记录

文章目录 对比uboot的差别Linux的差别其他差别编译命令对比板级配置选择spi-nand flashemmc/SD 卡spinand flash烧录差别由于没有原理图--引脚分析 对比 linux defconfiglinux dtsuboot defconfiguboot fragmentluckfox-picosd/tf (emmc)luckfox_rv1106_linux_defconfigrv1103…

澳大利亚海运价格下半年走势

随着全球疫情的逐渐缓解&#xff0c;国际贸易开始逐步恢复。在这个过程中&#xff0c;澳大利亚作为全球重要的贸易伙伴&#xff0c;其海运价格也成为了市场关注的焦点。本文将从下半年的市场预期、影响因素以及行业动态等方面&#xff0c;对澳大利亚海运价格走势进行分析展望。…

祝贺莱佛士学生在ASDA2023设计大赛中获得最高奖项

莱佛士一直主张学生们积极参与各种国际知名的设计大赛&#xff0c;也会竭尽所能为学生们的参赛提供途径与指导&#xff0c;本次的American Standard Design Award&#xff08;ASDA&#xff09;2023设计大赛也不例外。 ASDA2023设计大赛&#xff0c;推广以用户为中心的设计理念…

极简非凡react hooks+arcoDesign+vite后台管理模板

最近捣鼓了一个vite4搭建react18后台模板&#xff0c;搭载了字节团队react组件库Arco Design&#xff0c;整体编译运行顺滑衔接。支持多种模板布局、暗黑/亮色模式、国际化、权限验证、多级路由菜单、tabview标签栏快捷菜单、全屏控制等功能。 使用技术 "arco-design/web…

攀登数字化高峰,中小企业如何找“搭子”?

相信大多数人都认可&#xff0c;中小企业数字化&#xff0c;是一条充满未知和艰辛的征程。 这个过程&#xff0c;不是租几台云服务器、开发几个APP那么简单&#xff0c;而是一个对组织架构、业务环节、基础设施、商业模式等进行量身定制、长期迭代的体系化工程&#xff0c;需要…

船用白炽照明灯具

声明 本文是学习GB-T 3027-2012 船用白炽照明灯具. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了船用白炽照明灯具(以下简称灯具)的要求、试验方法、检验规则、标识、包装和储 存等。 本标准适用于电源电压在250V 以下的交流…

uni-app使用iconfont字体图标

先iconfont选择好自己需要的图标 添加至项目 下载字体文件到本地 将下载的文件解压缩到工程目录static文件夹下 定义好iconfont.css文件的font-face声明,修改好引入的url地址 打开App.vue文件 ,引入static下刚才修改的iconfont.css字体图标文件 完成上线的步骤后就可以全局使用…

matplotlib绘图实现中文宋体的两种方法(亲测)

方法一&#xff1a;这种方法我没有测试。 第一步 找宋体字体 &#xff08;win11系统&#xff09; 2.matplotlib字体目录&#xff0c;如果不知道的话&#xff0c;可以通过以下代码查询&#xff1a; matplotlib.matplotlib_fname() 如果你是Anaconda3 安装的matplotlib&#x…

不同组合地下管线的地质雷达响应特征分析

不同组合地下管线的地质雷达响应特征分析 前言 以混凝土管线为例&#xff0c;建立水平相邻管线电性模型&#xff0c;管径为60cm&#xff0c;中心埋深为70cm&#xff0c;管线长度为150cm&#xff0c;分别建立管线圆心相距150cm的两根相邻双管线和三管线模型&#xff0c;进行二…

SQL血缘解析原理

根据sql解析获取到表到表, 字段到字段间的关系,即血缘关系。实际上这是从sql文本获取到数据流的过程。 大致步骤如下&#xff1a; 1.sql文本进行词法分析 2.sql语法分析获取到AST抽象语法树 3.访问AST抽象语法树根据语法结构推测出数据的流向,例如create as select from 这种结…

使用x64dbg手动脱UPX壳(UPX4.1.0)

本文选用的壳是4.1.0的UPX壳 将加壳的exe文件拖入x64dbg 打开符号&#xff0c;进入第一个sample.exe 进入后在第一个位置下断点&#xff0c;按下F9运行 继续按下F9 单步运行到此处&#xff0c;发现只有RSP变红&#xff0c;根据ESP定律&#xff0c;进行下面的操作 所谓定律就像…

【配置conda环境】新版pycharm导入新版anaconda环境

最近下载了新版pycharm和新版anaconda&#xff0c;并且在命令行创建了环境&#xff0c;想着在pycharm里面导入环境。结果现在的导入方式发生了变化。 之前是通过导入Python.exe进行的。 现在&#xff1a; 当我们点击进去之后&#xff0c;会发现找不到python.exe了。 具体什么…

设置基站IP及设置基站连接服务器

基站状态指示灯 基站正常连接上服务器&#xff0c;基站指示灯如下&#xff0c; 第一个灯是电源指示灯常亮&#xff1b; 第二个灯为运行指示灯&#xff0c;程序正常运行第二个灯一直闪烁&#xff1b; 第三个灯为为网络指示灯&#xff0c;网络连接正常会常亮&#xff0c;网络…