Search

Dockerλž€?

Created
2021/03/23
Tags
Docker
Introduction
Virtualization
Container
Image
Docker Toolbox
Docker for Windows
Docker for Mac
Docker ν΄λΌμ΄μ–ΈνŠΈ
Docker 데λͺ¬

Subjects

β€’

1. Dockerλ₯Ό μ°Ύμ•„λ³΄κ²Œ 된 이유

Mac OS X ν™˜κ²½μ— ν‘Ή λΉ μ Έλ“€κΈ° μ‹œμž‘ν•˜λ©΄μ„œ 컴퓨터가 ν•„μš”ν•œ λͺ¨λ“  과정에 λ§₯을 μ΄μš©ν•˜κΈ° μ‹œμž‘ν–ˆλ‹€. 그리고 학ꡐ μ»€λ¦¬ν˜λŸΌμ— μžˆλŠ” κΈ°κ³„ν•™μŠ΅ 및 λ”₯λŸ¬λ‹μ„ λ°°μš°λ©΄μ„œ λ§₯을 μ΄μš©ν•˜μ—¬ λ”₯λŸ¬λ‹μ„ 해보고 μ‹Άλ‹€λŠ” 생각을 많이 ν•˜κ²Œ λ˜μ—ˆλ‹€.
λ”₯λŸ¬λ‹μ—λŠ” 주둜 nvidia의 GPUκ°€ μ„ ν˜Έλ˜λŠ”λ°, λ§₯은 nvidiaλ³΄λ‹€λŠ” AMD의 GPU μΉœν™”μ μœΌλ‘œ 아킀텍쳐가 ꡬ성이 λ˜μ–΄ 있고 κ·ΈλŸ¬λ‹€λ³΄λ‹ˆ μžμ—°μŠ€λŸ½κ²Œ λ§₯으둜 λ”₯λŸ¬λ‹μ„ ν•˜λŠ” κ²ƒμ—λŠ” ν•œκ³„κ°€ μžˆλ‹€λŠ” μ–˜κΈ°λ₯Ό 많이 λ“£κ²Œ λ˜μ—ˆλ‹€.
λ”°λΌμ„œ nvidia의 2080tiκ°€ μž₯착된 λ°μŠ€ν¬νƒ‘μ„ μ„œλ²„ PC둜 두고 ssh 톡신을 μ΄μš©ν•˜μ—¬ μ ‘κ·Ό ν•  수 μžˆλ„λ‘ ꡬ상을 ν•΄λ³΄μ•˜λ‹€. 코딩은 λ§₯μ—μ„œ μ§„ν–‰ν•˜λ˜ ν•™μŠ΅μ€ λ°μŠ€ν¬νƒ‘ μ„œλ²„λ₯Ό μ΄μš©ν•˜λŠ” λ°©μ‹μœΌλ‘œ 말이닀.
이에 λŒ€ν•΄μ„œλŠ” μ• λ§€ν•œ 점듀이 μžˆμ—ˆλ‹€. GPUκ°€ μž₯착된 PCλ₯Ό ν•™μŠ΅μš© μ„œλ²„λ‘œ 두기 μœ„ν•΄μ„  Windowsλ³΄λ‹€λŠ” ubuntu ν™˜κ²½μ΄ μ„ ν˜Έλœλ‹€λŠ” κ²ƒμ΄μ—ˆλŠ”λ°, λ°μŠ€ν¬νƒ‘μ˜ Windowsλ₯Ό μ’…μ’… μ΄μš©ν•΄μ•Όν•  λ•Œκ°€ μžˆμ—ˆκΈ° λ•Œλ¬Έμ΄λ‹€. κ·Έλ ‡λ‹€κ³  Windows ν™˜κ²½μœΌλ‘œ μ„œλ²„λ₯Ό λ‘μžλ‹ˆ ubuntu에 μ΅œμ ν™”λœ 것듀이 λ§Žμ•„μ„œ κ²°κ΅­ λ”₯λŸ¬λ‹ κ³Όμ • 쀑에 λ°œμƒν•  수 μžˆλŠ” μ œν•œ 사항이 λ§Žμ•„ λ³΄μ˜€λ‹€.
μ΄ˆκΈ°μ— λ‚΄λ¦° 해닡은 λ“€μ–Ό λΆ€νŒ…μ΄μ—ˆλ‹€. λ“€μ–Ό λΆ€νŒ…μ„ μ„€μ •ν•˜κ³  κ·Έ ν™˜κ²½μ„ λ¨Όμ € νƒμƒ‰ν•΄λ³΄κ³ μž λͺ‡ 달 μ΄μš©μ„ ν•˜κ²Œ λ˜μ—ˆλŠ”λ° κ²°κ΅­ μ„ΈλΆ€ λ¬Έμ œκ°€ μžˆμ—ˆλ‹€.
β€’
λ“€μ–Ό λΆ€νŒ…μ„ μœ„ν•œ genome 섀정이 κΉŒλ‹€λ‘­λ‹€.
β€’
Graphic Driver μ—…λ°μ΄νŠΈλ₯Ό ν•΄μ•Όν•˜λŠ” μƒν™©μ—μ„œλŠ” λΆ€νŒ… 였λ₯˜κ°€ μž¦μ•˜λ‹€.
β€’
Library, Frameworkλ“€μ˜ 버전이 μ„œλ‘œ μ—‰ν‚€λ©΄μ„œ Dependency 톡일화가 μ–΄λ €μ› λ‹€.
κ·Έλ ‡κ²Œ 해결책을 μ°Ύμ•„λ³΄λ˜ 쀑 DockerλΌλŠ” 것을 찾게 λ˜μ—ˆλ‹€. Dockerκ°€ λ“±μž₯ν•œ λ°°κ²½μ—λŠ” λ‚΄κ°€ κ°–κ³  있던 λ¬Έμ œμ λ„ 일뢀 μžˆμ—ˆλ˜ 것을 λ³Ό 수 μžˆμ—ˆλ‹€. 덕뢄에 ν₯미둭게 Docker에 λŒ€ν•΄μ„œ 찾아보고 μ•Œμ•„κ°€λ³Ό 수 μžˆμ—ˆλ‹€.

2. Docker

1) Docker와 가상화 기술

