https://github.com/dl0312/docker-tutorial
๐ถ It's time to study docker
https://github.com/dl0312/docker-tutorial
Last synced: 15 days ago
JSON representation
๐ถ It's time to study docker
- Host: GitHub
- URL: https://github.com/dl0312/docker-tutorial
- Owner: dl0312
- Created: 2019-08-01T04:31:47.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-12-11T00:26:22.000Z (about 2 years ago)
- Last Synced: 2024-10-11T21:24:52.759Z (4 months ago)
- Language: Dockerfile
- Size: 18.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Docker Tutorial
## Docker๋ ๋ฌด์์ธ๊ฐ?
Docker๋ container ๊ธฐ๋ฐ์ ๊ฐ์ํ ๋๊ตฌ์ด๋ค. ๊ณ์ธตํ๋ ํ์ผ ์์คํ ์ ์ฌ์ฉํ์ฌ ๊ฐ์ํ๋ container์ ๋ณ๊ฒฝ์ฌํญ์ ๋ชจ๋ ์ถ์ ํ๊ณ ๊ด๋ฆฌํ๋ค. ์ด๋ฅผ ํตํด container์ ํน์ ์ํ๋ฅผ ํญ์ ๋ณด์กดํด๋๊ณ , ํ์ํ ๋ ์ธ์ ์ด๋์๋ ์คํํ ์ ์๋๋ก ๋์์ฃผ๋ ๋๊ตฌ์ด๋ค. docker๋ ๊ฐ์ ๋จธ์ ์ ๋จ์ ์ ๊ทน๋ณตํ๋ฉด์ ์ฅ์ ๋ง์ ๊ทน๋ํ๋ ๊ฒฐ๊ณผ๋ก ๋์จ ๊ฐ์ํ ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ค.
Docker๋ ๋จ์ ๊ฐ์ ๋จธ์ ์ ๋์ด์ ํ๊ฒฝ์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ์ด๋ ํ๋ซํผ์์๋ ์ฌํ๊ฐ๋ฅํ **Application Container**๋ฅผ ๋ง๋๋ ๊ฒ์ด ๋ชฉํ์ด๋ค.
์๋ฅผ ๋ค์ด๋ณด์, OSX๋ฅผ ์ฌ์ฉํ ๋ ๋ด๊ฐ ํ์ฌ ์ฌ์ฉํ์ง ์๋ `ruby`, `node`, `mysql` ๊ฐ์ ๊ฒ๋ค์ด ๋ค์์ ๋์๊ฐ๋ฉด์ ๋ด ๋ฉ๋ชจ๋ฆฌ์ CPU ํ์๋ฅผ ์ฐจ์งํ๊ณ ์์ผ๋ฉฐ, ์ด๋ ์์์ ๋ญ๋น์ด๋ค.
๊ทธ๋ฌ๋ Docker๋ฅผ ์ฌ์ฉํ๊ฒ๋๋ฉด ์ด์ผ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋ค. ๋ด OS์ `ruby`๋ `mysql`์ ์ค์นํ๋ ๋์ Docker Engine์ ์ค์นํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ Docker Engine์์ `ruby`๋ `mysql`์ ์ค์นํ๋ ๊ฒ์ด๋ค. Docker Engine์ ์ค์น๋ ์ด๋ฏธ์ง๋ค์ ์ฌ์ฉํ ๋์๋ CPU๋ ๋ฉ๋ชจ๋ฆฌ, ๋์คํฌ๋ฑ์ ์ ๊ทผํ ์ ์๋ OS์ `Kernel`์ ์ด์ฉํ๋ค.
## Image
Image๋ Container๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ถ์์ ์ธ ๊ฐ๋ ์ด๋ค. ๋ฐ๋ผ์ ๊ณ ์ ๋ ์ด๋ฏธ์ง์ด๋ฉฐ ๋ถ๋ณ^Immutable^ํ ์ ์ฅ ๋งค์ฒด์ด๋ค.
Docker Image๋ค์ OS๋ฅผ ๊ฑฐ์น์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์คํํ๊ธฐ ์ํด์๋ OS๋ก Packageing ํ๋ ๊ณผ์ ์ด ํ์ํ๋ค. ๋ด OS์ ๊ฐ ์ด๋ฏธ์ง๋ค์ด Packaging๋ OS๋ ๊ฐ์ Kernel์ ์ฌ์ฉํด์ผํ๋ค.
๋ง์ฝ Linux๋ฅผ ์ด๋ค๋ฉด, Debian์ด๋ Ubuntu, Alpine ๊ฐ์ Kernel์ ์ธ ๊ฒ์ด๊ณ , MS๋ฅผ ์ด๋ค๋ฉด, Microsoft Server Core๋ Microsoft Nano Server๋ฅผ ์ธ ๊ฒ์ด๋ค. ์ถ๊ฐ์ ์ผ๋ก, ruby์ gem์ฒ๋ผ ๊ฐ์ด ์ถ๊ฐ์ ์ผ๋ก ํ์ํ ๊ณผ์ ์ด ์๋ ๊ฒฝ์ฐ์๋ OS์ ํจ๊ป ๋ฏธ๋ฆฌ Packaging ํด๋๋๋ค.
### Command
**docker image ํ์ธ**
```shell
$ docker images
```**docker image ์ญ์ **
```shell
$ docker rmi
```โ ๏ธ ์ข ๋ฃ์ํ๋ฅผ ํฌํจํ image์์ ํ์๋ container๊ฐ ํ๋๋ผ๋ ์๋ค๋ฉด, ํด๋น image๋ ์ญ์ ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ทธ๋ฌํ image๋ฅผ ์ญ์ ํ๊ณ ์ถ๋ค๋ฉด, ๋จผ์ ํ์๋ container๋ค์ ๋ชจ๋ ์ข ๋ฃํ๊ณ , ์ญ์ ๊น์ง ํด์ฃผ์ด์ผ ํฉ๋๋ค.
## Container
Container๋ ์ถ์์ ์ธ Docker Image๋ฅผ ์ด์ฉํด์ ์คํ๋ ์ฐ๋ฆฌ๊ฐ ์ค์ ๋ก ์คํํ๋ ๊ฐ์๋จธ์ ์ ๋ปํ๋ค. ๋ฐ๋ผ์ ๋ณ๊ฒฝ๊ฐ๋ฅ^Mutable^ํ๋ค. ํน์ ํ ์ด๋ฏธ์ง๋ก๋ถํฐ ์์ฑ๋ ์ปจํ ์ด๋์ ์ด๋ค ๋ณ๊ฒฝ์ฌํญ์ ๋ํ๊ณ , ๋ณ๊ฒฝ๋ ์ํ๋ฅผ ์ด๋ฏธ์ง๋ก ๋ง๋ค์ด๋ด๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
**docker container ํ์ธ**
```shell
$ docker ps
```**docker container ์ญ์ **
```shell
$ docker rm
```## Dockerfile
`Code`์ `OS`, ๋ค๋ฅธ ์์กด์ฑ๋ค์ ์ ์ ํด๋์ ํ์ผ์ด๋ค. ์ด ํ์ผ์ ์ด์ฉํ์ฌ Docker Image๋ฅผ ์์ฑํ๋ค. ๊ณผ๊ฑฐ์ ์ฌ์ฉ๋ ์๋ฒ ์ด์ ๊ธฐ๋ก๋ค์ ์ฝ๋ํ ํด๋์ ๊ฒ์ด๋ค.
```shell
$ docker build
``````shell
$ docker run -p 8000:8000 -it IMAGE ID node server.js
``````shell
$ docker run -it IMAGE ID /bin/sh
```### Dockerfile instructions
FROM - ์ดํ์ instruction์ ์ฌ์ฉํ Base Image๋ฅผ ์ค์ ํ๋ค. FROM ๋ช ๋ น์ด๋ ํญ์ Dockerfile์ ์ฒซ instruction์ด์ด์ผํ๋ค..
WORKDIR - ์ดํ์ ๋์ฌ ADD, COPY, CMD, ENTRYPOINT๋ RUN๊ฐ์ instruction๋ค์ ์์ ์์น๋ฅผ ์ค์ ํ๋ค.
ADD - ํ์ผ์ด๋ ํด๋ ์ธ๋ถ URL๋ค์ ์์ค์์ ๋ณต์ฌํ์ฌ image์ ํ์ผ์์คํ ์ ๋ณต์ฌํ๋ค.
## Docker build์ Debugging
Docker๋ `docker build`๋ก Dockerfile์ ํตํด ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ฉด์ ๊ฐ ์ํ๋ง๋ค ์์ ์ด๋ฏธ์ง์ธ **intermediate image**๋ฅผ ์์ฑํ๋ค.
```shell
Step 4/6 : ADD . /app
---> d6522788204e // ์ด๊ฒ์ด intermediate image
```๋ฐ๋ผ์ docker์์ ์ถ๋ ฅํ ์๋ฌ ๋ฉ์์ง ์ด์ธ์ ์ข ๋ ๊น๊ฒ debugํ๊ณ ์ถ๋ค๋ฉด ํด๋น ์ด๋ฏธ์ง์ ์คํํ ๋ค
```shell
$ docker run -it d6522788204e /bin/sh
```ํด๋น shell์์์ ๋ค์ ์ํ์ ์ง์ ํด๋ณด๋ฉด์ ์ด๋ค ๊ฒ์ด ๋ฌธ์ ์๋ ์ง, ๋ฌธ์ ๊ฐ ์๊ธฐ์ง ์์ผ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ๋ ์ง ์ ์ ์๋ค.
## TDD ๊ด์ ์์ Dockerfile ๋ฐ๋ผ๋ณด๊ธฐ
**TDD ๊ณผ์ **
1. TDD์์๋ ๋จผ์ ํ ์คํธ๋ฅผ ์์ฑํ๊ณ ,
2. ํ ์คํธ์ ์คํจํ๊ณ ,
3. ์ฝ๋๋ฅผ ์์ฑ/์์ ํ ํ,
4. ํ ์คํธ๋ฅผ ์ฑ๊ณตํฉ๋๋ค.
5. ์ค๋ณต๋ ์ฝ๋ ๋ฑ์ ๋ฆฌํฉํฐ๋งํฉ๋๋ค.
6. 1๋ฒ์ผ๋ก ๋์๊ฐ๋๋ค.Dockerfile๋ ๊ฐ์ ์์ผ๋ก ์๊ฐํ ์ ์๋ค.
1. ๋์ปค ํ์ผ์ ๋ง๋ค๊ณ
2. ๋์ปค ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ์ ์คํจํ๊ณ ,
3. ๋์ปค ํ์ผ์ ์์ฑ/์์ ํ ํ,
4. ๋์ปค ์ด๋ฏธ์ง ๋ง๋๋ ๋ฐ ์ฑ๊ณตํฉ๋๋ค.
5. ํ์ ์๋ ๋ถ๋ถ์ ์ง์ฐ๊ณ ํฉ์น ์ ์๋ ๋ช ๋ น์ ํฉ์นฉ๋๋ค. (=ํจ์จํ)
6. 1๋ฒ์ผ๋ก ๋์๊ฐ๋๋ค.## Reference
- [๐น Docker Tutorial - Part 1 - What is Docker, and Key Concepts](https://youtu.be/T25Z4CUwYjE)
- [๐ ๋์ปค(Docker) ํํ ๋ฆฌ์ผ : ๊น ๊น์ ๋ฐฐํฌ๊น์ง](https://blog.nacyot.com/articles/2014-01-27-easy-deploy-with-docker/)