<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: pop</title>
    <description>The latest articles on DEV Community by pop (@saowaluck).</description>
    <link>https://dev.to/saowaluck</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F239877%2F9c1d9bf6-94a4-4bc3-93a5-774d8464de3f.jpg</url>
      <title>DEV Community: pop</title>
      <link>https://dev.to/saowaluck</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/saowaluck"/>
    <language>en</language>
    <item>
      <title>Struct ง่ายนิดเดียว</title>
      <dc:creator>pop</dc:creator>
      <pubDate>Wed, 27 May 2020 04:52:48 +0000</pubDate>
      <link>https://dev.to/saowaluck/struct-516o</link>
      <guid>https://dev.to/saowaluck/struct-516o</guid>
      <description>&lt;p&gt;วันก่อน มีโอกาสได้ Pair programing กับ pongneng พี่อธิบายถึงเรื่องของ Struct ให้ฟัง ซึ่งเข้าใจง่ายมาก เลยอยากจะขอจดเก็บเอาไว้หน่อย&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Struct คืออะไร&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;struct มันคือ type ที่เก็บรวบรวม field ต่างๆ เพื่อที่จะจัดกลุ่ม data เข้าไว้ด้วยกัน อธิบายง่ายๆ มันเหมือนเป็นกล่องใบหนึ่ง ที่ให้เรามัดของที่เกี่ยวข้องกัน ยัดใส่ลงไป&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fr6ssbwcp4xzd1icqijws.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fr6ssbwcp4xzd1icqijws.jpg" alt="Struct"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;เริ่มต้นเรื่อง โดยปูพื้นฐานเรื่องของตัวแปร(Variable) กันก่อนเลย โดยพี่เล่าว่า  ปกติเราประกาศ ตัวแปรใน ภาษา go มี 2 แบบ ดังด้านล่างนี้&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;

&lt;span class="c"&gt;// ประกาศตัวแปรแบบเต็ม&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;bookTitle&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="kt"&gt;float32&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;stock&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;available&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;

&lt;span class="n"&gt;bookTitle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Clean Code"&lt;/span&gt;
&lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;22.53&lt;/span&gt;
&lt;span class="n"&gt;stock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;33&lt;/span&gt;
&lt;span class="n"&gt;avaliable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;

&lt;span class="c"&gt;// แบบ short หรือสายย่อ&lt;/span&gt;
&lt;span class="n"&gt;bookTitle&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="s"&gt;"Clean Code"&lt;/span&gt;
&lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;22.53&lt;/span&gt;
&lt;span class="n"&gt;stock&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;33&lt;/span&gt;
&lt;span class="n"&gt;avaliable&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;จากนั้น เราอยาก composite data เพื่อ group มันเข้าด้วยกัน วิธีการนี้ ในทางภาษา Go เราจะใช้การ Declare Struct เพื่อที่จะให้สามารถ group fields เข้าไว้ด้วยกันได้ โดยประกาศให้มันเป็น type sturct แบบนี้&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;

&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;Book&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;bookTitle&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;
    &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="kt"&gt;float32&lt;/span&gt;
    &lt;span class="n"&gt;stock&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;
    &lt;span class="n"&gt;available&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;ต่อมาเราอยาก สร้าง function ที่ชื่อว่า &lt;code&gt;isAvailable&lt;/code&gt; ที่จะคอยเช็คว่า หนังสือนั้นใช้งานได้หรือเปล่า สิ่งที่เราจะทำ คือ การ pass object ของ Book มา เพื่อที่จะดูว่าค่า available ว่ามันเป็น true หรือ false&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;isAvailable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Book&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;available&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;แต่...ช้าก่อน  ถ้าเราสังเกตดีๆ เราไม่ควรที่จะต้องส่ง object ของ Book มา แต่ isAvailable ควรจะรู้จักกับ Book ได้เองเลย หรือถ้าเข้าใจง่ายๆ คือ ฟังก์ชัน &lt;code&gt;isAvailable&lt;/code&gt; มันเป็นส่วนหนึ่งของ Book เสมอ &lt;/p&gt;

&lt;p&gt;เราเลยต้องทำให้ &lt;code&gt;isAvailable&lt;/code&gt; มันสามารถเรียกผ่าน object ของ Book ได้เอง โดยวิธีการทำง่ายมาก คือ เราจะย้าย &lt;code&gt;(b *Book)&lt;/code&gt; มาวางไว้หน้าชื่อฟังก์ชันเพื่อระบุว่า มันเป็น method ของ Book &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Book&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;isAvailable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;available&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;เพียงเท่านี้ เราเองก็สามารถที่จะเรียกใช้งาน &lt;code&gt;isAvailable&lt;/code&gt; ผ่าน book ได้แล้ว&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;Book&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bookTitle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Clean Code"&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;22.53&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;33&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;available&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;