DockerλŠ” Go μ–Έμ–΄λ‘œ μž‘μ„±λœ 가상화 ν™˜κ²½μ„ κ΅¬μΆ•ν•˜λŠ”λ° μ΄μš©λ˜λŠ” μ˜€ν”ˆμ†ŒμŠ€ ν”„λ‘œμ νŠΈμ΄λ‹€. 기쑴에 μ‚¬μš©λ˜λ˜ 가상화 κΈ°μˆ μ— λΉ„ν•΄μ„œ μ„±λŠ₯ 손싀이 거의 μ—†μ–΄μ„œ λ§Žμ€ 인프라 μ†”λ£¨μ…˜μ— μ΄μš©λœλ‹€.
일반적으둜 μ§€μΉ­ν•˜λŠ” Docker라 함은 상황에 따라 2가지 λ¬Έλ§₯으둜 μ΄μš©λœλ‹€. Docker Engine을 μ˜λ―Έν•˜κ±°λ‚˜, Docker의 μ—¬λŸ¬ ν”„λ‘œμ νŠΈλ“€μ„ ν†΅μΉ­ν•˜μ—¬ Docker라고 λΆ€λ₯Έλ‹€.
Docker Compose, Private Registry, Docker Machine, Kinematic λ“± Dockerμ—λŠ” μ—¬λŸ¬ ν”„λ‘œμ νŠΈλ“€μ΄ μžˆλ‹€. μ΄λŸ¬ν•œ Docker ν”„λ‘œμ νŠΈλ“€μ€ Docker Engine을 쑰금 더 효율적으둜 μ‚¬μš©ν•˜κΈ° μœ„ν•œ κ²ƒμ΄λ―€λ‘œ 결ꡭ에 핡심은 Docker Engine이닀.
κΈ°μ‘΄ 가상화 κΈ°μˆ μ€ Virtual Machine (VM)을 μ΄μš©ν•˜λŠ”, Host OSμœ„μ— Hypervisorκ°€ μ‘΄μž¬ν•˜κ³  κ·Έ μœ„μ— Guest OS듀이 μ‘΄μž¬ν•˜λŠ” κ°œλ…μ΄μ—ˆλ‹€. μ—¬κΈ°μ„œ λ§ν•˜λŠ” 가상화 λΌλŠ” 것은 ν˜„μž¬ μ‚¬μš©ν•˜κ³  μžˆλŠ” λ¨Έμ‹ μ˜ κ³΅κ°„κ³ΌλŠ” 독립적인 곡간을 λ§Œλ“œλŠ” 것을 μ˜λ―Έν•œλ‹€.
Docker도 가상화 κΈ°μˆ μ„ μ΄μš©ν•˜κΈ΄ ν•˜μ§€λ§Œ μ΄μ „μ²˜λŸΌ Hypervisor와 Guest OSλ₯Ό μ΄μš©ν•˜λŠ” κ΅¬μ‘°λŠ” μ•„λ‹ˆλ‹€.
HypervisorλŠ” Guest OS듀을 κ΄€λ¦¬ν•˜κ³ , μ‹œμŠ€ν…œμ˜ μžμ›μ„ Guest OSμ—κ²Œ λΆ„λ°°ν•  수 μžˆλ„λ‘ μžμ›μ„ κ°€μƒν™”ν•˜λŠ” 역할을 ν•œλ‹€. κ·Έ κ³Όμ •λ“€ μ€‘μ—μ„œ Host OSμ—μ„œ μ‚¬μš©λ˜λŠ” I/O와 같은 Device듀에 λŒ€ν•œ 가상화λ₯Ό μˆ˜ν–‰ν•  λ•Œ λ§Žμ€ μ„±λŠ₯ μ €ν•˜κ°€ μΌμ–΄λ‚œλ‹€. 그리고 이처럼 VM을 μ΄μš©ν•˜λŠ” κ²½μš°μ—λ„ Dockerλ₯Ό μ΄μš©ν•  λ•Œμ²˜λŸΌ Imageλ₯Ό λ§Œλ“€μ–΄ λ‚Ό 수 μžˆλŠ”λ°, Guest OS의 Kernel을 ν¬ν•¨ν•œ μ±„λ‘œ Imageλ₯Ό λ§Œλ“€μ–΄λ‚΄λ‹€λ³΄λ‹ˆ Image의 크기가 μƒλ‹Ήνžˆ λ°©λŒ€ν•  뿐 μ•„λ‹ˆλΌ Image 생성 μ‹œκ°„μ΄ Kernel을 ν¬ν•¨λœ 만큼 더 κΈΈλ‹€.
μ΄λŸ¬ν•œ μ΄μœ λ“€ λ•Œλ¬Έμ— Intel의 Xen, Linux의 KVMκ³Ό 같은 λ°˜κ°€μƒν™” κΈ°μˆ μ— λŒ€ν•œ λ‹€μ–‘ν•œ μ‹œλ„λ₯Ό ν•˜κ²Œ λ˜μ—ˆκ³ , κ·Έ μ΄ν›„μ—λŠ” ContainerλΌλŠ” 기술이 가상화 기술의 ν‘œμ€€μœΌλ‘œ 자리 λ§€κΉ€ν•˜κ²Œ λ˜μ—ˆλ‹€.
ContainerλŠ” Linuxμƒμ—μ„œ 이용되고, chroot, namespace, cgroup λ“±μ˜ Linux 자체 κΈ°λŠ₯만으둜 κ΅¬ν˜„λ˜μ–΄ ν”„λ‘œμ„ΈμŠ€ λ‹¨μœ„λ‘œ 독립적인 곡간을 λ§Œλ“œλŠ” κΈ°μˆ μ΄λ‹€. Docker의 ContainerλŠ” Linux의 Containerλ₯Ό μ΄μš©ν•œ 것이고, Linux의 Container에 μ—¬λŸ¬ κΈ°λŠ₯을 μΆ”κ°€ν•˜μ—¬ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ Container둜 쑰금 더 μ΄μš©ν•˜κΈ° μ‰½κ²Œ λ§Œλ“€μ–΄ λ‘” 것이닀.

2) Docker의 μž₯점

Containerλ₯Ό μ΄μš©ν•˜κΈ° μœ„ν•œ κΈ°μˆ λ“€μ€ OpenVZ, LXC, cri-o 등이 μ‘΄μž¬ν•˜μ§€λ§Œ κ·Έ μ€‘μ—μ„œλ„ Dockerκ°€ Container의 ν‘œμ€€μœΌλ‘œ 자리 μž‘μ•˜λ‹€. Dockerλ₯Ό μ΄μš©ν•˜λ©΄ μ–΄λ–€ 점이 μ’‹κΈΈλž˜ λ§Žμ€ νšŒμ‚¬μ—μ„œ Dockerλ₯Ό μ΄μš©ν•˜κ³  μžˆμ„κΉŒ?

개발 및 운영 ν™˜κ²½μ˜ 톡합

