[Docker] ์ค‘๊ฐ„๊ณ ์‚ฌ ์ •๋ฆฌ(2)

2024. 5. 1. 03:36ใ†ComputerScience/DockerKubernetes

 

 

 

 

 

Chap5. Docker Introduction 

- ๋„์ปค๋Š” ๊ตฌ๊ธ€์ด ๋งŒ๋“  SW ์•„๋‹ˆ๋‹ค. ‘Solomon Hykes’ ํŒŒ์ด์ฝ˜ 2013์—์„œ ๋ฐœํ‘œ

- 2013๋…„, ๋„์ปค๊ฐ€ Go ์–ธ์–ด๋กœ ์ง  ์ˆœ๊ฐ„, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋“ฑ์žฅ (Go) -> ๋‘ sw๊ฐ€ ์ถœ์‹œ๋˜๋ฉฐ Go ์–ธ์–ด๊ฐ€ ์ธ์ •๋ฐ›์Œ

 

- ๋„์ปค๋Š” ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„์˜ ํ”Œ๋žซํผ ์œ„์— ์˜ฌ๋ผ๊ฐ„๋‹ค + ์˜คํ”ˆ์†Œ์Šค / ํ”Œ๋žซํผ์— ๋…๋ฆฝ์ ์œผ๋กœ SW๋ฅผ ๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค 
-> OS
์— ๋ฌด๊ด€ํ•˜๊ฒŒ ๋„์ปค ์œ„์—์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์งœ๋ฉด ๋œ๋‹ค, infrastructure ๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์งœ๋ฉด ๋œ๋‹ค.

- ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๋“ฏ์ด infrastructure๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค, infrastructure as code (IaC)

- ์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ์˜ ์†Œ์Šค ์ฝ”๋“œ์™€, ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ์œ„ํ•œ ๋„์ปค ํŒŒ์ผ ์ฝ”๋“œ, ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ ํŒŒ์ผ์ด 2๊ฐœ ํ•„์š”ํ•˜๋‹ค.

 

* Immutable Infrastructure using ‘Dockerfile’

- ๋‚ด๊ฐ€ ํ•„์š”ํ•œ ํ™˜๊ฒฝ์„ ๋„์ปค ํŒŒ์ผ๋กœ ์ž‘์„ฑ (๋‚ด๊ฐ€ ํ•„์š”ํ•œ ๊ฐœ๋ฐœํ™˜๊ฒฝ ์š”์ฒญ) -> ๋„์ปค ํŒŒ์ผ์„ ๋นŒ๋“œํ•˜๋ฉด ๋„์ปค ์ด๋ฏธ์ง€๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค. 

- ๋งŒ๋“ค์–ด์ง„ ์ด๋ฏธ์ง€๋ฅผ ํ•„์š”ํ•  ๋•Œ, ํ•„์š”ํ•œ ๋งŒํผ ์‹คํ–‰ํ•˜๋ฉด ๋„์ปค ์ปจํ…Œ์ด๋„ˆ // ๋„์ปค ํŒŒ์ผ์ด IaC

 

* ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  (๋„์ปค์˜ ์žฅ์ ) 

* Flexible - ๋„์ปค ํŒŒ์ผ๋กœ ๋ณต์žกํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ธํŒ… ๊ฐ€๋Šฅ

* Lightweight - guestOS ์—†์ด hostOS๋งŒ ์žˆ์–ด๋„ OK 

* Interchangeable – ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธ, ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ์šฉ์ดํ•˜๋‹ค.

 

* Docker Image – executable package including everything needed to run an application 

- Infrastructure as Code - ์ฝ”๋“œ, path ๋“ฑ ํ™˜๊ฒฝ๋ณ€์ˆ˜, configuration file ๋“ฑ ๋„์ปค ์ด๋ฏธ์ง€ ์•ˆ์— ๋‹ด์•„์„œ ํ•œ๋ฒˆ์— ์„ค์น˜ํ•˜๊ณ , ์ง€์šด๋‹ค.

* Docker Container – a runtime interface of an image -> ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋จ (์ธ์Šคํ„ด์Šค ๊ฐœ๋…)

- ์ด๋ฏธ์ง€ ์ž์ฒด๋Š” ์ž ์ž๋Š” ํŒŒ์ผ (ํด๋ž˜์Šค, ์„ค๊ณ„๋„ ๊ฐœ๋…) ์ด๊ฑธ ์‹คํ–‰ํ•ด์•ผ ํ•จ -> ์‹คํ–‰ ์‹œ ๋™์ž‘ํ•˜๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์ปจํ…Œ์ด๋„ˆ

- ์ธ์Šคํ„ด์Šค๋ฅผ ํ•„์š”ํ•  ๋•Œ ํ•„์š”ํ•œ ๋งŒํผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ / CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žก์•„๋จน์Œ 

 

* Sharing Immutable Infrastructures – Docker Hub - 350๋งŒ๊ฐœ์˜ ๋„์ปค ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜, ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์šฐ๋ถ„ํˆฌ 

- registry - ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ / ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋งŒ๋“ค์–ด ๋‘” ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ๋จ

- ์›น์„œ๋ฒ„๋ฅผ ๋Œ๋ฆฌ๋Š” ํ™˜๊ฒฝ์€ NGINX - ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ์Œ / ํ•„์š”ํ•  ๋•Œ ํ•„์š”ํ•œ ๋งŒํผ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋„์›Œ์„œ ์“ฐ๊ณ , ๊น”๋”ํ•˜๊ฒŒ ์ง€์šฐ๋ฉด ๋จ

 

* docker run hello-world - ์ด ์ปดํ“จํ„ฐ์—๋Š” hello world ์ตœ์‹  ๋ฒ„์ „์ด ์—†๋‹ค 

- ๋„์ปค ๋ฐ๋ชฌ์ด ์ž๋™์œผ๋กœ ์ธํ„ฐ๋„ท์— ์ ‘์†ํ•ด์„œ ๋„์ปค ํ—ˆ๋ธŒ์—์„œ ์ฐพ์Œ -> ๋„์ปค ๋ฐ๋ชฌ์ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค 

