<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Docker on Yossy's Notes</title><link>https://yoshihiroshu.com/tags/docker/</link><description>Recent content in Docker on Yossy's Notes</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Sat, 18 Mar 2023 12:00:00 +0900</lastBuildDate><atom:link href="https://yoshihiroshu.com/tags/docker/index.xml" rel="self" type="application/rss+xml"/><item><title>[検証]DockerのMulti-stage builds</title><link>https://yoshihiroshu.com/blog/docker-multi-stage-builds/</link><pubDate>Sat, 18 Mar 2023 12:00:00 +0900</pubDate><guid>https://yoshihiroshu.com/blog/docker-multi-stage-builds/</guid><description>&lt;div>&lt;a id="td-block-0" class="td-offset-anchor">&lt;/a>&lt;/div>
&lt;section class="row td-box td-box--white td-box--height-auto">
&lt;div class="col">
&lt;div class="container">
&lt;h2 id="背景">背景&lt;a class="td-heading-self-link" href="#%e8%83%8c%e6%99%af" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;p>DockerImageのMulti-stage buildsをするとサイズがどのくらい落ちるか気になったので、検証しました。&lt;/p>
&lt;h2 id="対象としている人">対象としている人&lt;a class="td-heading-self-link" href="#%e5%af%be%e8%b1%a1%e3%81%a8%e3%81%97%e3%81%a6%e3%81%84%e3%82%8b%e4%ba%ba" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;ul>
&lt;li>Docker学習中の人&lt;/li>
&lt;li>Docker Imageを実装している人&lt;/li>
&lt;/ul>
&lt;h2 id="実験結果">実験結果&lt;a class="td-heading-self-link" href="#%e5%ae%9f%e9%a8%93%e7%b5%90%e6%9e%9c" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;p>一目瞭然ですね。
まさかの約370MBの違いもありました。&lt;/p>
&lt;p>Goのベースイメージを採用したDockerImage
&lt;a href="https://yoshihiroshu.com/">golang:1.19&lt;/a>をベースイメージとして使っています。
&lt;img alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2083780/1d9bebbb-bb78-5145-1a7b-150fa1899955.png">&lt;/p>
&lt;p>Multi-stage buildsを採用したDockerImage
&lt;a href="https://hub.docker.com/_/scratch">scratch&lt;/a>をベースイメージとして使っています。
&lt;img alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2083780/c0f9912f-5208-06f9-b60b-5ccae2d97e99.png">&lt;/p>
&lt;h2 id="それぞれのdockerimage">それぞれのDockerImage&lt;a class="td-heading-self-link" href="#%e3%81%9d%e3%82%8c%e3%81%9e%e3%82%8c%e3%81%aedockerimage" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;p>Goのベースイメージを採用したDockerImage&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-Dockerfile" data-lang="Dockerfile">&lt;span class="line">&lt;span class="cl">&lt;span class="k">FROM&lt;/span>&lt;span class="s"> golang:1.19&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">WORKDIR&lt;/span>&lt;span class="s"> /usr/src/app&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">COPY&lt;/span> . ./&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">RUN&lt;/span> go mod download &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> go mod verify&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">EXPOSE&lt;/span>&lt;span class="s"> 8000&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">CMD&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;go&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;run&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;./cmd/main.go&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Multi-stage buildsを採用したDockerImage&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-Dockerfile" data-lang="Dockerfile">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># syntax=docker/dockerfile:1&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">FROM&lt;/span>&lt;span class="s"> golang:1.19 as builder&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">WORKDIR&lt;/span>&lt;span class="s"> /usr/src/app&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">COPY&lt;/span> ./backend/go.mod ./backend/go.sum ./&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">RUN&lt;/span> go mod download &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> go mod verify&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">COPY&lt;/span> ./backend .&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">RUN&lt;/span> &lt;span class="nv">CGO_ENABLED&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">0&lt;/span> go build -o binary ./cmd/main.go&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">FROM&lt;/span>&lt;span class="s"> scratch&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">WORKDIR&lt;/span>&lt;span class="s"> /usr/src/app&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="c"># scratch doesn&amp;#39;t have timezone.&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">COPY&lt;/span> --from&lt;span class="o">=&lt;/span>builder /usr/share/zoneinfo/Asia/Tokyo /usr/share/zoneinfo/Asia/Tokyo&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">COPY&lt;/span> --from&lt;span class="o">=&lt;/span>builder /usr/src/app/binary /usr/src/app/binary&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">COPY&lt;/span> ./backend/configs.yaml .&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">EXPOSE&lt;/span>&lt;span class="s"> 8080&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">CMD&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;./binary&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;/div>
&lt;/section></description></item><item><title>Dockerのdepends onについて</title><link>https://yoshihiroshu.com/blog/docker-depends-on/</link><pubDate>Tue, 17 Jan 2023 12:00:00 +0900</pubDate><guid>https://yoshihiroshu.com/blog/docker-depends-on/</guid><description>&lt;div>&lt;a id="td-block-0" class="td-offset-anchor">&lt;/a>&lt;/div>
&lt;section class="row td-box td-box--white td-box--height-auto">
&lt;div class="col">
&lt;div class="container">
&lt;h2 id="背景">背景&lt;a class="td-heading-self-link" href="#%e8%83%8c%e6%99%af" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;p>Dockerの&lt;code>depends_on&lt;/code>について、簡単に学んだことをまとめました。&lt;/p>
&lt;h2 id="対象としている人">対象としている人&lt;a class="td-heading-self-link" href="#%e5%af%be%e8%b1%a1%e3%81%a8%e3%81%97%e3%81%a6%e3%81%84%e3%82%8b%e4%ba%ba" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;p>Dockerについて、一通り学習したことがある人&lt;/p>
&lt;h2 id="depends_on">depends_on&lt;a class="td-heading-self-link" href="#depends_on" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;p>サービス間の依存関係を指定できる&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-docker-compose.yaml" data-lang="docker-compose.yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">services&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">service_a&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">image&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">busybox&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">service_b&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">image&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">busybox&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># `service_b` を `service_a` に依存させる&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">depends_on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">service_a&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>service_b を service_a に依存させることができます&lt;/p>
&lt;ul>
&lt;li>docker-compose up: service_a → service_b の順に起動する&lt;/li>
&lt;li>docker-compose run: （ docker-compose up と同じ）&lt;/li>
&lt;li>docker-compose stop: service_b → service_a の順に停止する&lt;/li>
&lt;/ul>
&lt;h2 id="指定パターン">指定パターン&lt;a class="td-heading-self-link" href="#%e6%8c%87%e5%ae%9a%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;ul>
&lt;li>Short syntax （リスト）
&lt;ul>
&lt;li>依存先のサービス名を単純に記述するだけ&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-docker-compose.yaml" data-lang="docker-compose.yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">depends_on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">service_a&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>Long syntax （オブジェクト）
&lt;ul>
&lt;li>依存関係にあるサービスをオブジェクト形式で記述するもの&lt;/li>
&lt;li>この方法では依存先に加えて「条件」を指定することができます&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-docker-compose.yaml" data-lang="docker-compose.yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">depends_on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">service_a&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">condition&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">service_started&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>条件の指定には condition を使用
condition にデフォルト値は無いため、 long syntax を選ぶ場合は必ず指定する必要があり&lt;/p></description></item></channel></rss>