Dockerλ₯Ό μ΄μš©ν•˜μ—¬ ν™˜κ²½μ„ κ΅¬μΆ•ν•˜κ³  μ‹Άλ‹€λ©΄, ν™˜κ²½μ„ κ΅¬μ„±ν•œ Containerλ₯Ό Image둜 λ§Œλ“  λ’€ ν•΄λ‹Ή Imageλ₯Ό κ΅¬μΆ•ν•˜λ €λŠ” ν™˜κ²½μ— μ „λ‹¬λ§Œ ν•΄μ£Όλ©΄ λœλ‹€. μ΄λ ‡κ²Œ κ΅¬μΆ•λœ ν™˜κ²½μ€ λ‹€λ₯Έ κ³΅κ°„μ—μ„œ μ΄μš©λ˜λŠ” ν™˜κ²½κ³Ό λ³„κ°œλ‘œ λ…λ¦½μ μž„κ³Ό λ™μ‹œμ—, λ™μΌν•œ Imageλ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ λ™μΌν•œ ν™˜κ²½μ„ λ§Œλ“€ 수 μžˆμœΌλ―€λ‘œ 개발 및 운영 ν™˜κ²½μ— λŒ€ν•œ 톡합이 κ°€λŠ₯ν•΄μ§„λ‹€λŠ” μž₯점이 μžˆλ‹€.

λΉ λ₯Έ 배포 속도

차후에 Container와 Imageλ₯Ό 더 μžμ„Ένžˆ λ‹€λ£¨κ² μ§€λ§Œ, Docker의 ImageλŠ” μ—¬λŸ¬ Layer둜 κ΅¬μ„±λ˜μ–΄ μ€‘λ³΅λ˜λŠ” Layer에 λŒ€ν•΄μ„  μž¬μ‚¬μš©ν•  수 μžˆλ„λ‘ λ§Œλ“€μ–΄μ‘Œλ‹€. 예λ₯Ό λ“€μ–΄μ„œ 1번 Imageκ°€ [A, B, C]λΌλŠ” Layer둜 κ΅¬μ„±λ˜μ–΄ 있고, 2번 Imageκ°€ [A, B, D]λΌλŠ” Layer둜 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€κ³  ν•΄λ³΄μž. 이 λ•Œμ˜ ImageλŠ” [A, B, C]와 [A, B, D]처럼 μ€‘λ³΅λœ Layer의 ν˜•νƒœλ‘œ μ‘΄μž¬ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, [A, B, C, D]의 ν˜•νƒœλ‘œ Layerλ₯Ό μœ μ§€ν•˜μ—¬ 각 Layerλ₯Ό μ‚¬μš©ν•˜λŠ” Image의 이름을 Layer에 Tag둜 λ‚¨κΈ°λŠ” μ‹μœΌλ‘œ μ΄μš©λœλ‹€. λ”°λΌμ„œ μ€‘λ³΅λœ Layerλ₯Ό μƒˆλ‘­κ²Œ λ§Œλ“€ ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ— 배포 μ‹œμ— λ§Žμ€ 이점을 κ°–λŠ”λ‹€.

μž‘μ€ Image μš©λŸ‰

μœ„μ˜ VM을 μ΄μš©ν•œ λΆ€λΆ„μ—μ„œλ„ λ°ν˜”λ“―μ΄, Containerλ₯Ό Image둜 λ§Œλ“€ λ•ŒλŠ” Kernel에 λŒ€ν•œ λ‚΄μš©λ“€μ„ 포함할 ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ— VM에 λΉ„ν•΄μ„œ Image의 크기가 μž‘λ‹€.

μ„œλΉ„μŠ€μ˜ 독립성, ν™•μž₯μ„±, νŽΈμ˜μ„±

μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„œλΉ„μŠ€λ₯Ό μœ μ§€ν•˜λŠ” κ΅¬μ‘°λŠ” Monolithicκ³Ό Micro Service둜 λ‚˜λ‰œλ‹€. μœ„ 그림처럼 μ„œλΉ„μŠ€μ— μš”κ΅¬λ˜λŠ” λͺ¨λ“ˆμ΄ A, B, C일 λ•Œ 이λ₯Ό ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μœΌλ‘œ κ΅¬λ™μ‹œν‚€λŠ” 것이 Monolithic ꡬ쑰이고, 각 λͺ¨λ“ˆλ“€μ΄ μ—¬λŸ¬ ν”„λ‘œκ·Έλž¨μœΌλ‘œ λ‚˜λ‰˜μ–΄ κ΅¬λ™λ˜λŠ” 방식이 Micro Service ꡬ쑰이닀. μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•  λ•Œ Monolithic ꡬ쑰λ₯Ό κ°–κ³  μžˆλ‹€λ©΄ ν•˜λ‚˜μ˜ Containerλ₯Ό μ΄μš©ν•  것이고, Micro Service ꡬ쑰라면 μ—¬λŸ¬ Containerλ₯Ό μ΄μš©ν•˜κ²Œ 될 것이닀.
Docker의 ContainerλŠ” 짧은 μ‹œκ°„ 내에 μƒμ„±ν•˜κ³  μ‹œμž‘μ‹œν‚¬ 수 μžˆλŠ”λ°λ‹€κ°€ 독립적인 ν™˜κ²½ ꡬ좕이 κ°€λŠ₯ν•˜λ―€λ‘œ μ—¬λŸ¬ Containerλ₯Ό λ‘λŠ” μ‹μ˜ Micro Service ꡬ쑰λ₯Ό μ΄μš©ν•  λ•Œ 많이 μ‚¬μš©λœλ‹€. λ”°λΌμ„œ Micro Service κ΅¬μ‘°μ—μ„œ 얻을 수 μžˆλŠ” 독립성, ν™•μž₯μ„±, νŽΈμ˜μ„±μ΄λΌλŠ” 이점을 κ°€μ§ˆ 수 μžˆλ‹€.
μ„œλΉ„μŠ€κ°€ μ†Œκ·œλͺ¨ λ‹¨μœ„λΌλ©΄ Monolithic ꡬ쑰가 쑰금 더 득을 λ³Ό 수 μžˆκ² μ§€λ§Œ, μ„œλΉ„μŠ€κ°€ κ±°λŒ€ν•΄μ§ˆ 수둝 μ†Œν”„νŠΈμ›¨μ–΄μ˜ ν™•μž₯μ„±κ³Ό μœ μ—°μ„±μ΄ μ€„μ–΄λ“€κ²Œ λ˜λ―€λ‘œ 이 λ•ŒλŠ” Monolithic κ΅¬μ‘°λ³΄λ‹€λŠ” Micro Service ꡬ쑰λ₯Ό 더 많이 μ΄μš©ν•œλ‹€.
독립성, ν™•μž₯μ„±, νŽΈμ˜μ„±μ€ μ„œλΉ„μŠ€ 관리 λ‹¨μœ„μ—μ„œ 확인할 수 μžˆλ‹€. 각 μ„œλΉ„μŠ€λ₯Ό μœ μ§€ν•˜κ³  μžˆλŠ” Containerλ₯Ό ꡬ성할 λ•Œ, μ„œλΉ„μŠ€ λ‹¨μœ„μ˜ 독립적인 곡간을 두고 각자의 ν™˜κ²½μ„ λ§Œλ“€κΈ° λ•Œλ¬Έμ— Container λ‚΄λΆ€ μ½”λ“œμ— λŒ€ν•΄μ„  각 μ–Έμ–΄κ°€ 달라도 λ¬΄λ°©ν•˜κ²Œ λœλ‹€. λ”°λΌμ„œ νŠΉμ • 언어에 μ’…μ†λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” μž₯점이 μžˆλ‹€. λ˜ν•œ μ„œλΉ„μŠ€ λ‹¨μœ„λ‘œ Container듀을 κ΅¬μ„±ν–ˆλ‹€λŠ” 것은 μ„œλΉ„μŠ€μ˜ λ³€ν™”κ°€ 생길 λ•Œ 이λ₯Ό ν™•μž₯ν•˜κΈ° μ‰¬μ›Œμ§€λ―€λ‘œ 변화에 λ―Όκ°ν•˜κ²Œ λŒ€μ²˜ν•  수 있게 λœλ‹€. 즉, μ„œλΉ„μŠ€λ₯Ό νŽΈλ¦¬ν•˜κ²Œ 관리할 수 있게 λœλ‹€.