- ๋„์ปค ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ด์–ด, ํ„ฐ๋ฏธ๋„์— ๊ธ€์”จ๋ฅผ ๋„์›€

* VM๊ณผ ์ปจํ…Œ์ด๋„ˆ์˜ ํฐ ์ฐจ์ด์  – VM์€ ์ „์›์„ ๋„๊ธฐ ์ „๊นŒ์ง€๋Š” ํ•ญ์ƒ ์‚ด์•„์žˆ๋‹ค.

- But ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ , ๋ช…๋ น์ด ์ข…๋ฃŒ๋˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๋Š” ์ฃฝ๋Š”๋‹ค. ์ถœ๋ ฅ์ด ๋๋‚˜๋ฉด ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ์˜ ๋ชฉ์ ์€ ๋๋‚จ

 

 

 

 

 

* docker run -it ubuntu bash / interactive terminal - ์šฐ๋ถ„ํˆฌ ๋‚ด๋ถ€์˜ bash(์…ธ)๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ผ 

-> ๋งคํ‚จํ† ์‹œ์—์„œ ๋ฆฌ๋ˆ…์Šค๋กœ ํ”„๋กฌํ”„ํŠธ๊ฐ€ #์œผ๋กœ ๋ฐ”๋€๋‹ค (id๋Š” root๋กœ ๋จ)

+ ์ด๋ฏธ์ง€ ์œ„์—์„œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋„๋‹ˆ๊นŒ, ์ง€์šธ ๋•Œ๋Š” ์ด๋ฏธ์ง€๋ณด๋‹ค ์ปจํ…Œ์ด๋„ˆ ๋จผ์ € ์ง€์›Œ๋ผ

 

* Ubuntu - ์›๋ž˜๋Š” ์„ค์น˜๊ฐ€ ๊นŒ๋‹ค๋กœ์šด ์šฐ๋ถ„ํˆฌ -> ๋„์ปค๋กœ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

docker pull ubuntu                                                                   // ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ชจ๋“œ, ์„œ๋ฒ„์ฒ˜๋Ÿผ ๋Œ๋„๋ก ๋ฐ๋ชฌ์œผ๋กœ ์‹คํ–‰ (-d)

docker container run -it -d –-rm –-name ubuntuos ubuntu:latest   // ์šฐ๋ถ„ํˆฌOS ์ปจํ…Œ์ด๋„ˆ ์•ˆ์˜ bash ํ”„๋กœ๊ทธ๋žจ์„ it๋กœ ์‹คํ–‰

docker exec -it ubunyuos /bin/bash                                            

docker container ls

docker image ls 

 

* Alpine Linux - ์šฐ๋ถ„ํˆฌ๋Š” ๊ธฐ๋Šฅ ๊ฑฐ์˜ X, ์•ŒํŒŒ์ธ์€ busy box

 ์“ธ ๋งŒํ•œ ๋ช…๋ น์–ด ๋งŽ์Œ but ๋ณด์•ˆ ์ด์Šˆ๊ฐ€ ์žˆ๋‹ค, ๋งค์šฐ ๊ฐ€๋ณ๋‹ค

docker pull alpine

docker container run -it -d —rm –-name alpineos alpine:latest       // ์ด๋ฏธ์ง€๋ฅผ ๊ฐ–๊ณ  ์™”์œผ๋‹ˆ, ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œ์ผœ์ค˜

docker exec -it alpineos /bin/ash                                               // bash ๋Œ€์‹  ash shell

 

 

 

 

 

Chap6. Docker Overview

- Community Edition CE – ํ•™์ƒ๋ฒ„์ „ ๋ฌด๋ฃŒ, ์˜คํ”ˆ์†Œ์Šค / ๊ธฐ์—…์ด๋ผ๋ฉด EE ์œ ๋ฃŒ ๋ฒ„์ „ 

* Docker Engine - ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ , ์‹คํ–‰ํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๋Š”, ๋„์ปค์˜ ๊ฐ€์žฅ ํ•ต์‹ฌ SW 

- ๋„์ปค ํŒŒ์ผ์— ์ •์˜ํ•œ ์ธํ”„๋ผ๋“ค์„ ๋นŒ๋“œํ•ด์„œ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ๋Ÿฌ๋‹ํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ ๋‹ค. 

- ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž˜ ๋Œ์•„๊ฐ€๋Š”์ง€ check ๋“ฑ ์ปจํ…Œ์ด๋„ˆ์˜ lifecycle์„ process, ์ „๋ฐ˜์ ์ธ ๊ฒƒ๋“ค์„ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.

 

*** Docker์˜ 3๋Œ€ ์š”์†Œ  ์„œ๋ฒ„, CLI, ์ด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” rest API

* ์›๊ฒฉ์ง€์— ์žˆ๋Š” docker daemon (engine) / ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋ฒ„๊ฐ€ ๋„์ปค ๋ฐ๋ชฌ 

- ๋‚˜๋Š” CLI๋กœ ํƒ€์ดํ•‘ํ•˜์—ฌ ์ถ˜์ฒœ์— ์žˆ๋Š” ์„œ๋ฒ„(๋ฐ๋ชฌ)์— rest API๋กœ ์ ‘์†(๋„คํŠธ์›Œํฌ)๊ฐ€๋Šฅ // docker engine๊ณผ docker CLI๋Š” ๋…๋ฆฝ

- ๋‘˜์„ ์ด์–ด์ฃผ๋Š” ํ†ต์‹  (REST API) / HTTP ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ๋ช…๋ น์–ด 

* CRUD ๊ธฐ๋ฐ˜์˜ DB์™€ HTTP(ํ†ต์‹ ) get ๋“ฑ 4๊ฐœ ๋ฉ”์†Œ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ, DB์™€ ์—ฐ๋™๋˜๋Š” ๊ธฐ์ˆ ์ด rest // ๊ตฌ์ฒด์ ์ธ ๋ฐฉ์‹์ด restful API

 

