<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Dockerfile on JokemeBlog</title>
        <link>/tags/dockerfile/</link>
        <description>Recent content in Dockerfile on JokemeBlog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Tue, 13 Apr 2021 04:59:44 +0000</lastBuildDate><atom:link href="/tags/dockerfile/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Dockerfile编写</title>
            <link>/p/dockerfile/</link>
            <pubDate>Tue, 13 Apr 2021 04:59:44 +0000</pubDate>
            <guid>/p/dockerfile/</guid>
            <description>&lt;img src=&#34;https://cn.bing.com/th?id=OHR.PadarIsland_EN-CN9304851314_UHD.jpg&amp;pid=hp&amp;w=1080&amp;h=720&amp;rs=1&amp;c=4&#34; alt=&#34;Featured image of post Dockerfile编写&#34; /&gt;&lt;p&gt;今天也是摸鱼的一天没怎么看书,一直在玩Linux。并且在无意间看到了我之前下载的 &lt;a class=&#34;link&#34; href=&#34;https://github.com/DirectoryLister/DirectoryLister&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;DirectoryLister&lt;/a&gt;，就想着在Docker里面部署玩一下。&lt;/p&gt;&#xA;&lt;p&gt;一开始我是没有想写Dockerfile的，直接在开了一个Ubuntu容器整的，但是想了想，以后想用肯定不方便，这个容器我随时随地都有可能废了它。所以就从网上看了看Dockerfile怎么写，开整！&lt;/p&gt;&#xA;&lt;p&gt;首先我并不想介绍Dockerfile怎么样去写，网上的教程一大把，自己看就可以了 我是参考&lt;a class=&#34;link&#34; href=&#34;https://www.runoob.com/docker/docker-dockerfile.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;菜鸟教程&lt;/a&gt;的教程。&lt;/p&gt;&#xA;&lt;p&gt;Dockerfile无非就是一个自动化的过程，至少在我看来就是这样的，可能我刚接触了解不深吧。但是按照这个思路是绝对可以写出来Dockerfile的，因为我自己就是例子🌰。&lt;/p&gt;&#xA;&lt;p&gt;来看看我的build&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;7168 ◯ : docker build -t flt:v1.0 .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;... ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Removing intermediate container 8fe78ec98a65&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; ---&amp;gt; da56585b17c1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Step 4/4 : CMD [&amp;#34;/root/np.sh&amp;#34;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; ---&amp;gt; Running in 23bd36103ddd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Removing intermediate container 23bd36103ddd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; ---&amp;gt; 114c7dec7e2f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Successfully built 114c7dec7e2f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Successfully tagged flt:v1.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;选择基础镜像&#34;&gt;选择基础镜像&#xA;&lt;/h2&gt;&lt;p&gt;因为Dockerfile是基于一些底层的镜像制作的，所以在这里我选择的是 &lt;code&gt;ubuntu:20.04&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;因为我平时就是在Ubuntu环境使用的比较多,你要是使用CentOS更顺手你也可以选择使用Redhat系的基础镜像。&lt;/p&gt;&#xA;&lt;p&gt;这里无可争议，过。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;FROM ubuntu:20.04&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;配置环境变量&#34;&gt;配置环境变量&#xA;&lt;/h2&gt;&lt;p&gt;其实我这里也没有啥环境变量，我也不知道啥东西要设置为环境变量，就把&lt;strong&gt;DirectoryLister&lt;/strong&gt;的版本号设置为环境变量了，方便以后升级。哈哈哈哈，比较菜只能想到这东西了。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ENV DL_VERSION 3.7.7&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;自动化运行命令&#34;&gt;自动化运行命令&#xA;&lt;/h2&gt;&lt;p&gt;这里也没有啥好说的，有点Linux基础就可以，就是这个写法很操蛋！要不停的 &amp;amp;&amp;amp; &amp;hellip; &amp;hellip; \，至于为什么要这样呢，我查了一下，说是一个RUN就是一层，你要是写太多RUN就会套太多层，非常的臃肿。这些暂时也不是我需要考虑的，别人怎么写，我就怎么写。&lt;/p&gt;&#xA;&lt;p&gt;这里我遇到了一个自动化安装软件时，需要用户手动输入参数的问题，平时咱手动输入参数可以，但是这自动化的时候可不能这样呀，废了老大劲网上找到了解决办法，就是利用 debconf 提前配置好参数，详细解决办法见&lt;a class=&#34;link&#34; href=&#34;https://ubuntuqa.com/zh-tw/article/7684.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Ubuntu问答&lt;/a&gt; 。&lt;/p&gt;&#xA;&lt;p&gt;这里我特喵的还是要喷一喷CSDN，妈的一篇帖子万人抄，也不管对不对，往自己的的账号里面薅就对了。妈的好几页都是垃圾文章，浪费我的时间。&lt;/p&gt;&#xA;&lt;p&gt;自动化里面基本上就是安装软件修改配置等等，强化了一下我的awk和sed。这俩命令太重要了！一定要学好！&lt;/p&gt;&#xA;&lt;h2 id=&#34;cmd命令&#34;&gt;CMD命令&#xA;&lt;/h2&gt;&lt;p&gt;没错我直接跳到了CMD命令，啥&lt;strong&gt;COPY&lt;/strong&gt;、&lt;strong&gt;ADD&lt;/strong&gt;、&lt;strong&gt;ENTRYPOINT&lt;/strong&gt;、&lt;strong&gt;ARG&lt;/strong&gt;、&lt;strong&gt;VOLUME&lt;/strong&gt;、&lt;strong&gt;EXPOSE&lt;/strong&gt;、&lt;strong&gt;WORKDIR&lt;/strong&gt;、&lt;strong&gt;USER&lt;/strong&gt;、&lt;strong&gt;HEALTHCHECK&lt;/strong&gt;、&lt;strong&gt;ONBUILD&lt;/strong&gt; 我都没有用上，真的是不知道在哪里用，也用不好，索性就不用了，直接一个CMD就打完收工。&lt;/p&gt;&#xA;&lt;p&gt;CMD里面的脚本也是我倒腾半天网上学来的，这样写虽然不太优雅，但是总比一开始的时候，一运行就结束了好。说到这我就觉得这里还是有点坑的，因为Docker容器里面必须有一个前台的进程，要是没有进程就会整个容器停止运行，我一开始还傻傻的看网上的教程写nohup，写了半天也不行。然鹅nohup并不是真正的前台进程，因为你再按一次回车就直接退出来了，nohup并没有在前台继续运行，只是nohup的那个命令或者脚本没死在后台活着，但是前台没有进程就会直接退出。正是这种命令或者脚本还活着的幻觉让我们觉得这他妈的Docker是不是有病呀？我这居然还不行！&lt;/p&gt;&#xA;&lt;p&gt;所以有些东西还是要靠自己慢慢的积累，网上很多东西也都是错误的，不知道我上面的观点对不对，欢迎指正。&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