3) Docker Toolbox, Docker for Windows / Mac

Dockerλ₯Ό μ‹œμŠ€ν…œμ—μ„œ μ΄μš©ν•˜λŠ” 방법은 κ°„λ‹¨ν•˜λ‹€. DockerλŠ” Linux μƒμ˜ Containerλ₯Ό μ΄μš©ν•˜κΈ° λ•Œλ¬Έμ— Linux ν™˜κ²½μ„ μž‘μ•„μ£Όλ©΄ λœλ‹€. 즉, Window ν˜Ήμ€ Mac OS Xλ₯Ό μ‚¬μš©ν•˜λ”λΌλ„ λ³„λ„μ˜ Linux ν™˜κ²½μ΄ ν•„μš”ν•˜λ‹€λŠ” 것이닀. 단, μ˜›λ‚  버전과 ν˜„μž¬ 버전에 따라 Docker의 Linux ν™˜κ²½ ꡬ좕 방법이 λ³„λ„λ‘œ μ‘΄μž¬ν•œλ‹€.
κ½€ μ˜›λ‚  λ²„μ „μ˜ Dockerλ₯Ό μ„€μΉ˜ν•  λ•Œ, Linux ν™˜κ²½ ꡬ좕을 μœ„ν•΄ VirtualBoxλ₯Ό μ΄μš©ν–ˆκ³ , 이λ₯Ό Docker Toolbox라고 ν•œλ‹€. μ΅œμ‹  λ²„μ „μ˜ Dockerλ₯Ό μ„€μΉ˜ν•  λ•ŒλŠ” Docker for Windows ν˜Ήμ€ Docker for Mac을 μ΄μš©ν•˜λŠ”λ°, μ΄λŠ” Docker Toolboxμ™€λŠ” 달리 λ³„λ„μ˜ VM을 μ‚¬μš©ν•˜μ§€ μ•Šκ³  각 μš΄μ˜μ²΄μ œμ—μ„œ μ§€μ›ν•˜λŠ” 가상화 κΈ°μˆ μ„ μ‚¬μš©ν•˜μ—¬ Linux ν™˜κ²½μ„ κ΅¬μΆ•ν•œλ‹€. Windows의 κ²½μš°μ—λŠ” Hyper-VλΌλŠ” 가상화 κΈ°μˆ μ„ μ΄μš©ν•˜μ—¬ λ³„λ„μ˜ Linux ν™˜κ²½μ„ λ§Œλ“€μ–΄λ‘κ³ , Mac OS X의 κ²½μš°μ—λŠ” XhyveλΌλŠ” 가상화 κΈ°μˆ μ„ μ΄μš©ν•˜μ—¬ λ³„λ„μ˜ Linux ν™˜κ²½μ„ λ§Œλ“¦μœΌλ‘œμ¨ Docker μ„€μΉ˜ μ‹œ Docker Engine을 λ‘˜ 수 있게 λœλ‹€.
Docker Toolboxλ₯Ό μ΄μš©ν•˜μ—¬ Linux ν™˜κ²½μ„ λ§Œλ“œλŠ” 것과 운영체제 μžμ²΄μ—μ„œ μ§€μ›ν•˜λŠ” 가상화 기술둜 Linux ν™˜κ²½μ„ λ§Œλ“œλŠ”λ°λŠ” μ–΄λ–€ 차이가 μžˆμ„κΉŒ? Docker Engine이 λ°˜λ“œμ‹œ Linux μƒμ—μ„œ λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— Linux ν™˜κ²½μ„ μ΄μš©ν•œλ‹€λŠ” 곡톡점이 μžˆμ§€λ§Œ, λŒ€ν‘œμ μΈ μ°¨μ΄μ μœΌλ‘œλŠ” Imageλ₯Ό μ΄μš©ν•˜μ—¬ Containerλ₯Ό λ§Œλ“€μ–΄ λ™μž‘μ‹œν‚¬ λ•Œ λ„€νŠΈμ›Œν¬ 섀정에 μžˆλ‹€.
μœ„ κ·Έλ¦Όκ³Ό 같이 Docker Toolboxλ₯Ό μ΄μš©ν•˜λŠ” κ²½μš°μ—λŠ” VirtualBoxλ₯Ό μ΄μš©ν•˜μ—¬ Docker Engine을 λ‘κ²Œ λ˜λ―€λ‘œ VM에 ν•΄λ‹Ήν•˜λŠ” 가상 λ„€νŠΈμ›Œν¬ 1κ°œμ™€ VMμ—μ„œ λ™μž‘ν•˜λŠ” Container의 가상 λ„€νŠΈμ›Œν¬ 1κ°œκ°€ μƒμ„±λœλ‹€. λ”°λΌμ„œ Container에 μ„œλΉ„μŠ€λ₯Ό κ΅¬μΆ•ν•˜μ—¬ μ™ΈλΆ€μ—μ„œλ„ μ ‘κ·Όν•  수 있게 ν•˜λ €λ©΄ 2쀑 포트 ν¬μ›Œλ”©μ΄ μš”κ΅¬λœλ‹€. (λ¨Έμ‹ κ³Ό VM μ‚¬μ΄μ˜ 포트 ν¬μ›Œλ”©, VMκ³Ό Container μ‚¬μ΄μ˜ 포트 ν¬μ›Œλ”©) 이 λ•Œ, VMκ³Ό Container μ‚¬μ΄μ˜ 포트 ν¬μ›Œλ”©μ€ Container 생성 μ‹œ μ‰½κ²Œ μ„€μ •ν•  수 있기 λ•Œλ¬Έμ— Docker Toolboxλ₯Ό μ΄μš©ν•˜λŠ” κ²½μš°μ—λŠ” λ¨Έμ‹ κ³Ό VM μ‚¬μ΄μ˜ 포트 ν¬μ›Œλ”© μ„€μ •μ—λ§Œ μœ μ˜ν•΄μ£Όλ©΄ λœλ‹€.
λ°˜λŒ€λ‘œ 운영체제 μžμ²΄μ—μ„œ μ§€μ›ν•˜λŠ” 가상화 기술의 κ²½μš°μ—λŠ” VM을 μ΄μš©ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— Container에 ν•΄λ‹Ήν•˜λŠ” 가상 λ„€νŠΈμ›Œν¬ 1개만 μƒμ„±λœλ‹€. μ΄λŠ” Container 생성 μ‹œ μ‰½κ²Œ 포트 ν¬μ›Œλ”©μ— λŒ€ν•œ 섀정이 κ°€λŠ₯ν•˜λ‹€.
운영체제 μžμ²΄μ—μ„œ μ§€μ›ν•˜λŠ” 가상화 κΈ°μˆ μ„ μ΄μš©ν•˜λŠ” κ²½μš°μ—λŠ” VM을 μ΄μš©ν•  λ•Œμ²˜λŸΌ Ubuntu, CentOS와 같은 Kernel이 ν†΅μ§Έλ‘œ μ΄μš©λ˜μ§€ μ•ŠλŠ”λ‹€. Docker Engine을 κ΅¬λ™ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯만 μ‘΄μž¬ν•˜λ©΄ 되기 λ•Œλ¬Έμ—, Linuxkit이라고 λΆˆλ¦¬λŠ” μ΅œμ†Œν•œμ˜ κΈ°λŠ₯을 μœ μ§€ν•˜κ³  μžˆλŠ” Kernel을 μ΄μš©ν•˜μ—¬ Linux ν™˜κ²½μ„ κ΅¬μΆ•ν•œλ‹€.
λ”°λΌμ„œ Docker Toolbox λ³΄λ‹€λŠ” 이용 쀑인 μš΄μ˜μ²΄μ œμ— ν•΄λ‹Ήν•˜λŠ” Docker for Win ν˜Ήμ€ Docker for Mac으둜 Dockerλ₯Ό μ„€μΉ˜ν•˜λŠ” 것이 더 λ‚«λ‹€.