* Docker Daemon – CLI or ๋‹ค๋ฅธ ๋ฐ๋ชฌ์ด ๋ณธ์ธ์—๊ฒŒ ์–ด๋– ํ•œ ์š”์ฒญ์„ ํ•˜๋Š”์ง€ ๋“ฃ๊ณ  ์žˆ๋‹ค. ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์˜ ๋ฐ๋ชฌ ๊ฐ„ ํ†ต์‹ ๋„ ๊ฐ€๋Šฅ

* Docker Client – Command line interface (CLI) – give instruction to the Docker Engine 

- ์›น์˜ ํด๋ผ์ด์–ธํŠธ  ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜์™€ ์œ ์‚ฌํ•˜๋‹ค (์›น์ด ์•„๋‹ˆ๊ธด ํ•จ) - ๋„์ปค ํด๋ผ์ด์–ธํŠธ๋Š” ๋„์ปค ์—”์ง„์—๊ฒŒ ๋ณธ์ธ์ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค ์š”์ฒญ

* Docker Desktop – GUI ์ƒ ๋ณด์ด๊ธฐ๋งŒ ํ•˜๋‚˜์ด๊ณ , ์‚ฌ์‹ค์€ ๋‹ค ์ชผ๊ฐœ์ ธ ์žˆ๋‹ค. 

 

* Docker Registries - ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•จ  ๊ณต๊ฐœ๋œ public registry์™€ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” private registry๋กœ ๊ตฌ๋ถ„

- docker pull – ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ / docker run - ์ด๋ฏธ์ง€ ์‹คํ–‰ / docker push - ์ด๋ฏธ์ง€๋ฅผ ํ—ˆ๋ธŒ์— ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ

 

* Docker Ecosystem 

์œ„์—์„œ ์•„๋ž˜๊นŒ์ง€ ์†์œผ๋กœ ํƒ€์ดํ•‘ํ•  ๋ช…๋ น X ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ž๋™ํ™”๋  ์ˆ˜ ์žˆ์Œ 

CI - ์ปดํŒŒ์ผ, ๋นŒ๋“œ๊นŒ์ง€ / CD - ์šด์šฉํŒ€์ด ํ•˜๋Š” deployment๊นŒ์ง€ ์‚ฌ๋žŒ์˜ ๊ฐœ์ž… ์ตœ์†Œํ™” 

DevOps - ๋น ๋ฅธ ์‹œ๊ฐ„ ์•ˆ์— ๊ฐœ๋ฐœ, ์•ˆ์ •์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด

 

- ๊ฐœ๋ฐœ์ž ์ปดํ“จํ„ฐ์—์„œ image๋ฅผ registry์— ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์€ docker push / Code๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๊ฑด git push

+ ์ด๋ฏธ์ง€ ์•ˆ์— ๋„ฃ์€ ์ฝ”๋“œ๊ฐ€ git push ๋Œ€์ƒ์ด ๋˜๋Š” ๊ฒƒ + Docker file (infrastructure as a code) - ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“œ๋Š” ์ฝ”๋“œ 

- ์ด๋ ‡๊ฒŒ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋‘˜์ด ๋‚˜์˜ค๋Š” ๊ฒƒ / ๋‘˜ ๋‹ค Git-hub์— ์˜ฌ๋ฆฐ๋‹ค. 

 

* image๊ฐ€ debug / production level์—์„œ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ์Œ 

- ๊ฐœ๋ฐœ or ์šด์˜ํŒ€์ด release version์˜ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Œ

- ์„ฑ๋Šฅ or ๊ธฐ๋Šฅ ์ค‘์‹ฌ (dev) vs ์•ˆ์ •์„ฑ (ops) - ๋‘˜์˜ ๊ด€์ ์ด ๋‹ค๋ฆ„

 

+ ํ•œ ๋Œ€์˜ ๋„์ปค ๋ฐ๋ชฌ ์œ„์—์„œ, ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ ๋„์šธ ์ˆ˜ ์žˆ์Œ 

- CPU ๊ฐœ์ˆ˜์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์Œ“๊ธฐ O (VM์€ CPU 4๊ฐœ๋ผ๋ฉด 3๊ฐœ๋งŒ ๊ฐ€๋Šฅ)

- ํ˜ธ์ŠคํŠธ๊ฐ€ ์ˆ˜์ฒœ ์ˆ˜๋งŒ๋Œ€๊ฐ€ ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ํ›„๋ฐ˜๋ถ€์— ๋“ฑ์žฅํ•  ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ Orchestrator

 

* Underlying Technologies of Docker - ๋„์ปค๋Š” ๊ณ  GO ์–ธ์–ด๋กœ ๋งŒ๋“ฆ / ๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค ์ปจ์…‰๊ณผ ์œ ์‚ฌ - ์ปจํ…Œ์ด๋„ˆ ๋ณ„ ๊ทธ๋ฃน ๋ถ„๋ฆฌ 

* Namespaces - ์„ž์ด์ง€ ์•Š๋„๋ก ๋ถ„๋ฆฌํ•˜๋Š” namespace ๊ธฐ์ˆ  ์‚ฌ์šฉ / VM์—์„œ๋„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ฒ•์„ ์ปจํ…Œ์ด๋„ˆ๋„ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ 

- ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ๋…๋ฆฝ์ ์ธ ์ปดํ“จํ„ฐ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์†๋Š” ๊ฒƒ, ์ปจํ…Œ์ด๋„ˆ ๋ณ„ ๊ณต๊ฐ„์ด ์ค‘๋ณต๋˜์ง€ ์•Š๋„๋ก namespace ๋ถ„๋ฆฌ 

* Control Groups – cgroups - ์ ‘๊ทผ ๊ถŒํ•œ ๊ทธ๋ฃน - virtual machine์ฒ˜๋Ÿผ ์ƒ๊ฒผ๋‹ค / ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ๋‘˜์ด ๋น„์Šทํ•˜๋‹ค 

- container ๊ฐ„์—๋Š” ์ตœ๋Œ€ํ•œ ์ถฉ๋Œ์ด ์—†๋„๋ก ์ œํ•œํ•˜์—ฌ resource management 

 

