반응형

프로젝트 빌드를 위해서 도커를 굉장히 많이 사용합니다.

대략적인 명령어를 활용하여 구동만 시킬 줄 알지 도커 관련하여 기본기가 너무 부족한 걸 느꼈습니다.

이제는 도커에 대해서 조금은 더 알아야 될 때까 왔습니다.

책을 보고 공부를 하며 정리를 하겠습니다.

 

책은 도커/쿠버네티스를 활용한 컨테이너 실전 입문 책을 보고 공부했습니다 :)

도커 공부가 필요하신 분은 한 권 구입을 하시는 것도 추천드립니다.

 

도커를 사용하는 이유

- 변화하지 않는 실행 환경 확보를 위해서

- 코드를 통한 실행 환경 구축 및 애플리케이션 구성

- 실행 환경과 애플리케이션의 일체화로 이식성 향상

 

즉, 애플리케이션을 개발하면서 변화 없는 동일한 환경 구성을 할 수 있다!!

똑같은 애플리케이션을 구동하더라도 사용자마다 서버마다 환경이 다르다. 이 문제를 도커로 같은 실행환경으로 만들 수 있다.

 

도커 이미지 및 도커 컨테이너

- 도커 이미지: 컨테이너를 구성하는 파일 시스템과 실행할 애플리케이션 설정을 하나로 합친 것을 뜻함. 컨테이너를 생성하기 위한 템플릿.

- 도커 컨테이너: 도커 이미지를 기반으로 애플리케이션이 실행되는 상태.

 

2개의 용어를 숙지해주세요.

 

도커 실행 예제

1. main.go

package main

import (
	"fmt"
	"log"
	"net/http"
)

func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		log.Println("received request")
		fmt.Fprintf(w, "Hello Docker!!")
	})

	log.Println("start server")
	server := &http.Server{Addr: ":8080"}
	if err := server.ListenAndServe(); err != nil {
		log.Println(err)
	}
}

go언어로 작성이 되었지만 어려운 내용은 없습니다. 8080으로 요청을 받는 서버입니다. 요청을 받게 되면 received request와 Hello Docker!! 문구가 출력됩니다.

 

2. Dockerfile

FROM golang:1.9

RUN mkdir /echo
COPY main.go /echo

CMD ["go", "run", "/echo/main.go"]

도커 이미지를 만들어 봤습니다. main.go파일과 같은 위치에 만들어 주세요.

각각의 명령들을 살펴보도록 하겠습니다.

 

FROM

도커 이미지의 베이스입니다. 우리는 go 언어를 사용하기 때문에 golang을 명시해줍니다.

FROM에 명시된 이미지는 도커 허브(Docker Hub)에 등록되어 있는 이미지입니다.

 

RUN

도커 이미지가 실행될 때 컨테이너 안에서 실행할 명령입니다.

스크립트의 명령에 따라 컨테이너 안에서는 /echo 디렉터리가 만들어집니다.

 

COPY

호스트의 파일이나 디렉터리를 도커 컨테이너로 복사합니다.

 

CMD

컨테이너 안에서 실행할 프로세스를 지정합니다.

RUN명령어는 애플리케이션의 업데이트 및 배치를 위해서 이미지를 빌드할 때 실행됩니다.

CMD는 애플리케이션 자체를 실행하는 명령어로 컨테이너가 시작될 때 한 번만 실행됩니다.

즉, 위의 CMD 명령어를 통해서 " go run /echo/main.go " 명령이 실행됩니다.

명령을 공백을 나눈 배열로 명시해주세요.

 

이상 도커를 사용하기 위한 스크립트의 내용입니다.

 

위의 내용을 기반으로 도커 구동

1. 다음으로 도커 이미지를 빌드하겠습니다.

docker image build -t example/echo:latest

docker image build -t example/echo:latest .

-t 옵션을 통해서 example/echo:latest라는 이미지명을 지정합니다. 이미지명을 지정하지 않으면 이미지명이 해시값만 만들어져 구분이 어렵습니다. :latest도 생략이 가능하며 생략 시 latest가 붙습니다.

실행 명령어를 수행하면 dockerfile에 명시된 명려들이 순차적으로 실행됩니다.

 

2. 생성(빌드)된 도커 이미지를 확인하겠습니다.

docker image ls

위의 명령을 실행하면 현재 자신의 컴퓨터에 생성된 도커 이미지를 확인할 수 있습니다.

 

3. 빌드까지 정상적으로 되었으니 도커 컨테이너를 실행하겠습니다.

docker container run example/echo:latest
or
# -d 옵션: 백그라운드 실행
docker container run -d example/echo:latest

4. 다음 명령어를 통해서 실행 중인 도커 컨테이너를 확인할 수 있습니다.

docker container ls

5. 서버가 동작하니 8080으로 요청을 해보겠습니다.

8080으로 요청을 했더니 연결이 거절됐습니다.

컨테이너 밖에서는 컨테이너 포트를 바로 사용할 수 없습니다.

밖에서 온 요청을 컨테이너 안에 있는 애플리케이션으로 전달을 해줘야 합니다. 즉, 포트 포워딩을 해주셔야 됩니다.

 

6. 도커 실행을 중지하고 호스트 포트 9000을 컨테이너 포트 8080으로 연결하겠습니다.

# container_id는 ls 명령어를 통해서 확인
docker container stop [container_id]

# -p옵션: 포트 포워딩 지정
docker container run -d -p 9000:8080 example/echo:latest

 

7. 포트 포워딩이 되었으니 9000 포트로 접속을 다시 하겠습니다 :)

9000 포트로 접속을 했더니 서버로부터 이상 없이 응답을 받았습니다.

 

이상 도커의 기본 스크립트와 구동방법을 알아봤습니다.

도움이 되셨으면 좋겠습니다.

감사합니다.

반응형

+ Recent posts