Windows

Mac OS X

4) Docker ν΄λΌμ΄μ–ΈνŠΈ & 데λͺ¬

Dockerλ₯Ό μ΄μš©ν•˜κΈ° μœ„ν•΄ 일반적으둜 dockerλΌλŠ” λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•˜λŠ”λ°, μœ„ κ·Έλ¦Όκ³Ό 같이 확인해보면 docker λͺ…λ Ήμ–΄μ˜ μœ„μΉ˜λ₯Ό 확인할 수 μžˆλ‹€. dockerλΌλŠ” λͺ…λ Ήμ–΄λŠ” 일반 파일둜써 μœ μ§€λ˜κ³  μžˆλŠ” 것을 확인할 수 μžˆλ‹€.
λ°˜λ©΄μ— ν”„λ‘œμ„ΈμŠ€λ‘œ λ™μž‘ν•˜λŠ” Dockerλ₯Ό 확인해보면, μ΄λŠ” dockerd둜 λ™μž‘ν•˜λŠ” 것을 확인할 수 μžˆλ‹€. dockerdλŠ” Docker 데λͺ¬μ΄λ©°, μˆ˜ν–‰ν•΄μ•Όν•  μš”μ²­μ„ λ°›μŒκ³Ό λ™μ‹œμ— Docker Engine의 κΈ°λŠ₯을 μˆ˜ν–‰ ν›„ μ‘λ‹΅ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μ΄λ‹€.
Daemon Process? 데λͺ¬ ν”„λ‘œμ„ΈμŠ€μ˜ 사전적 μ •μ˜λŠ” μ§€μ†μ μœΌλ‘œ μ‹€ν–‰λ˜μ–΄ μ„œλΉ„μŠ€ μš”μ²­μ— μ‘λ‹΅ν•˜λŠ” λ°±κ·ΈλΌμš΄λ“œ ν”„λ‘œμ„ΈμŠ€μ΄λ‹€. 데λͺ¬ ν”„λ‘œμ„ΈμŠ€λŠ” λ°±κ·ΈλΌμš΄λ“œ ν”„λ‘œμ„ΈμŠ€λ“€ μ€‘μ—μ„œλ„, λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€λ₯Ό 갖지 μ•Šμ•„ PPID (Parent Process ID)κ°€ 1μ΄κ±°λ‚˜ λ‹€λ₯Έ 데λͺ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό λΆ€λͺ¨λ‘œ κ°–λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό μ§€μΉ­ν•œλ‹€. μ΄λŠ” μ‰˜μ΄ μ’…λ£Œλ˜μ—ˆμ„ λ•Œ μ‰˜μ—μ„œ μ‹€ν–‰λœ μžμ‹ ν”„λ‘œμ„ΈμŠ€λ“€μ΄ λͺ¨λ‘ μ’…λ£Œλ˜λŠ” ν˜„μƒμœΌλ‘œ 데λͺ¬ ν”„λ‘œμ„ΈμŠ€λ„ μ’…λ£Œλ˜λŠ” ν˜„μƒμ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€. 데λͺ¬ ν”„λ‘œμ„ΈμŠ€λŠ” 일반적으둜 μ΄λ¦„μ˜ 끝에 dλ₯Ό 달고 있으며, μ‹œμŠ€ν…œμ΄ μ‹œμž‘λ  λ•Œ μžλ™μœΌλ‘œ μ‹œμž‘ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.
docker λΌλŠ” λͺ…령어와 dockerdλΌλŠ” 데λͺ¬ ν”„λ‘œμ„ΈμŠ€λŠ” μ–΄λ–€ 관계가 μžˆμ„κΉŒ? DockerλŠ” μ‹€μ œλ‘œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ λ™μž‘ν•˜λŠ” Docker와 μ„œλ²„λ‘œ λ™μž‘ν•˜λŠ” Docker둜 κ΅¬λΆ„λœλ‹€. μ‚¬μš©μžκ°€ λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜λŠ” CLI ν”„λ‘œκ·Έλž¨μ΄ Docker ν΄λΌμ΄μ–ΈνŠΈμ΄λ©° 되고, APIλ₯Ό μ™ΈλΆ€λ‘œλΆ€ν„° λ°›μ•„ Containerλ₯Ό μƒμ„±ν•˜κ³  μ‹€ν–‰ν•˜λŠ” λ“± μ „λ°˜μ μΈ Docker Engine의 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” 데λͺ¬ ν”„λ‘œμ„ΈμŠ€κ°€ Docker 데λͺ¬μ΄ λœλ‹€.
Docker 데λͺ¬μ€ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ κ΄€κ³„μ—μ„œ μΌμ’…μ˜ μ„œλ²„λΌκ³  보면 λœλ‹€.
Docker 데λͺ¬μ€ APIλ₯Ό μž…λ ₯을 λ°›μ•„ Docker Engine의 κΈ°λŠ₯을 μˆ˜ν–‰ν•œλ‹€κ³  ν–ˆλŠ”λ°, μ—¬κΈ°μ„œμ˜ APIκ°€ 곧 Docker ν΄λΌμ΄μ–ΈνŠΈμ— μ‚¬μš©μžκ°€ λͺ…λ Ήμ–΄λ‘œ μž…λ ₯ν•œ 것듀이 λœλ‹€. Docker ν΄λΌμ΄μ–ΈνŠΈλŠ” μ‚¬μš©μžκ°€ μž…λ ₯ν•œ λͺ…λ Ήμ–΄λ₯Ό 읽어듀인 λ’€, κ·ΈλŒ€λ‘œ Docker 데λͺ¬μ—κ²Œ λ³΄λ‚΄κ²Œ 되고, Docker 데λͺ¬μ€ 이λ₯Ό νŒŒμ‹±ν•˜μ—¬ λͺ…령어에 ν•΄λ‹Ήν•˜λŠ” Docker Engine의 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κ²Œ λœλ‹€. 이 λ•Œ Docker ν΄λΌμ΄μ–ΈνŠΈμ™€ Docker 데λͺ¬μ΄ 같은 Host에 μœ„μΉ˜ν•΄ μžˆλ‹€λ©΄ Docker ν΄λΌμ΄μ–ΈνŠΈμ™€ Docker 데λͺ¬μ€ Unix Socket을 μ΄μš©ν•˜μ—¬ μ†Œν†΅ν•˜κ²Œ λœλ‹€.
λ™μΌν•œ Host에 μœ„μΉ˜ν•œ ν΄λΌμ΄μ–ΈνŠΈμ™€ 데λͺ¬μ€ Unix Socket을 μ΄μš©ν•œλ‹€κ³  ν–ˆλŠ”λ°, μœ„ 그림을 보면 μ•Œ 수 μžˆλ“―μ΄ ν•΄λ‹Ή Socket은 μ‹œμŠ€ν…œ 상에 파일둜써 μœ μ§€λ˜κ³  μžˆλ‹€.
κ·Έλ ‡λ‹€λ©΄ λ™μΌν•˜μ§€ μ•Šμ€ Host에 각각 Docker ν΄λΌμ΄μ–ΈνŠΈμ™€ Docker 데λͺ¬μ΄ μœ„μΉ˜ν•˜κ³  μžˆλ‹€λ©΄, 이 λ•Œλ„ Unix Socket을 μ΄μš©ν•˜μ—¬ μ†Œν†΅ν•˜κ²Œ λ˜λŠ” κ²ƒμΌκΉŒ? 그렇지 μ•Šλ‹€. μ„œλ‘œ λ‹€λ₯Έ Host에 각각 ν΄λΌμ΄μ–ΈνŠΈμ™€ 데λͺ¬μ΄ μžˆλ‹€λŠ” 말은 곧 μ„œλ‘œ λ‹€λ₯Έ 머신에 ν΄λΌμ΄μ–ΈνŠΈμ™€ 데λͺ¬μ΄ μ‘΄μž¬ν•œλ‹€λŠ” 말과 λ™μΌν•˜λ―€λ‘œ Unix Socket으둜 μƒν˜Έ 톡신이 λΆˆκ°€λŠ₯ν•˜λ‹€. λ”°λΌμ„œ 이 λ•ŒλŠ” TCPλΌλŠ” λ„€νŠΈμ›Œν¬ 톡신을 μ΄μš©ν•˜μ—¬ λͺ…λ Ήμ–΄λ₯Ό μ „λ‹¬ν•˜κ²Œ λœλ‹€.
λ™μΌν•œ Host에 Docker ν΄λΌμ΄μ–ΈνŠΈμ™€ Docker 데λͺ¬μ΄ μœ„μΉ˜ν•œ κ²½μš°μ— λŒ€ν•œ κ΅¬μ‘°λŠ” Local Host의 λΆ€λΆ„μ²˜λŸΌ λ‚˜νƒ€λ‚˜κ³ , λͺ…령어에 λŒ€ν•œ 처리 흐름은 μ•„λž˜μ™€ κ°™λ‹€.
1.
μ‚¬μš©μžκ°€ docker κ΄€λ ¨ λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•œλ‹€.
2.
Docker ν΄λΌμ΄μ–ΈνŠΈλŠ” /var/run/docker.sockμ΄λΌλŠ” Unix Socket을 μ΄μš©ν•˜μ—¬ Docker 데λͺ¬μ—κ²Œ λͺ…λ Ήμ–΄λ₯Ό μ „λ‹¬ν•œλ‹€.
3.
Docker 데λͺ¬μ€ 전달 받은 λͺ…λ Ήμ–΄λ₯Ό νŒŒμ‹±ν•˜κ³  λͺ…령어에 ν•΄λ‹Ήν•˜λŠ” κΈ°λŠ₯을 Docker Engine을 톡해 μˆ˜ν–‰ν•œλ‹€.
4.
κΈ°λŠ₯ μˆ˜ν–‰μ˜ κ²°κ³Όλ₯Ό Docker ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „λ‹¬ν•œλ‹€.
5.
Docker ν΄λΌμ΄μ–ΈνŠΈλŠ” 전달 받은 κ²°κ³Όλ₯Ό 좜λ ₯ν•˜μ—¬ μ‚¬μš©μžκ°€ λ³Ό 수 μžˆλ„λ‘ ν•΄μ€€λ‹€.
λ™μΌν•˜μ§€ μ•Šμ€ Host에 각각 Docker ν΄λΌμ΄μ–ΈνŠΈμ™€ Docker 데λͺ¬μ΄ μœ„μΉ˜ν•œ κ²½μš°μ— λŒ€ν•œ κ΅¬μ‘°λŠ” 주어진 그림의 Remote Host의 λΆ€λΆ„κ³Ό κ°™μœΌλ©°, Unix Socket을 μ΄μš©ν•˜μ§€ μ•ŠλŠ” 점만 λΉΌλ©΄ λͺ…령어에 λŒ€ν•œ 처리 흐름은 λ™μΌν•œ Hostμ—μ„œ λ™μž‘ν•˜λŠ” κ²½μš°μ™€ κ°™λ‹€.