* Getting started – docker run -d -p 80:80 docker/getting-started 

-d ๋ฐ๋ชฌ  ์„œ๋ฒ„์ฒ˜๋Ÿผ / -p ํฌํŠธ - ๋‚ด๋ถ€์™€ ์™ธ๋ถ€ ip address๊ฐ€ ๋‹ค๋ฅด๋‹ค (NAT/PAT)

- port address translation (PAT) ๋ฐ”๊นฅ๋„ ์•ˆ์ชฝ๋„ 80์„ ์ค€๋‹ค๋Š” ์˜๋ฏธ - ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋œจ๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €์— (localhost:80) ์ ‘์† ๊ฐ€๋Šฅ 

+ ls -> ์‚ด์•„์žˆ๋Š” ๊ฒƒ๋“ค๋งŒ ๋œธ / ls all -> ์‹คํ–‰๋˜์—ˆ๋Š”๋ฐ, ์ž๊ณ  ์žˆ๋Š” ์• ๋“ค๋„ ๋‹ค ์ „๋ถ€ ๋‹ค ๋œฌ๋‹ค. 

+ ์›น๋ธŒ๋ผ์šฐ์ € get / curl – ๊ฐ„๋‹จํ•œ HTTP methods / ๋” ํ™•์žฅ๋œ pip / python import requests ํŒŒ์ด์ฌ ๋ชจ๋“ˆ 

 

 

 

 

 

Chap7. Docker Hub & Dockerfile

* Docker hub – sharing immutable infrastructures - ๋‚จ์ด ๋งŒ๋“  ๋‹ค๋ฅธ high quality container ์ด๋ฏธ์ง€๋“ค์„ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

Ex) python ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ์ด๋ฏธ ๋‹ค ๊ฐ–์ถฐ์ง„ ๊ฒƒ - ํ”Œ๋žซํผ์— ๋ฌด๊ด€ํ•˜๊ฒŒ, immutableํ•˜๊ฒŒ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜์—ฌ, ๋‚ด ํŒŒ์ด์ฌ SW ๋Œ๋ฆฌ๊ธฐ ๊ฐ€๋Šฅ 

 

* Dockerfile - ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ํŒŒ์ผ, ๊ณ ์œ ๋ช…์‚ฌ ๋„์ปคํŒŒ์ผ - ์•„๋ž˜๋ถ€ํ„ฐ ์œ„๊นŒ์ง€ ์ฐจ๊ณก์ฐจ๊ณก ํ•„์š”ํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์Œ“๋Š” ๊ฒƒ (๋ ˆ์ด์–ด)

- ๋„์ปค ํŒŒ์ผ์ด infrastructure as a code์˜ ๋Œ€๋ช…์‚ฌ

 

5๊ฐœ์˜ ๋ช…๋ น์„ && and๋กœ ๋ฌถ์Œ - ์ด๊ฒŒ ํ•œ ์ค„ ๋ช…๋ น -> RUN ๋ช…๋ น์–ด๋Š” ํ•œ ๋ฒˆ ์‹คํ–‰๋จ

FROM RUN ENTRYPOINT // ์ด๋Ÿฐ ๋นจ๊ฐ„ ๋ช…๋ น์–ด๋“ค์€ ์Œ“์ธ๋‹ค -> ๊ฐœ์ˆ˜ ์ œํ•œ์ด ์žˆ์Œ์ด๊ฑธ ๋ ˆ์ด์–ด๋ผ๊ณ  ํ•œ๋‹ค.

๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ๋™์ž‘์ด ์•ˆ ๋จ, only 20~30๊ฐœ

 

๊ฐ€์ ธ์˜จ ์šฐ๋ถ„ํˆฌ ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐ€์„œ ํŒŒ์ด์ฌ ์„ค์น˜

entrypoint ์ถœ์ž…๊ตฌ like cpp์˜ main func / ๋นŒ๋“œํ•ด์„œ ์‹คํ–‰ํ•˜๊ณ , ์ตœ์ดˆ์˜ ์ง„์ž… ์ง€์ 

 

FROM python:3                                             // FROM – creates a layer from the Python3 Docker Image

COPY . /app                                                  // COPY – adds files from your Docker client’s current dir to /app

CMD [ “python”, “/app/myapp.py” ]                  // CMD – specifies what command to run within the container 

# myapp.py์—๋Š” print(“Hello, World!”) ํ•œ ์ค„ ๋“ค์–ด๊ฐ€ ์žˆ์Œ

 

* Dockerfile Execution 

docker build -t myapp .                                 // . current directory ์˜๋ฏธํ•˜๋Š” ์ 

docker run -it –-rm –-name py3 myapp            // ํƒ€์ดํ‹€์€ py3 ์œผ๋กœ ์คŒ, —rm์€ ์ง€์›Œ๋ฒ„๋ฆฌ๋ž€ ์˜๋ฏธ

 

* Docker Container Lifecycle - ์ฃผ๋กœ start, stop ์‚ฌ์šฉ

 

 

 

- docker container ls -a -q (or -aq)    // ๋‚˜์ค‘์— ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ ์ค‘ ๋‚œ์ˆ˜๋กœ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ๋งŒ ๋ฉˆ์ถ”๊ณ  ์‹ถ์„ ๋•Œ, ๋งจ ์•ž์˜ ๋‚œ์ˆ˜๋งŒ ์ถœ๋ ฅ 

- docker system prune                    // ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ๋ณผ๋ฅจ, ์บ์‹œ ๋“ฑ ์‹น ๋‹ค ์ง€์›Œ๋ฒ„๋ฆฌ๋Š”๊ฒŒ prune

* docker image rm -f $(docker image ls -aq) // ์ด๋ฏธ์ง€ ์‹น ๋‹ค ์ง€์šฐ๊ณ  ์‹ถ์„ ๋•Œ, ๋‚œ์ˆ˜ ๋ฝ‘์•„์„œ ์ „๋ถ€ ์ง€์šธ ์ˆ˜ ์žˆ์Œ

 

 

 

 

 

Chap8. Build and Push Images 