&lt;span class="c"&gt;// เราสามารถเรียก isAvailable ผ่าน object Book ได้แล้ว&lt;/span&gt;
&lt;span class="c"&gt;// จากเดิมแทนที่เราเองต้องเรียก isAvailable(b) --&amp;gt; b.isAvailable()&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isAvailable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;สรุป&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Struct เป็น type ที่ Go สร้างขึ้นมา เพื่อที่จะนำเอาข้อมูลที่อยู่ในโดเมนเดียวกันมามัดใส่เป็นก้อน&lt;br&gt;
ส่วนการระบุ method ของ type โดยประกาศชื่อ type ด้านหน้าของ method นั่นเอง&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;

&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"fmt"&lt;/span&gt;

&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;Book&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;bookTitle&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;
    &lt;span class="n"&gt;price&lt;/span&gt;     &lt;span class="kt"&gt;float32&lt;/span&gt;
    &lt;span class="n"&gt;stock&lt;/span&gt;     &lt;span class="kt"&gt;int&lt;/span&gt;
    &lt;span class="n"&gt;available&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Book&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;isAvailable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;available&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;Book&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bookTitle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Clean Code"&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;22.53&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;33&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;available&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;

    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isAvailable&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>มา Optimize docker builds ด้วย multi-stage กันเถอะ</title>
      <dc:creator>pop</dc:creator>
      <pubDate>Mon, 28 Oct 2019 17:27:38 +0000</pubDate>
      <link>https://dev.to/prontotools/optimize-docker-builds-multi-stage-27e3</link>
      <guid>https://dev.to/prontotools/optimize-docker-builds-multi-stage-27e3</guid>
      <description>&lt;h3&gt;
  
  
  Multi-stage  คือ
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;เทคนิคที่ช่วยให้เราสามารถ optimize ระยะเวลาในการ build image ซ้ำ แทนที่เราจะ มา build image ใหม่ทุกครั้ง ก็เปลี่ยนมาใช้การ copy image ที่เคย build ไปแล้วมาใช้กับ stage ใหม่แทน &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Multi-Stage  สามารถใช้งานได้กับ Docker edge version เวอร์ชั่น v17.05.0ce ขึ้นไป&lt;/p&gt;

&lt;p&gt;หากเปรียบเทียบกับความเป็นจริง Multi-Stage ก็คล้ายกับแก้วใบหนึ่งที่เป็นเหมือน blue print(พิมพ์เขียว) ให้เราสามารถนำมา Reuse ได้ แทนจะเราจะผลิตแก้วกระดาษที่ซ้ำทุกครั้ง &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fp772tftgdhvfgy3s8p5x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fp772tftgdhvfgy3s8p5x.png" alt="compare with the real world"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ลองกันเลย 🚩
&lt;/h3&gt;

&lt;p&gt;เริ่มต้นด้วยการสร้าง Dockerfile สำหรับ dev และDockerfile สำหรับ production&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fhjbhd6v5xqgcvoridoiy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fhjbhd6v5xqgcvoridoiy.png" alt="ฺBuild without multi-stage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;หลังจากนั้นลองสั่ง build ทั้งสอง images โดยใช้คำสั่ง&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build -t demo-dev -f Dockerfile-dev .
docker build -t demo-prod -f Dockerfile-production .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;โดยผลลัพธ์ที่ได้คือ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;| Docker Tags     | Size   |
|-----------------|--------|
| demo-dev        | 994MB  |
| demo-prod       | 996MB  |
| Summary         | 1.99GB |

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;หลังจากนั้นเราลองมาใช้ &lt;strong&gt;Multi-Stage&lt;/strong&gt; กันบ้าง ✨&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Foy3e4e2soplepz0z5aym.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Foy3e4e2soplepz0z5aym.png" alt="DockerfileMuti-stage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ลองสั่ง build images โดยใช้คำสั่ง&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build -t demo-multi-stage -f Dockerfile-muti-stage .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;โดยผลลัพธ์ที่ได้คือ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;| Docker Tags      | Size   |
|------------------|--------|
| demo-multi-stage | 1.01GB |

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;จะเห็นได้ว่าขนาด image ที่ถูก build ลดลงไปถึง &lt;strong&gt;0.98 GB&lt;/strong&gt; 🎉 &lt;/p&gt;

&lt;p&gt;โดยวิธีการ เขียน docker multi-stage ง่ายมาก เพียงแค่ใช้คำสั่ง&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;copy --from=&amp;lt;index stage or stage name&amp;gt; &amp;lt;destination path&amp;gt; &amp;lt;original path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fcvrwiwyfkyh25g3otoi7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fcvrwiwyfkyh25g3otoi7.png" alt="Syntax Multistage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Muti stage เป็นอีกหนึ่งวิธีที่จะช่วยเพิ่มทางเลือกให้กับคุณในการ ลดขนาดของ image ที่จะช่วยให้ image ของคุณ lean ขึ้นและยังช่วยลดระยะเวลาในการ build image ได้อีกด้วย&lt;/p&gt;

&lt;p&gt;Ref:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/saowaluck/Demo-docker-multistage" rel="noopener noreferrer"&gt;github code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/develop/develop-images/multistage-build/" rel="noopener noreferrer"&gt;https://docs.docker.com/develop/develop-images/multistage-build/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.somkiat.cc/docker-with-multi-stage-build/" rel="noopener noreferrer"&gt;http://www.somkiat.cc/docker-with-multi-stage-build/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