5) Docker 데λͺ¬ μ‹€ν–‰ 및 μ„€μ •

Docker 데λͺ¬ μ‹€ν–‰

Linux ν™˜κ²½μ—μ„œ Docker 데λͺ¬μ„ μ‹€ν–‰ν•  수 μžˆλŠ” λ°©λ²•μ—λŠ” 일반적으둜 Docker 데λͺ¬μ„ μ§μ ‘μ μœΌλ‘œ μ‹€ν–‰μ‹œν‚€λŠ” 방법과 그렇지 μ•Šμ€ λ°©λ²•μœΌλ‘œ λ‚˜λ‰œλ‹€. μ§μ ‘μ μœΌλ‘œ μ‹€ν–‰μ‹œν‚¨ 것은dockerdλΌλŠ” λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•œ 것이고, 그렇지 μ•Šμ€ κ²½μš°λŠ” service, systemctlκ³Ό 같은 λͺ…λ Ήμ–΄λ₯Ό 톡해 μ‹€ν–‰μ‹œν‚€λŠ” 것이닀. service, systemctlκ³Ό 같은 λͺ…λ Ήμ–΄λ‘œ Docker 데λͺ¬μ„ μ‹€ν–‰ν•˜λ©΄ μ΄λŠ” Linux μ„œλΉ„μŠ€λ‘œμ¨ κ΄€λ¦¬ν•˜κ²Œ λœλ‹€. dockerdλΌλŠ” λͺ…λ Ήμ–΄λ‘œ 직접 Docker 데λͺ¬μ„ μ‹€ν–‰ν•˜κ²Œ 되면 데λͺ¬ ν”„λ‘œμ„ΈμŠ€κ°€ ν¬κ·ΈλΌμš΄λ“œλ‘œ λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— Docker의 디버깅 및 νŠΈλŸ¬λΈ” μŠˆνŒ…μ—λŠ” 도움이 될 수 μžˆμ§€λ§Œ 운영 및 관리에 μ ν•©ν•œ 방법은 μ•„λ‹ˆλ―€λ‘œ 운영 ν™˜κ²½μ—μ„œλŠ” dockerdλΌλŠ” λͺ…λ Ήμ–΄λ‘œ 직접 μ‹€ν–‰ν•˜λŠ” κ²ƒλ³΄λ‹€λŠ” Linux μ„œλΉ„μŠ€λ‘œ κ΄€λ¦¬ν•˜λŠ” 것이 더 μ’‹λ‹€.
Docker 데λͺ¬μ΄ μ‹€ν–‰ 쀑에 μ–΄λ–€ λ¬Έμ œκ°€ μƒκΈ°λŠ”μ§€ 디버깅 및 νŠΈλŸ¬λΈ” μŠˆνŒ…μ„ ν•˜λŠ” 것이 μ‹€μ œ μ„œλΉ„μŠ€ μš΄μ˜μ—μ„œλŠ” μ€‘μš”ν•˜κΈ° λ•Œλ¬Έμ— 데λͺ¬ ν”„λ‘œμ„ΈμŠ€λ‘œ κ΅¬λ™ν•˜λ©΄μ„œλ„ docker events와 같이 Docker Engine μžμ²΄μ—μ„œ μ œκ³΅ν•˜λŠ” Docker 데λͺ¬μ˜ Logging 툴 ν˜Ήμ€ μ™ΈλΆ€ μ†”λ£¨μ…˜μœΌλ‘œ μ œκ³΅λ˜λŠ” Docker 데λͺ¬μ„ μœ„ν•œ Logging νˆ΄μ„ μ΄μš©ν•˜λŠ” 것도 μ€‘μš”ν•˜λ‹€.
ν˜„μž¬ κΈ€μ—μ„œλŠ” Docker for Mac을 μ΄μš©ν•˜κ³  있기 λ•Œλ¬Έμ— μœ„μ²˜λŸΌ Linux의 λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•œ 것이 μ•„λ‹Œ, Docker Desktop을 μ΄μš©ν•˜μ—¬ Docker 데λͺ¬μ„ λ‹€λ£¨λŠ” 방법을 λ‹€λ€„λ³΄κ³ μž ν•œλ‹€.
Docker for Mac을 μ„€μΉ˜ν•˜λ©΄ μœ„ κ·Έλ¦Όμ—μ„œ λ³΄μ΄λŠ” κ²ƒμ²˜λŸΌ Docker Desktop이 ν•¨κ»˜ μ„€μΉ˜λ˜λŠ”λ°, 이λ₯Ό μ‹€ν–‰ν•˜κ²Œ 되면 Docker 데λͺ¬λ„ ν•¨κ»˜ μ‹€ν–‰λœλ‹€. Docker Desktop이 μ‹€ν–‰λ˜μ§€ μ•Šμ€μ±„λ‘œ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜κ²Œ 되면 μ•„λž˜ 그림처럼 unix:///var/run/docker.sock에 μ—°κ²°ν•  수 μ—†μ–΄ μš”μ²­μ΄ λΆˆκ°€λŠ₯ν•œ 것을 확인할 수 μžˆλ‹€.
Docker Desktop을 μ‹€ν–‰ν•˜λ©΄ κ·Έ κ³Όμ •μ—μ„œ Docker Engine도 ν•¨κ»˜ μ‹€ν–‰λœλ‹€. λ”°λΌμ„œ μ•„λž˜ 그림처럼 λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ©΄ κ·Έμ œμ„œμ•Ό μš”μ²­μ΄ 잘 μ „λ‹¬λ˜μ–΄ κ·Έ κ²°κ³Όλ₯Ό 확인할 수 있게 λœλ‹€.

