百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Docker核心:深入理解Dockerfile

csdh11 2025-02-27 14:48 3 浏览

一、概述

Dockerfile就是用来构建docke镜像的构建文件,是一段命令脚本,通过脚本可以生成镜像,镜像是一层一层的,脚本是一行一行的命令,每个命令都是一层!!

构建镜像步骤

① 编写一个 dockerfile 文件 ② 使用 docker build构建镜像 ③ docker run 运行镜像 ④ docker push发布镜像到远程

查看官方是如何做的,以centos为例:

二、Dockerfile特点

  • 每个保留的关键字(指令)都必须是大写字母
  • 指令从上到下顺序执行
  • #标识注释
  • 每一个指令都会创建提交一个新的镜像层

Dockerfile:构建文件,定义了构建镜像的步骤,相当于源代码 Docker Images:通过Dockerfile构建生成的镜像,最终发布和运行的产品 Docker容器:容器就是镜像运行起来提供服务

三、Dockerfile指令

FROM   # 基础镜像,一切从这里开始构建
MAINTAINER  # 	镜像是谁写的,姓名+邮箱
RUN  # docker镜像构建时需要运行的命令
ADD  # 	添加内容
WORKDIR # 镜像工作目录
VOLUME  # 挂载数据的目录位置
EXPOSE  # 指定暴露端口
CMD  # 指定容器启动时运行的命令 只有最后一个会生效,而且可被替代
ENTRYPOINT  # 指定容器启动时运行的命令 可以追加命令
ONBUILD  # 当构建一个被继承 dockerfile 这时就会运行,触发指令
COPY  # 类似ADD 将文件拷贝到镜像中
ENV  # 构建时设置环境变量
复制代码

四、构建自己的Centos

FROM centos:7
MAINTAINER xiaozhao<123456@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "------end------"
CMD /bin/bash
复制代码

构建镜像

docker build -f myDockerfile -t mycentos:1.0 .

复制代码

构建成功

测试运行容器:

docker run -it mycentos:1.0
复制代码

查看镜像的构建过程

docker history 镜像ID
复制代码

CMD 和 ENTRYPOINT 区别

① 编写 CMD 测试

构建成功

启动容器,发现直接执行命令

追加命令,出现报错

docker run cmdtest -l
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "-l": executable file not found in $PATH: unknown.
复制代码

使用CMD 情况时,-l 替换了 CMD ["ls" ,"-a"]命令,所以报错。

② ENTRYPOINT 测试

构建成功

运行容器

追加命令,测试成功

五、构建Tomcat镜像

① 创建镜像文件,准备tomcat,jdk压缩包

② 编写dockerfile 文件,官方命名 Dockerfile,build构建会自动寻找,无需指定

FROM centos:7
MAINTAINER zhao<123456@qq.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u261-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.37.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_261
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.37
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.37
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.37/bin/startup.sh && teil -F /usr/local/apache-tomcat-9.0.37/bin/logs/catalina.out

复制代码

③ 构建镜像

docker build -t 镜像名称 .
复制代码

④ 启动容器

docker run -d -p 9090:8080 --name zhaotomcat -v /home/dockerfile/tomcat/test:/usr/local/apache-tomcat-9.0.37/webapps/test -v /home/dockerfile/tomcat/tomcatlogs:/usr/local/apache-tomcat-9.0.37/logs zhao-tomcat
复制代码

⑤ 内网测试:

外网测试成功:

⑥ 发布项目

在主机中挂载数据的test目录发布一个html网页





菜鸟教程(runoob.com)


    

我的第一个标题

我的第一个段落。

复制代码

访问此项目

六、发布Docker镜像

发布Docker镜像到DockerHub

① 访问DockerHub官网:hub.docker.com/,注册个人账号,并登录

② 在服务器提交镜像

登录 dockerhub

[root@iZuf6cnjz7d24851d3cx8rZ test]# docker login --help

Usage:  docker login [OPTIONS] [SERVER]

Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.

Options:
  -p, --password string   Password
      --password-stdin    Take the password from stdin
  -u, --username string   Username
复制代码

登陆成功

将镜像 push 到远程

docker push 镜像名称
复制代码

出现报错:requested access to the resource is denied翻译过来就是:请求访问资源被拒绝!!

解决方案

给需要上传的镜像重新打一个 tag

docker tag 原镜像名称 (dockerhub用户名) / 镜像名:标签
复制代码

重新push

回到dockerhub查看!

发布Docker镜像到阿里云镜像服务