- ์ง์ ‘ ์˜ˆ์ œ๋กœ ์ฃผ์–ด์ง„ ๋„์ปค ํŒŒ์ผ์„ ์ดํ•ดํ•˜๊ณ , ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž –> nginx ์˜ˆ์‹œ

 

* Dockerfile

FROM ubuntu:latest 

RUN apt-get update                                      // RUN - ๋‚ด๊ฐ€ ๊ฐ€์ ธ์˜จ ์ด๋ฏธ์ง€ ์œ„์—์„œ ์‹คํ–‰

RUN apt-get install -y nginx                            // ์ฆ‰, ์šฐ๋ถ„ํˆฌ ์œ„์—์„œ ํ•ด๋‹น ๋ช…๋ น์–ด ์‹คํ–‰

RUN echo “this is a ubuntu container”

WORKDIR /etc/nginx

CMD [“nginx”, “-g”, “daemon off;”]

EXPOSE 80                                                  // port address 80 ์‚ฌ์šฉํ•ด์„œ ์™ธ๋ถ€์™€ ํ†ต์‹ 

docker build –tag myubuntu:1.0 .                     // ์ ์„ ํ•˜๋‚˜ ์ฐ๋Š” ๊ฒƒ - ๋‚ด๊ฐ€ ์žˆ๋Š” ์œ„์น˜ / ํ˜„์žฌ directory ์˜๋ฏธ

                                                                   // ์ฆ‰ ์ง€๊ธˆ ์žˆ๋Š” ๊ณณ์˜ ๋„์ปค ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•œ๋‹ค๋Š” ๋œป

docker run --name myubuntu-nginx -d -p 4000:80 myubuntu:1.0 

docker stats                                                 // stats - ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์“ฐ๊ณ  ์žˆ๋Š”์ง€ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

* port address translation PAT - ์ปจํ…Œ์ด๋„ˆ๊ฐ€ 80๋ฒˆ ํฌํŠธ๋ฅผ ์“ฐ๊ฒ ๋‹ค - ์ปจํ…Œ์ด๋„ˆ ์•ˆ์˜ ์ด์•ผ๊ธฐ

- ๋ฐ”๊นฅ์—์„œ ์ ‘์†ํ•˜๋ ค๋ฉด ์™ธ๋ถ€ ํฌํŠธ์™€์˜ mapping ํ•„์š” / ์™ธ๋ถ€์—์„œ 4000์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด, ๋‚ด๋ถ€์—์„œ 80์œผ๋กœ ๋ฐ›๋Š”๋‹ค.

+ PAT ์ด์œ : ํ•˜๋‚˜์˜ IP ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์—ฌ๋Ÿฌ ๋‚ด๋ถ€ ํ˜ธ์ŠคํŠธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ // http://localhost:4000 -> ๋‚ด๋ถ€ 80์œผ๋กœ ๊ฐ

 

 

 

 

 

Chap9. Docker Compose - ๋‘˜ ์ด์ƒ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋“ค์ด ํ†ต์‹ ํ•˜๋ฉฐ ์„œ๋น„์Šค๋ฅผ ์ด๋ฃธ

- ๋ณต์ˆ˜ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค => ๋„์ปค ์ปดํฌ์ฆˆ ํŒŒ์ผ (์–ŒํŒŒ์ผ) / ๊ธฐ์กด ๋„์ปค ํŒŒ์ผ์€ 1๊ฐœ์˜ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ํŒŒ์ผ

 

*** Docker Services 

 ์ตœ์ข… ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ•˜๋‚˜ - ์œ ํŠœ๋ธŒ / ์ด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ถ€ํ’ˆ ๊ฐ™์€ ์„œ๋น„์Šค๋“ค์ด ๋ชจ์—ฌ์„œ, ํ•˜๋‚˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•จ 

ex) ๋น„๋””์˜ค๋“ค ์ €์žฅํ•˜๋Š” DB ์„œ๋น„์Šค / ๋น„๋””์˜ค ํ’ˆ์งˆ์„ ์กฐ์ •ํ•˜๋Š” ์„œ๋น„์Šค / ์‚ฌ์šฉ์ž์—๊ฒŒ ์ŠคํŠธ๋ฆฌ๋ฐ ์ž‘์—…์„ ํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋น„์Šค

ex2) ๋ฐฑ์—”๋“œ ๊ตฌ์กฐ - 1) ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ 2) DB 3) Logic server + 4) ๋ฐฑ์—”๋“œ ์ค‘ ํ”„๋ก ํŠธ์—”๋“œ - ์ตœ์ดˆ์˜ request๋ฅผ ๋ฐ›์•„์ฃผ๋Š” ์• 

 

- ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๋“ค์€ ๋ณ„๋„์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ตฌ์„ฑ  ๋ณต์žกํ•œ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์ด ์•„๋‹ˆ๋ผ, ์ž˜๊ฒŒ ์ชผ๊ฐœ์ง„ ์„œ๋น„์Šค๋“ค๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ

* ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋Š” ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€์— ๋งคํ•‘์ด ๋œ๋‹ค. ์ด ์„œ๋น„์Šค๋ฅผ (๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š”) ๋ช‡ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋„์šธ ๊ฒƒ์ธ์ง€ ๊ฒฐ์ • / 

- scaling: ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ปจํ…Œ์ด๋„ˆ ๊ฐœ์ˆ˜๋ฅผ ํ•„์š”ํ•œ ๋งŒํผ ๋Š˜์ด๊ณ , ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. 

 

*** Docker Compose - ๋‘˜ ์ด์ƒ์˜ ์ด๋ฏธ์ง€๋กœ ๋ฌถ์ธ ์• ๋“ค์„ ๋…ผ๋ฆฌ์ ์ธ ํ•œ ๊ทธ๋ฃน์ฒ˜๋Ÿผ ๋ฌถ์–ด์„œ ์‹คํ–‰ํ•˜๊ณ , ๊ด€๋ฆฌํ•œ๋‹ค. 

