> For the complete documentation index, see [llms.txt](https://www.saladpuk.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.saladpuk.com/basic/docker-1/push.md).

# Docker Push

🤠 จาก [**บทความที่ 6**](https://www.saladpuk.com/basic/docker-1/images) เราได้ลองสร้าง **`🖼️ Container Images`** ตัวแรกของเราไปเรียบร้อยแล้ว ดังนั้นในบทความนี้เราก็ส่งมันไปให้ชาวโลกได้ลองเล่น **`🖼️ Container Images`** ของเราดูบ้างกัลล์

{% hint style="success" %}
**แนะนำให้อ่าน**\
บทความนี้เป็นส่วนหนึ่งของคอร์ส [🐳 **Docker**](https://www.saladpuk.com/basic/docker-1) ที่จะสอนตั้งแต่เรื่องพื้นฐานยันระดับ master กันไปเลย ซึ่งเนื้อหาทั้งหมดจะทำให้เพื่อนๆเข้าใจและใช้งาน **Docker** โดยใช้ **Kubernetes** เป็น และสามารถสร้าง **Cluster** เพื่อนำไปใช้งานบน **Cloud Providers** ต่างๆได้ และทั้งหมดที่พูดมานั้นอ่านได้ฟรีเลย ดังนั้นหากสนใจก็สามารถกดเจ้าวาฬสีน้ำเงินเพื่อไปอ่านตั้งแต่เริ่มต้นได้ครัช 🤠
{% endhint %}

## 🚨 Prerequisites

หากใครยังไม่ได้สร้าง **`🖼️ Container Images`** รบกวนไปสร้างให้เรียบร้อยก่อน ซึ่งสามารถทำตามได้จาก [**บทความที่ 6**](https://www.saladpuk.com/basic/docker-1/images) กั๊ฟ แต่ถ้าอยากรู้แค่ขั้นตอนก็อ่านดูแต่ละ step ก็ได้เหมียนกัลล์

ก่อนที่จะไปต่อ ลองตรวจสอบ Image ที่อยู่ในเครื่องกันโหน่ย ด้วยคำสั่งลิสต์รายการ Images ด้านล่าง

```
docker images
```

![](/files/-ML7uPXJ4RHJ_ReBfcCq)

จากรูปด้านก็จะเห็นว่า ในเครื่องของ **ดช.แมวน้ำ** มี **`🖼️ Container Images`** อยู่ 2 ตัว โดยตัวที่ป๋มจะส่งไปให้ชาวโลกเห็นคือตัว **`demo01`** ซึ่งใน [**บทความที่ 5**](https://www.saladpuk.com/basic/docker-1/registry) เราจะรู้ว่าพี่วาฬ 🐳 นั้นเก็บ Images ต่างๆทั่วโลกไว้ที่ **`🗃️ Docker Registry`** หรือที่เราเรียกกันติดปากว่า **`🌎 Docker Hub`** นั่นเอง

![](/files/-ML7yLkcIKM4lazBdXbI)

จากที่ร่ายมาทั้งหมดนั่นหมายความว่าเราจะต้องส่ง **`🖼️ Container Image`** ของเราไปเก็บไว้ที่ **`🌎 Docker Hub`** ดังนั้นเราก็ต้องมี Account ของเขาเสียก่อน

## 🔑 Docker Hub Sign-Up

ขั้นตอนสมัครสมาชิกค่อนข้างเรียบง่าย ดังนั้นเหล่าผองแมวน้ำรบกวนไปสมัครยืนยันอีเมล์กันเองได้จากลิงค์นี้เบย [**https://hub.docker.com**](https://hub.docker.com/) แล้วเมื่อสมัครเสร็จก็กลับมา Login ต่อที่เครื่องเราได้ละ

## 🔐 Docker Login

หลังจากที่สมัครสมาชิกเสร็จ เราก็จะมา Login กันโดยเปิดตัว Command Prompt ขึ้นมาแล้วใช้คำสั่ง **`docker login`** ตามด้วย username และ password ที่เราตั้งไว้นั่นเอง (ตอนใส่รหัสผ่านมันจะไม่มีตัวอักษรขึ้นมาไม่ต้องตกใจนะ คอมไม่ได้เสีย 🤣)

```
docker login
```

> Login Succeeded

ส่วนใครไม่ถนัดใช้ Command ก็สามารถคลิกขวาที่ไอคอนปลาวาฬ แล้วทำการ Login จากตรงนั้นก็ได้เช่นกันฮัฟ

![](/files/-ML7zTaFw8duZuEa1_q4)

เมื่อ Login เสร็จเรียบร้อยถัดไปเราก็จะเริ่มเอา **`🖼️ Container Image`** ของเราส่งขึ้นไปเก็บไว้ที่ **`🌎 Docker Hub`** กันต่อเลย

## 🐳 Docker Tag

ก่อนอื่นเราต้องเตรียม **`🖼️ Container Image`** ต่ออีกนิดหน่อย โดยการติดสิ่งที่เรียกว่า **`tag`** เสียก่อน เพื่อเป็นการบอกว่าเรากำลังจะเอา **`🖼️ Container Image`** ตัวไหนในเครื่อง ไปใส่ตัวไหนที่อยู่บน **`🌎 Docker Hub`**&#x20;

![](/files/-ML83wQwCNWDkznF1JSm)

ซึ่งรายละเอียดเรื่อง tag มันจะคล้ายๆกับการทำเวอร์ชั่น เช่น ตัวนี้เป็นเวอร์ชั่น 1 นะ ตัวนี้เป็นเวอร์ชั่นทดสอบนะ บลาๆ ซึ่งก่อนที่เราจะไปต่อป๋มขอแสดงรายการ **`🖼️ Container Image`** ที่อยู่ในเครื่องอีกครั้งก่อน จะได้ไม่ต้องเลื่อนขึ้นๆลงๆไปมาด้วยคำสั่ง `docker images` ก็จะเห็นตามรูปด้านล่าง

![](/files/-ML7uPXJ4RHJ_ReBfcCq)

คราวนี้เราจะใช้คำสั่ง **`docker tag`** แล้วตามด้วย **ชื่อ image ในเครื่องของเรา** กับ **ชื่อ image ใน docker** แบบตัวอย่างด้านล่างนี้ **(ชื่อ image ใน docker จะต้องนำหน้าด้วย username ของเราเสมอ)**

```
docker tag demo01 saladpuk/demo01
```

จากคำสั่งด้านบนมันก็จะเป็นการทำให้ docker ในเครื่องเรารู้ละว่าเจ้า **`🖼️ Container Image`** ที่ชื่อว่า `demo01` ถ้ามันถูกเอาขึ้น **`🌎 Docker Hub`** มันจะถูกเอาไปเก็บใน account ของ **saladpuk** แล้วเก็บไว้ในตัวที่ชื่อว่า **demo01** ตามรูปด้านล่างนั่นเอง

![](/files/-ML86Pd5HkZw0xyao3gA)

## 🐳 Docker Push

หลังจากที่เราตั้ง tag เรียบร้อย ลองดูรายการ **`🖼️ Container Images`** ในเครื่องเราอีกครั้งก็จะเห็นเจ้า tag ใหม่ที่พึ่งสร้างมาด้วยตามรูปด้านล่างเลย ซึ่งสังเกตได้ว่า Image Id มันจะเป็นเลขเดียวกัน

![](/files/-ML87Y8AUk1X2bJlVclK)

คราวนี้เราก็จะเอาตัว `demo01` ไปฝากไว้กับ **`🌎 Docker Hub`** ด้วยคำสั่ง `docker push` ตามคำสั่งด้านล่าง

```
docker push saladpuk/demo01
```

เมื่ออัพโหลดทุกอย่างเสร็จสิ้้นก็หมายความว่าตัว **`🖼️ Container Image`** ของเรานั้นไปอยู่กับพี่วาฬเรียบร้อยแล้วนั่นเอง ซึ่งเพื่อนๆสามารถเข้าไปดูได้ที่ลิงค์นี้ <https://hub.docker.com/r/saladpuk/demo01> เย่ๆ

> ลิงค์นี้อาจจะไม่อยู่แล้วถ้าเลยเดือนเมษา 2021 เพราะป๋มน่าจะไม่ได้อัพเดทมันนะกั๊ฟ 😢

{% hint style="danger" %}
**Public Accessibility**\
อย่างที่เคยบอกไปว่าโดยปรกติตัว **Container Image ของเราจะถูกเปิดให้ทั่วโลกเห็น (Public)** นั่นหมายความว่าใครที่รู้ลิงค์นี้ หรือ search หา เขาก็จะสามารถเข้ามาลองเอา Container Image ของเราไปลองเล่นได้ ดังนั้นของที่เป็น sensitive data เช่น secrect key ต่างๆนาๆ ก็อย่าเอาไปเก็บไว้ในนั้นนะ
{% endhint %}

ส่วนสำหรับใครที่ไม่อยากจะให้คนอื่นแอบเข้ามาใช้ Container Image ของเราก็สามารถตั้งค่าให้เป็น private ได้จากที่เว็บ docker hub ตามรูปด้านล่างได้เลยฮัฟ

![](/files/-ML8AwZs01JzDqSccGaG)

## 🐳 Docker Pull

สุดท้ายเมื่อเราเอาขึ้นไปละ ก็ลองเอามาเล่นซะหน่อยดิ๊ แต่ถ้าจะเอามาเล่นในเครื่องตัวเองก็คงจะได้ผลลัพท์เหมือนเดิม ดังนั้นในรอบนี้เราจะลองใช้คอมพิวเตอร์เครื่องอื่นมาเล่น Container Image ของเรากันดีก่า โดยการกดเข้าไปที่ลิงค์นี้เบย [https://labs.play-with-docker.com](https://labs.play-with-docker.com/) ซึ่งเมื่อเข้ามาก็ Login > Start ให้เรียบร้อยครัช

![](/files/-ML8BbxjjxU1W5vNmT0D)

หลังจาก Login เสร็จให้กดปุ่ม **`+ ADD NEW INSTANCE`** เพื่อสร้างเครื่อง Linux จำลองขึ้นมาเลย (ใครไม่เคยใช้ Linux ก็จะได้ใช้ตอนนี้แหละ 🤣) โดยเราสามารถใช้งานได้ 4 ชมเต็มๆตามรูปด้านล่าง

![](/files/-ML8CStdTS2u9MauJ9nL)

จากตรงนี้เราก็จะลองเอา Container Image ของเรามาลองเล่นดู โดยที่หน้าจอดำๆของเครื่อง Linux ให้ใช้คำสั่งด้านล่างเพื่อ Run ตัว Container ของป๋มเล่นดู

```
docker run saladpuk/demo01
```

> Counter: 1 \
> Counter: 2 \
> Counter: 3\
> ...

เราก็จะเห็นว่าตัว Container Image ของเราสามารถทำงานได้เหมือนกับที่อยู่ในเครื่องของเรา แม้ว่าเครื่องที่ **ดช.แมวน้ำ** ทำเป็นตัวอย่างนั้นจะใช้ Windows OS ก็ยังสามารถไปทำงานบน Linux OS ได้เป็นปรกตินั่นเองครัช

![](/files/-ML8FfiwXaQ63L-JG6l9)

## 🎯 Summary

จากตรงนี้เราก็น่าจะพอเห็นแนวทางในการเอา **`🖼️ Container Image`** ของเราไปแชร์ให้คนอื่นได้ลองใช้ หรือเอาไปลองทำงานบนเครื่องอื่นๆกันแล้วนะ ซึ่งการที่เราจะทำแบบนั้นได้ก็ต้องมีการสร้าง 🔐 Docker Account นิดหน่อย เพื่อที่จะเข้าไปใช้งาน **`🌎 Docker Hub`** ได้นั่นเอง

ในบทความถัดไปเราจะมาลองดูกันว่า ถ้าเรามีโปรเจคที่ใช้ Docker หลายๆตัว เช่นมี Front-end, Back-end มีการต่อ Database ต่างๆนาๆ ซึ่งทั้งหมดนั่นเราจะเอาไปทำงานบน Docker ได้ยังไง ก็เชิญอ่านได้จากบทความถัดไปขอรับ (ใจเย็นๆนะโยม บทความถัดไปกำลังเขียนอยู่)

{% hint style="success" %}
อ่านแล้วชอบป๋มก็ขอฝากแชร์ หรือกดติดตามเพื่อจะได้ไม่พลาดบทความอื่นๆจาก **ดช.แมวน้ำ** ได้จากลิงค์นี้เบยครัช [**Saladpuk Fanclub**](https://www.facebook.com/mr.saladpuk/?modal=admin_todo_tour) **😍**
{% endhint %}

![ช่องทางสนับสนุนค่าอาหารแมวน้ำกั๊ฟ 😘](/files/-MKNmp9HEqzREDsXrZ0H)