Docker 데λͺ¬ μ„€μ •

dockerd λͺ…λ Ήμ–΄μ—λŠ” 정말 λ‹€μ–‘ν•œ μ˜΅μ…˜μ΄ 있고, 이λ₯Ό 톡해 Docker 데λͺ¬μ˜ κΈ°λ³Έ μ„€μ • 값을 λ°”κΏ€ 수 μžˆλ‹€. ν•˜μ§€λ§Œ μ΄λŠ” Linux μƒμ—μ„œμ˜ μ„€μ •μ΄λ―€λ‘œ Docker for Mac을 μ΄μš©ν•  λ•ŒλŠ” Docker Desktop을 톡해 Docker 데λͺ¬μ˜ μ„€μ • 값을 μ‘°μž‘ν•  수 μžˆλ‹€.
Preferences 탭을 μ—΄κ²Œ 되면 λ‹€μ–‘ν•œ 섀정이 κ°€λŠ₯ν•œλ°, 주둜 Dockerμ—μ„œ μ΄μš©ν•  μžμ› μ œν•œ 및 Docker Engine에 λŒ€ν•œ 섀정을 ν•  수 μžˆλ‹€. κ·Έ μ€‘μ—μ„œλ„ Docker Engine에 λŒ€ν•œ 섀정이 곧 Docker 데λͺ¬μ— λŒ€ν•œ 섀정이 되며, json ν˜•νƒœλ‘œ μ„€μ • ν•­λͺ© 및 값을 μž…λ ₯ ν›„ Apply & Restartλ₯Ό λˆ„λ₯΄λ©΄ Docker 데λͺ¬μ΄ μž¬μ‹œμž‘λ˜λ©΄μ„œ 섀정이 λ°˜μ˜λœλ‹€.
μ„€μ • ν•­λͺ© 및 값은 μœ„ λ§ν¬μ—μ„œ μƒμ„Έν•˜κ²Œ 확인할 수 있으며, Docker Desktopμ—μ„œ μ΄μš©ν•˜λŠ” daemon.json νŒŒμΌμ€ ~/.docker/daemon.json으둜 μœ μ§€λ˜κ³  μžˆλ‹€. Mac OS의 κ²½μš°μ— Linuxμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” ν•­λͺ© 쀑 일뢀 μ œν•œλœλ‹€.