Dockerfile ์ฒ˜๋Ÿผ ์—ฌ๊ธฐ์„œ๋Š” docker-compose.yml (์–ŒํŒŒ์ผ) - ๋‘˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์šฐ๋Š” ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ํ•ด๋‹น ํŒŒ์ผ์„ ์‹คํ–‰

compose up - ์–ŒํŒŒ์ผ์— ๋“ค์–ด๊ฐ„ multi-container๋“ค์„ ์‹น ๋„์šฐ๋Š” ๋ช…๋ น์–ด / compose down – stop all services 

+ ๋„์ปค ๋ฐ์Šคํฌํƒ‘์œผ๋กœ ํ•œ ๋ฒˆ์— ์ž๋™์œผ๋กœ ๊น”๋ฆฌ์ง€๋งŒ, ํ•˜๋‚˜์”ฉ ์ชผ๊ฐœ์„œ ๋ณ„๋„ ์„ค์น˜๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. 

* ํ•˜๋‚˜์˜ ๋„์ปค ์ปดํฌ์ฆˆ๋กœ ๋„์šด ๋‘ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋…ผ๋ฆฌ์ ์ธ ๋„คํŠธ์›Œํฌ๋กœ ์—ฐ๊ฒฐํ•ด ์คŒ - IP Address ์‚ฌ์šฉ X / Prefix (์ด๋ฆ„) cattle mode

+ DNS - ์ด๋ฆ„์„ ํ†ตํ•ด node๋“ค์„ ๋งŒ๋“ค์–ด ์คŒ - ์•Œ์•„์„œ IP Address ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฐ”๊ฟˆ, ์ฆ‰ ๋„คํŠธ์›Œํฌ๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

 

* How to create docker compose files – docker-compose.yml ์–ŒํŒŒ์ผ ์ž‘์„ฑ 

 

version: ‘3.7’                       // TAP ๋ง๊ณ , ๋‘ ์นธ ์”ฉ ์ผ์ผ์ด ํ•ด๋ผ

service:

web:                              // web / database - ์ด ์ด๋ฆ„ ์ค‘์š” 

  image: nginx                // ์ด๋ฏธ์ง€๋Š” nginx / redis

database:

    image: redis 

 

+ 1๋ฒˆ์ด 2๋ฒˆ ์„œ๋น„์Šค๋ณด๋‹ค ๋จผ์ € ๋œฐ๊บผ๋ž€ ๋ณด์žฅ์€ X, ๊ฐ„๋‹จํ•˜๊ฒŒ๋Š” sleep์œผ๋กœ ์žฌ์šธ ์ˆ˜ ์žˆ์Œ 

- ๋ณดํ†ต ์ด๋Ÿด ๊ฒฝ์šฐ, 2๋ฒˆ์ด ๋จผ์ € 1๋ฒˆ์—๊ฒŒ hello ๋ณด๋‚ด๊ณ , world ๋ฐ›์œผ๋ฉด (heartbeat) ์„œ๋ฒ„ ์‚ด์•„์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด ๋“ค์–ด๊ฐ„๋‹ค. 

+ port address translation, ์Šคํ† ๋ฆฌ์ง€์™€ ๊ด€๋ จ๋œ volumes + environment์—์„œ system params ์„ค์ • ๊ฐ€๋Šฅ

 

* Cattle mode in docker compose - Container ์˜ค๋ฆฌ์ง€๋„(working dir, ํด๋”) ์ด๋ฆ„ - web (์„œ๋น„์Šค ์ด๋ฆ„) – 1, 2, 3 … 

-> ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ๋œฐ ์ˆ˜ ์žˆ์Œ  ์ด๋•Œ Cattle mode๋กœ 1, 2, 3 ์ด๋ ‡๊ฒŒ ๋ช…๋ช…๋œ๋‹ค. 

- ์ปจํ…Œ์ด๋„ˆ db-1๊ฐ€ web-1์— ์ ‘์†ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, http://web-1 ๋ผ๊ณ  ์“ฐ๋ฉด ์„œ๋ฒ„์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ์Œ! 

Ex) Container lecture09-sources-web-1 / Container lecture09-sources-database-1 

 

* docker compose down ์‹คํ–‰ ์‹œ ์ฃผ์˜ํ•  ์  – upํ•œ ์œ„์น˜, ์ฆ‰ yml ํŒŒ์ผ์ด ์žˆ๋Š” ๊ณณ์—์„œ ๋ช…๋ น์–ด ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค. 

Ex) ports: “8000:80” - ๋ฐ”๊นฅ์—์„œ ๋“ค์–ด๊ฐˆ ๋• 8000 / ๋‚ด๋ถ€ ํฌํŠธ๋Š” 80 - curl๋กœ localhost:8000์— ๋ถ™์„ ์ˆ˜ ์žˆ์Œ

- NAT/PAT – Network and Port Address Translation - ์™ธ๋ถ€์—์„œ๋Š” NAT/PAT๋กœ ๋ฒˆ์—ญ๋œ ๋ฒˆํ˜ธ ์‚ฌ์šฉ 

 

* YAML - JSON๊ณผ ์œ ์‚ฌํ•œ key-value์— map chain, ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋ฅผ ์ •์˜ํ•˜๋Š” ์–ธ์–ด

- Configuration files, Log files, Cross-language data sharing ๋“ฑ ๋‹ค์–‘ํ•œ ๊ณณ์— ํ™œ์šฉ๋˜๋Š” format

+ ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ ์†์œผ๋กœ ํ•˜๋Š” ํ–‰์œ„๋Š” ๋‚˜์ค‘์— ๋‹ค ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์ž๋™ ์ž‘์„ฑ  ์ธ๊ฐ„์ด ๊ฐœ์ž…ํ•˜์ง€ ์•Š๋„๋ก ex) pyyaml

 

docker-compose.yml

- ๋ฐ”๊นฅ์—์„œ 8001๋กœ ์ ‘๊ทผํ•˜๋ฉด worker 1 ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ 80๋ฒˆ ํฌํŠธ

- 8002๋Š” worker2 ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ 80๋ฒˆ ํฌํŠธ * ์„œ๋กœ ๋‹ค๋ฅธ ์„œ๋น„์Šค, ์ฆ‰ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€

