Backend with Golang

Docker-compose.yml 파일 작성하기 (TBU)

아직개구리 2023. 5. 9. 00:25

Dockerfile

- 이미지를 어셈블하기 위해 호출할 수 있는 명령이 포함된 텍스트 파일 

- Dockerfile 에 빌드 관련 내용이 다 기재되어 있기 때문에 docker-compose.yml 에서 빌드 관련 내용을 기재할 필요 없이 dockerfile의 경로를 지정하기만 하면 된다. 

 

  1. FROM: Base Image를 지정할 수 있다. easy to start by pulling an image from the Public Repo. 
  2. RUN: 새로운 레이어에서 명령어 실행 하고 결과를 commit한다. 결과적으로 commit된 이미지는 그 다음스텝에서 사용된다.  
    1. RUN command 형태나 RUN ["executable", "param1", "param2"] 이런식으로 실행할 수 있다. 
  3. EXPOSE: EXPOSE는 Docker에게 container가 runtime에 어떤 특정 network ports 으로 listen할 지 알려주는 역할을 한다. TCP, UDP로 listen할 것인지를 선택할 수 있고, default는 TCP이다. host machine과 container port mapping시에 사용된다.  container 생성 시 container port값으로 EXPOSE 값을 적어야한다.  
  4. WORKDIR: 작업 디렉토리 지정
  5. COPY: 파일이나 directory를 <src>에서 container의 filesystem으로 복사해오는 것. 
  6. CMD와 ENTRYPOINT
    1. CMD: docker container가 실행될 떄 실행되는 명령어를 정의합니다. 빌드할 때는 실행되지 않으며, 여러개의 CMD가 존재하면 가장 마지막 CMD만 실행됨. 
    2. ENTRYPOINT: 컨테이너가 수행될 때 반드시 entrypoint에 지정한 명령을 수행하게 된다. 컨테이너 실행할 때 인자값을 주면 CMD에서는 그것을 실행하고, ENTRYPOINT에서는 그것을 실행 명령의 parameter로 알고 실행하게 된다.

 

docker-compose.yml  (TBU)

다중 컨테이너 docker 어플리케이션을 정의하고 실행하는 도구. 앱을 구성하는 서비스를 docker-compose.yml에 정의하여 docker-compose up 명령어로 앱을 실행한다. 

docker-compose파일에서 build 아래에 dockerfile을 지정해 놓을 때, dockerfile아래의 CMD 는 실행되지 않으므로 command field 에 따로 컨테이너가 실행되었을 때 실행 될 명령을 지정해 놓을 수 있다. 

docker-compose.yml이 있는 곳에서

  1. docker-compose down으로 현재 실행되고 있는 container를 종료시킬 수 있다. 
  2. docker-compose up

 

궁금한 field:

docker run -it 옵션의 의미: docker 컨테이너에 표준 입력(stdin)을 열어두고(-i), 가상 터미널을 열어(-t) 키보드의 입력을 표준 입력으로 전달할 수 있도록 하는 옵션이다. 아래는 docker run의 옵션을 docker-compose.yml에서 어떻게 쓸 수 있는지에 대한 것이다. 

  1. stdin_open: true -> docker run -i의 -i와 같다. Keep STDIN open even if not attached 
  2. tty: true -> docker run -t의 -t와 같다. Allocate a pseudo-tty 

 

Reference 

https://pyrasis.com/jHLsAlwaysUpToDateDocker/Unit08/02

https://docs.docker.com/compose/compose-file/#service-configuration-reference 

 

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

[Concurrency-1] Concurrency가 왜 어려운가?  (1) 2023.05.28
MySQL - Transaction  (0) 2023.05.09
Go: JSON  (0) 2023.05.03
Goroutine  (0) 2023.05.01
Go's Syntax  (0) 2023.04.27