3. Commands

Docker의 λͺ…λ Ήμ–΄λŠ” κ·Έ λŒ€μƒμ— λ”°λΌμ„œ λͺ…λ Ήμ–΄ ꡬ성이 바뀐닀. 예λ₯Ό λ“€λ©΄, Containerλ₯Ό λŒ€μƒμœΌλ‘œ ν•˜λŠ” λͺ…λ Ήμ–΄λŠ” docker container ... κ³Ό 같은 ν˜•νƒœκ°€ 되고, Imageλ₯Ό λŒ€μƒμœΌλ‘œ ν•˜λŠ” λͺ…λ Ήμ–΄λŠ” docker image ... κ³Ό 같은 ν˜•νƒœλ₯Ό κ°–λŠ”λ‹€. 이λ₯Ό Management Commands라고 ν•œλ‹€. 일반적인 λͺ…λ Ήμ–΄λŠ” docker ... 같은 ν˜•νƒœλ₯Ό 가지며 μ•„λž˜μ—μ„œ μ†Œκ°œν•˜λŠ” λͺ…λ Ήμ–΄ 외에도 정말 λ§Žμ€ λͺ…령어듀이 있기 λ•Œλ¬Έμ— μ •ν™•ν•œ 정보듀은 μ•„λž˜ 링크의 곡식 λ„νλ©˜νŠΈμ˜ 도움을 받도둝 ν•˜μž.

1) 버전 확인

docker version docker -v

2) Docker Hub 둜그인

docker login
Docker Hubμ—μ„œ Imageλ₯Ό μ—…λ‘œλ“œ ν˜Ήμ€ λ‹€μš΄λ‘œλ“œ ν•˜κΈ° μœ„ν•΄μ„œ Docker Hub에 λ°˜λ“œμ‹œ λ‘œκ·ΈμΈμ„ ν•΄μ•Ό ν•œλ‹€.

3) Docker Hub λ‘œκ·Έμ•„μ›ƒ

docker logout

4. Reference

μ‹œμž‘ν•˜μ„Έμš”! 도컀/μΏ λ²„λ„€ν‹°μŠ€: μΉœμ ˆν•œ μ„€λͺ…μœΌλ‘œ μ‰½κ²Œ μ΄ν•΄ν•˜λŠ” μ»¨ν…Œμ΄λ„ˆ 관리
μΏ λ²„λ„€ν‹°μŠ€μ™€ λ„μ»€μ˜ κΈ°λ³Έ μ‚¬μš© 방법을 μ •ν™•νžˆ μ΄ν•΄ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€! 도컀 μ»¨ν…Œμ΄λ„ˆλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ°°ν¬ν•˜κΈ° μœ„ν•œ μƒˆλ‘œμš΄ νŒ¨λŸ¬λ‹€μž„μ„ μ œμ‹œν•˜λŠ” 가상화 νŒ¨λŸ¬λ‹€μž„μž…λ‹ˆλ‹€. μ»¨ν…Œμ΄λ„ˆ μžμ²΄λŠ” μ‚¬μš©ν•˜κΈ° 맀우 μ‰½μ§€λ§Œ 이λ₯Ό ν™œμš©ν•˜κ³  κ΄€λ¦¬ν•˜κΈ°λŠ” κ²°μ½” 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€. 이 책은 도컀λ₯Ό 처음 μ ‘ν•˜λŠ” 개발자λ₯Ό μœ„ν•œ 도컀 μ»¨ν…Œμ΄λ„ˆμ™€ μ΄λ―Έμ§€μ˜ 기본적인 κ°œλ…μ„ λ¨Όμ € μ„€λͺ…ν•œ λ’€, 도컀 μ»΄ν¬μ¦ˆμ™€ μŠ€μ›œ λͺ¨λ“œλ₯Ό 톡해 μ»¨ν…Œμ΄λ„ˆ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ YAML 파일둜 μž‘μ„±ν•˜κ³  ν΄λŸ¬μŠ€ν„°μ—μ„œ λ°°ν¬ν•˜λŠ” 방법을 μ†Œκ°œν•©λ‹ˆλ‹€.