- curl http://worker1:80

- curl http://worker2:80

*** curl๋กœ IP or domain ์˜์—ญ์— ์šฐ๋ฆฌ๊ฐ€ ๋ถ€์—ฌํ•œ ์ด๋ฆ„(worker1, 2)์„ ์ฃผ๋ฉด 80๋ฒˆ ํฌํŠธ๋กœ ๋ถ™๊ธฐ ๊ฐ€๋Šฅ (์ด๊ฒŒ ์ œ์ผ ์ค‘์š”) 

+ docker compose up -d --scale manager=4     

- ์Šค์ผ€์ผ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งค๋‹ˆ์ €๋ฅผ 4๊ฐœ ๋„์›Œ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•„์š”ํ•  ๋•Œ ํ•„์š”ํ•œ ๋งŒํผ ์ปจํ…Œ์ด๋„ˆ ์ˆ˜๋ฅผ ํ‚ค์šฐ๋Š” ๊ฒƒ

 

 

 

 

 

Chap10. Docker Storage  ์ €์žฅ ๊ณต๊ฐ„, ์Šคํ† ๋ฆฌ์ง€์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ

* ์ปจํ…Œ์ด๋„ˆ์— ํŒŒ์ผ์„ ์ €์žฅํ•  ๋•Œ์˜ ๋ฌธ์ œ - ์ปจํ…Œ์ด๋„ˆ๋Š” ์ง€์†์ ์ด์ง€ ์•Š์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋Š” ์–ด๋”˜๊ฐ€์— ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.

- ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ writable layer ๊ฐ€๋Šฅํ•˜๋‚˜, OS๋ณ„ ๊ตฌํ˜„์€ ๋Š๋ฆฌ๊ณ  ๋ณต์žกํ•จ -> ๊ถŒ์žฅ X. volumes๊ณผ bind mounts ์‚ฌ์šฉ์„ ๊ถŒ์žฅ 

- ์ปจํ…Œ์ด๋„ˆ ๋ฐ”๊นฅ์— & ์ปดํ“จํ„ฐ ์•ˆ์— ์žˆ๋Š” ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์˜๋ฏธ 

- ๋ฌผ๋ก  ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—๋„ ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค (VM์ฒ˜๋Ÿผ) but ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ทธ๋Ÿฌ๋ ค๊ณ  ๋งŒ๋“  ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. 

+ ์›๋ž˜ ๋ชฉ์  - ํ”„๋กœ๊ทธ๋žจ์„ ์›ํ•˜๋Š” ๋งŒํผ ์‹คํ–‰ํ•˜๊ณ , ํ•„์š” ์—†์Œ ์ง€์šฐ๋Š” ๊ฑด๋ฐ, ์ด ๋ชฉ์ ๊ณผ ๋งž์ง€ ์•Š์Œ

* Storing files in the host machine – volume, bind mount ๋‘˜ ๋‹ค ์ปจํ…Œ์ด๋„ˆ or ์ปดํ“จํ„ฐ ์ „์›์ด ์ฃฝ์–ด๋„ ์‚ด์•„์žˆ๊ธด ํ•จ

 

(1) bind mount

์ปจํ…Œ์ด๋„ˆ ๋ฐ– / HOST ์ปดํ“จํ„ฐ ํŒŒ์ผ์‹œ์Šคํ…œ - ํƒœ์ƒ์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” ๋””์Šคํฌ 

์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋˜, ์ปจํ…Œ์ด๋„ˆ์™€ ์ƒ๊ด€์—†์ด ์กด์žฌํ•˜๋Š” ํŒŒ์ผ๋“ค 

+ OS์—์„œ ์ €์žฅ์žฅ์น˜๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๋งˆ์šดํŠธ๋ผ๊ณ  ํ•จ 

 

(2) volume - docker area – part of the host filesystem managed by Docker

- ๋„์ปค๊ฐ€ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•œ ์ž‘์€ ๋ฆฌ๋ˆ…์Šค ๋“ฑ ๋„์ปค๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ์ง€ ์•Š์œผ๋ฉฐ ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„

- ์—ฌ๊ธด ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹ˆ๋ผ, ๋„์ปค๊ฐ€ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๋งŒ๋“  ๊ฒƒ (read๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์‚ฌ์šฉ์ž ์ ‘๊ทผ ๋ฐ write ์›์น˜ X)

- ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ volume์„ ๋™์‹œ์— ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋“ค์ด ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ, ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฃฝ์–ด๋„ ๋ณผ๋ฅจ์€ O

- docker volume create / docker volume prune 

* docker volume create myvol-1                      // create ๋Œ€์‹  inspect ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋ณผ๋ฅจ ๋‚ด๋ถ€์˜ ์„ธ๋ถ€ ์ •๋ณด ๋ณผ ์ˆ˜ O

 

(3) tmpfs mounts - temporal file system - RAM, ๋ฉ”๋ชจ๋ฆฌ - ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งˆ์น˜ ์ž„์‹œ ๋””์Šคํฌ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

- ๋งค์šฐ ๋น ๋ฅธ ์†๋„ but ์ž‘์€ ๋ฐ์ดํ„ฐ๋งŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ, ์ปจํ…Œ์ด๋„ˆ or ์ปดํ“จํ„ฐ ์ฃฝ์œผ๋ฉด ๊ฐ™์ด ์‚ฌ๋ผ์ง, only Linux

 

* Jenkins – ์  ํ‚จ์Šค 

- CI/CD๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์–ธ๊ธ‰๋˜๋Š” ์ž๋™ํ™” ๋„๊ตฌ - ์™ธ๋ถ€์™€์˜ ํ†ต์‹ ์„ ์œ„ํ•ด์„œ ํฌํŠธ๊ฐ€ ๋‘ ๊ฐœ ์—ด๋ ค์•ผ ํ•จ

- docker pull jenkins/jenkins:lts-jdk11

- docker run -p 8080:8080 -p 50000:50000 -v myvol-1 :/var/jenkins_home jenkins/jenkins:lts-jdk11

