Backend with Golang

Docker 기본 개념

아직개구리 2023. 4. 26. 15:18

Docker container, image 

Image: a file used to execute code in a Docker container 

- image act as a set of instructions to build a Docker container. 

- application code, libraries, tools, dependencies들이 포함되어있음. 

- image가 도커 환경에서 deploy 되면, Docker container로써 실행가능하다.  

 

Docker container:  virtualized runtime environment 

- underlying hardware에서 독립적으로 application을 create,run, deploy 하기 위해서 사용된다. 

 

docker-compose vs docker run 

1.  docker run 과 docker-compose의 가장 중요한 차이는 docker run은 command line based이고, docker-compose는 configuration data (YAML file) 를 읽어서 실행한다. 

2. 두번째 큰 차이는 바로 docker run 은 한 컨테이너 당 한번만 실행되고, docker compose는 여러번 configure, run 된다. 

 

docker run command는 길고, 만약에 heavily parameterized 되었다면 command 길이가 훨씬 길 것이다. 그렇기 때문에 docker-compose 를 사용해서 config data들을 YAML파일에 적어 사용하게 된다. 같은 폴더에서 docker-compose up command 를 사용해서 container를 실행시킬 수 있다. 

 

docker-compose command 

1. docker-compose build: 이미지를 빌드한다. 

2. docker-compose up: 컨테이너를 생성 및 실행한다. 

docker-compose up --build // --build 는 캐싱된 이미지를 따지지 않고 이미지 빌드를 한 뒤에 사용하라는 것.
docker-compose up -d // -d 는 백그라운드에서 컨테이너를 실행하는 것

docker-compose.yml파일을 수정하고 이를 서비스에 적용하려면 서비스를 멈추고, 지우고, 시작해야하는데, 이를 up command를 통해서 자동으로 현재 실행중인 서비스 설정과 달라진 부분이 있으면 재생성하고 재시작한다.

image가 없을 때는 up을 사용하면 빌드한 뒤 container를 생성하고, 실행한다. 

-f : -f는 compose file의 이름을 specify 할 때 사용된다. 

 

3. docker-compose stop: 컨테이너를 정지함

4. docker-compose down: stop containers & remove containers, networks, volumes, and images created by up.

5. docker-compose start: 컨테이너 시작 

6. docker-compose ps: 실행중인 작업을 볼 수 있음

 

 

VM 과 Container의 차이 

-  둘다 공통적으로는 physical server와의 연결고리를 약화시키는 용도로 쓰인다. 

이 두개 중에 선택하는 것은 결국 application에 따라 다르다. 

 

VM:  각각의 vm은 독립적인 os를 돌린다.

- 많이 쓰이긴 하지만 underlying OS에 tight하게 엮여있기 때문에 portability가 떨어진다.  단일 app이나 micro service를 실행시킬 때 필요없는 대규모 OS설치 공간을 요구하기 때문에 이런것에는 적합하지 않다. 

- Hyperviser 라는 소프트웨어가 리소스를 partitioning 하여 물리 머신에서 분리하고, VM 전용으로 할당한다. 사용자가 추가 리소스를 요구하는 VM 명령을 발행하면, 하이퍼바이저는 이 요청을 전달하고 변경사항을 캐싱한다. 

 

Container: virtualizes OS only not the underlying hardware. 

- managing container's visibility, security, and complicance can be difficult 

- microservice, application 을 실행할 수 있는 것을 포함한다. 컨테이너 안의 모든 것은 image에 저장된다. 

 

 

Docker?

도커는 단일 기술이 아니다. 컨테이너의 빌드, 실행, repo 관리, 네트워크 관리 등 연관 기술들을 함께 엮어 docker라는 하나의 command line으로 컨테이너에 접근, 관리할 수 있도록 만들어진 것이다. 

 

https://ykarma1996.tistory.com/192 

 

컨테이너의 구조와 오픈소스의 생태계에 관한 리서치(feat. 도커는 적폐인가?)

컨테이너 이미지의 빌드 및 배포에 관한 성능을 개선하기 위해 리서치를 하다보니, 혼자 알기에 너무 재밌는 배경들이 많아서 정리해 보기로 했다. 오늘은 컨테이너와 이미지의 구조 및 원리(특

ykarma1996.tistory.com

 

 

'Backend with Golang' 카테고리의 다른 글

MySQL - Transaction  (0) 2023.05.09
Docker-compose.yml 파일 작성하기 (TBU)  (0) 2023.05.09
Go: JSON  (0) 2023.05.03
Goroutine  (0) 2023.05.01
Go's Syntax  (0) 2023.04.27