第一步:进入阿里云容器镜像服务

第二步:创建命名空间

第三步:创建镜像仓库

选择本地仓库

第四步:点击仓库查看仓库信息

根据仓库提示进行发布镜像 ① 登陆阿里云账号

② push镜像到阿里云

$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/xiaozhao/xiaozhao-test:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/xiaozhao/xiaozhao-test:[镜像版本号]
复制代码

修改标签

push生成的镜像

回到阿里云查看!!

Docker全流程



原文链接:
https://juejin.cn/post/7170144279845666847


相关推荐

当iPhone X遇上 Mate 10 Pro 怎么挑?

产品:Mate10Pro(全网通)华为手机1iPhoneX一出就遇上了对手Hello!大家好我是石头这里是zol。首先来看看我手里的这个,不是装x的意思,今天好多人欢天喜地的拿到了属于自己或者属...

谁是办公高手? 六款商务平板全推荐

1超低功耗联想Thinkpad10领衔ThinkPad的名字在笔记本上依然是高曝光率,从IBM到联想,它一直以来是商务、办公领域的不二人选,然而在平板电脑大行其道的今天,ThinkPad当然也不单...

如何仅用几行代码将微信4.0公测版转换成玲珑格式?

微信4.0(玲珑版)已上架如意玲珑应用商店!!!...

音乐研发必备:理解 MIDI 协议与标准 MIDI 文件格式

1.MIDI简介...

HEIF格式可以节约50%的空间!质量会有影响吗?

关于手机1亿像素到底有没有必要,争议肯定是存在的,但无法回避的一点是随着像素的成倍增加,一张照片十几MB成了常事,这必将给本就不太宽裕的存储容量造成压力,这种压力又会转嫁到用户身上,让他们不得不花更多...

「干货分享」30个前端知识技能提升的资源网站

今天给小伙伴们分享30个前端相关学习资源网站及一些在线小工具,希望能帮助到大家。CSS相关1、css精灵牛|在线图片CSS生成工具。...

用Facebook引流Shopify独立站,如何优化Facebook商户页面?

什么是FacebookBusinessPage?FacebookBusinessPage是官方的称号,其实你可以简单理解为facebookbusinesspage就是微信公众账户,而我们...

玩转手机摄影 nubia Z9 mini新品首测

1Z9系列新品nubiaZ9mini发布会开始之前的邀请函总能透露出很多内容,或者说我们总会特意解读出很多内容。nubia此前发出的3月26日智能手机新品发布会的邀请函很显然再一次着重强调了其产品...

影院看片怕座位不好?那买个盒子在家看

着消费者对高清播放器的需求的不断增加,高清播放器的功能也在不断得到提升。以前看电影的时候相信很多人更喜欢去电影院里观看,但是有时候去电影院的人太多买不到好位子也会让不少人感到扫兴。现在随着技术的革新,...

今天你买了么?不入后悔的8款平板推荐

随着高考大战的落幕,对于广大学生朋友们来说正真的暑假终于来了!这个假期想要外出旅行或是居家畅玩,没有一款便携式全能娱乐利器的平板电脑怎么能叫放假呢?正直京东618购物季即将到来的日子,相信你也不会错过...

Cursor使用指南:释放AI编程的无限潜能

Cursor简介...

谁说轻薄本缺乏生产力?没体验过别乱说

笔记本电脑轻薄化一直是各大厂商们不断努力的方向,不过早前的轻薄笔记本电脑会受制于技术方面的限制,无法将高能耗的CPU以及显卡塞入轻薄的机身内。为了能给这些芯片散热、供电,制造商们不得不对这些芯片的功耗...

通告ImageMagick再爆核心漏洞 站长小心

目前所有版本的GraphicsMagick和ImageMagick都支持打开文件,当文件名的第一个字符为“|”,则文件名会被传递给shell程序执行,导致(可能远程)代码执行。文件打开操作位于源代码文...

《玻璃之花与坏掉的世界》再曝新宣传片

雨文冰璃发表于昨天22:56【新闻】《玻璃之花与坏掉的世界》再曝新宣传片http://comic.qq.com/a/20151122/016784.htmPONYCANYON和A-1Pictu...

7 招教你轻松搭建以图搜图系统

作者|小龙责编|胡巍巍当您听到“以图搜图”时,是否首先想到了百度、Google等搜索引擎的以图搜图功能呢?事实上,您完全可以搭建一个属于自己的以图搜图系统:自己建立图片库;自己选择一张图片到...