-> http://localhost: 8080 – ๋‚œ์ˆ˜ ํ‚ค ๊ฐ’์„ ํ†ตํ•ด ์  ํ‚จ์Šค ์„ค์น˜ ๊ฐ€๋Šฅ 

- docker container stop {jenkins container ID} - ์ปจํ…Œ์ด๋„ˆ๋Š” ์ฃฝ์˜€์ง€๋งŒ, ๋ณผ๋ฅจ์€ ๊ทธ๋Œ€๋กœ ์ €์žฅ๋จ (myvol-1)

+ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ•˜๋‚˜์˜ volume์„ ๋™์‹œ์— ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

* docker-compose up์„ ํ†ตํ•ด yaml ์–ŒํŒŒ์ผ ์ž˜ ์งœ์„œ ๋Œ๋ฆฌ๋ฉด, ์ผ๋ จ์˜ ์†์œผ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋“ค ํ•œ๋ฐฉ์— ์‹คํ–‰ ๊ฐ€๋Šฅ (์ด๊ฒŒ ์“ฐ๋Š” ์ด์œ )

 

 

 

 

 

Chap11. Docker Machine - ๋ณต์ˆ˜์˜ ๋ฌผ๋ฆฌ์ ์ธ / ๋…ผ๋ฆฌ์ ์ธ ๋„์ปค ์‹คํ–‰ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ

- Docker machine ๋„์ปค ๋จธ์‹  - ๋„์ปค๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ๊ฐ€์ƒ๋จธ์‹ ์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋„๊ตฌ - ์—ฌ๋Ÿฌ ๋Œ€์˜ ์ปดํ“จํ„ฐ์— ๋™์‹œ์— ๋ฟŒ๋ฆฌ๋Š” ๊ฒƒ

- ๋„์ปค๊ฐ€ ์‹คํ–‰๋˜๋„๋ก Virtual hosts ์šด์˜ํ•ด์ฃผ๋Š” ์›๊ฒฉ ๊ด€๋ฆฌ ํˆด / ์ง€๊ธˆ๊นŒ์ง€๋Š” ํ•œ ๋Œ€์˜ ์ปดํ“จํ„ฐ ์œ„์—์„œ ์ปจํ…Œ์ด๋„ˆ & ์Šคํ† ๋ฆฌ์ง€ 

-> ์ด์ œ๋Š” ์—ฌ๋Ÿฌ ์ปดํ“จํ„ฐ๋“ค์„ ๋ฌถ์–ด์„œ, ๋ชจ๋‘ host machine์—์„œ, ์›๊ฒฉ์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋„์ปค ๋จธ์‹ 

+ ๋„์ปค ๋จธ์‹ ์€ ๊ธฐ๋ณธ ๋ชจ๋“œ๊ฐ€ virtual box๋กœ VM์„ ๋„์šฐ๊ณ , ๊ทธ ์œ„์— ๋„์ปค๋ฅผ ๋„์šฐ๋Š” ๊ฒƒ

 

* Docker Machine to Docker Engine - ์šฐ๋ฆฌ๊ฐ€ CLI๋กœ ๋ช…๋ น ์‹คํ–‰ - ๋‚ด ์ปดํ“จํ„ฐ์—์„œ ๋„์›Œ์ง„ ๋„์ปค ๋ฐ๋ชฌ ์„œ๋ฒ„์— REST API๋กœ ์ ‘์†

- ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์˜ ๋„์ปค ์„œ๋ฒ„์— HTTP ๊ธฐ๋ฐ˜์˜ ํ†ต์‹ ์œผ๋กœ ์ ‘์†ํ•˜๋Š” ๊ฒƒ์€ ์–ธ์ œ๋‚˜ ๊ฐ€๋Šฅํ•˜๋‹ค.

- docker-machine create --driver virtualbox myvm1        // driver๋ฅผ virtualbox ๋ง๊ณ  ๋‹ค๋ฅธ ๊ฒƒ๋„ OK

- ๋„์ปค ๋จธ์‹ ์€ VM์„ ๋งŒ๋“ค๊ณ  - ๋ฆฌ๋ˆ…์Šค๋ฅผ ์„ค์น˜ํ•˜๊ณ , ๋„์ปค๋ฅผ ์„ค์น˜ํ•˜๊ณ , ํ•„์š”ํ•œ ํ™˜๊ฒฝ์„ ์„ค์น˜ํ•˜๊ณ , ์›๊ฒฉ ์ ‘์†์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ

Ex) docker-machine stop myvm1 / docker-machine start myvm1 / docker-machine rm myvm1 – ์›๊ฒฉ์œผ๋กœ ๋„์ปค ๋จธ์‹  control 

 

* ssh - secure shell - ์›๊ฒฉ์— ์žˆ๋Š” ์ปดํ“จํ„ฐ์— ์•”ํ˜ธํ™”๋œ ํ†ต์‹ ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ssh ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉ

Ex) ๊ธฐ์กด: docker version      ์›๊ฒฉ: docker-machine ssh default docker version 

+ docker-machine env default - ์ง€๊ธˆ๋ถ€ํ„ฐ ์น˜๋Š” ๋ช…๋ น์€ ssh default ์—†์–ด๋„, ์›๊ฒฉ์— ์žˆ๋Š” ์ปดํ“จํ„ฐ๋กœ ๋ณด๋‚ด์ค˜ 

- restful API๋ฅผ ํ†ตํ•ด ๋„์ปค CLI๊ฐ€ ์›๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ // -u : undo๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ๋Œ์•„์˜ฌ ์ˆ˜ ์žˆ์Œ 

- docker-machine ls -> ๋‚ด๊ฐ€ ์ง€๊ธˆ ํƒ€์ดํ•‘ํ•˜๋Š” ๋ช…๋ น์ด ๋Œ€์ฒด ๋ˆ„๊ตฌํ•œํ…Œ ๊ฐ€? / ์—ฌ๋Ÿฌ ๊ฐœ ์ค‘ ํ•˜๋‚˜๋งŒ * (์›๊ฒฉ์œผ๋กœ ๋ณด๋‚ด์ง€๋Š” ํƒ€๊ฒŸ)