Study/seSAC 금천 4기

컨테이너 애플리케이션 개발_2일차_240919

지찬씌 2024. 9. 30. 09:04

Docker

 

Dockerfile을 이용한 이미지 빌드

 

 

- Dockerfile 및 context에서 도커 이미지를 빌드한다. 도커 이미지 빌드를 위한 CLI(Command Line Interface) 명령어는 다음과 같다.

 

docker image build = docker build = docker buildx build

                                                          (Buildkit을 이용한 빌드를 수행)

 

   => 모두 같은 명령어지만 적용하는 환경이나 문법의 경우 각자 다른다. 해당 명령어 입력 후 --help 를 통해 익힌다.

 

* DockerFile

: 도커 이미지를 빌드하는데 필요한 명령어(컨테이너에 설치해야 하는 패키지, 추가해야 하는 소스코드, 실행해야 하는 명령어와 쉘 스크립트)를 순서대로 기술한 텍스트 파일이다.   => 명세

 

* Context

: 지정된 경로 또는 URL에 있는 파일의 모음을 말한다.  => 해당 디렉토리

 

 

 

 

Go Language 기반의 컨테이너 앱을 사용해 도커 컨테이너 작동 확인

 

간단한 앱 개발

1. docker\go 작업 디렉터리 생성 및 코드를 작성할 main.go 파일 생성 

 

 

2. 소스코드 작성

go language 기반의 소스코드

 

- 도커 컨테이너 실행 확인을 위한 코드이므로 문법적인 이해는 넘기도록 하자. 

- 요약하자면, 8080포트로 HTTP 요청을 대기하고 있다가, /로 요청이 들어오면 Hello Docker!!!를 응답하는 앱이다.

 

 

 

 

 

개발환경(PC)에서 앱 실행 및 동작 확인

 

1. go language 설치

- https://go.dev/dl/ 에서 다운 받을 수 있다.

 

2. 앱 실행

C:\Users\crpark> go run c:\docker\go\main.go            <= docker\go 디렉터리의 main.go 파일을 실행하는 go lang 명령어


2024/09/19 09:39:33 Starting server on :8080            <= 웹 서버가 정상적으로 8080포트에서 작동함을 알 수 있다.

 

 

3. curl 명령어를 이용해 요청을 전달

c:\docker> curl http://localhost:8080/                      <= 웹 서버에 "/" 주소로 응답을 요청


Hello Docker!!!                                                       <= 요청에 대한 응답. main.go 프로그램이 정상적으로 동작함을 확인

 

 

- 만약 동일한 앱을 다른 서버 또는 개발환경(PC)에서 실행하려고 한다면, 1~3을 반복해야 한다. 

  => 앱과 앱을 실행하기 위한 환경을 묶어서 배포하는 것이 필요한데, 이를 컨테이너화를 통해 가능하다.

 

 

 

 

 

 

컨테이너화 Step 1. 도커 이미지 생성

1. Dockerfile 생성

 

 

 

 

도커파일 빌드의 시작은 FROM 절부터 시작한다.

FROM 절 : 각종 언어로 만들어진 프로그램을 실행할 수 있는 이미 만들어진 구동환경을 이미지로 가져오는 명령어다.

 

 

 

 

 

 

 

 

 

docker image build 시 여러 명령어는 생략이 가능하지만, -tag(이미지의 이름을 붙여주는 명령어)는 반드시 사용해야만 한다. (생략불가)

 

 

entrypoint = CMD 명령어

 

 

환경 변수

- 컨테이너 앱 개발 시 매우매우 중요하다.

 

 

 

 

다양한 옵션을 사용해서 컨테이너 실행 (run, run -it, run -d 에 대해 그림 그려볼 것)

컨테이너를 run 하면 기본적으로 attach모드로 실행되고 제어권이 컨테이너로 넘어가므로 터미널에서는 제어가 불가능하게 된다.

1) 다른 터미널을 열어 해당 컨테이너를 제어

> rm -f [컨테이너 ID] : 강제 삭제 (ID는 식별 가능한 범위까지만 입력해도 문제 없다.

2) 포트를 할당하여 실행하기 전, run 뒤에 -it 명령어를 추가하여 컨테이너를 실행하면 터미널에서 제어할 수 있다.

> 제어방법 : (Ctrl 누른상태로) p + q 를 입력하면 호스트에서 새로운 명령어 입력이 가능해진다. 

 

 

 

DEBIAN_FRONTEND 란?

 

 

 

 


포그라운드 vs 백그라운드 프로세스