본문 바로가기

클라우드/도커

도커 이미지와 컨테이너 기본 개념과 실행

반응형

도커의 기본 개념

도커는 컨테이너형 가상화를 구현하기 위한 상주 애플리케이션과 이를 관리하는 명령형 도구로 구성된다. (dockerd라는 데몬이 상주 실행된다.)

가상화 기술

  1. 컨테이너형 가상화 기술
  • 도커는 컨테이너형 가상화 기술을 사용한다.
  • 컨테이너형 가상화를 사용하면 가상화 소프트웨어 없이도 운영 체제의 리소스를 격리해 가상 운영 체제로 만들 수 있다.
  • 이 가상 운영 체제를 컨테이너라고 한다.
  1. 호스트 운영 체제 가상화
  • 운영 체제 위에서 가상화 소프퉤어를 사용해 하드웨어를 에뮬레이션하는 방법으로 게스트 운영체제를 만드는 방식.

애플리케이션의 중심이 되는 도커

  • 도커는 컨테이너 정보를 Dockerfile 코드로 관리할 수 있다. 이 코드를 기반으로 복제 및 배포가 이루어지기 때문에, 재현성이 높다.
  • 도커는 컨테이너에 애플리케이션 실행 환경이 같이 배포되는 방식이다. 실행 환경째로 배포하는 방식으로 골치 아픈 의존성 문제를 근본적으로 해결하려는것이다.

도커파일

  1. Dockerfile이나 애플리케이션 실행 파일을 사용해서 도커 컨테이너의 원형이 될 이미지를 만드는 이 과정을 '도커 이미지 빌드' 라고 한다.
  2. FROM 절: 컨테이너의 원형(틀) 역할을 할 도커 이미지를 정의한다.
  3. COPY 절: 배포하고자 하는 파일을 도커 컨테이너 안의 /usr/local/bin에 복사하는 것
  4. RUN 절: 도커 컨테이너 안에서 어떤명령을 수행하기 위한 것.
  5. CMD 절: 완성된 이미지를 도커 컨테이너로 실행하기 전에 먼저 실행할 명령을 정의한다.

코드로 관리하는 인프라(Infrastructure as Code)와 불변 인프라(Immutable Infrastructure)

  • 서버를 어떻게 구성할 것인지, 어떤 라이브러리와 도구를 설치할지를 코드로 정의하고 셰프(Chef)나 앤서블(Ansible) 같은 프로비저닝 도구로 서버를 구축한다.
  • 수작업이 개입할 여지를 줄이고 코드를 중심으로 바꿈으로써 쉽게 같은 구성의 서버 여러 대를 복제할 수 있다.
  • 코드 기반으로 인프라 구축을 하기 위하여 항구적인 코드를 계속 작성하는 것이 운영업무에 부담을 줄 수 있고 서버가 늘어남에 따라 부담이 되어 불변 인프라 개념이 도입되었다.
  • 불변 인프라는 어떤 시점의 서버 상태를 저장해 복제할 수 있게 하자는 개념이다.
  • 서버에 변경을 가하고 싶을 때는 기존 인프라를 숮어하는 대신 새로운 서버를 구축하고 그 상태를 이미지로 저장한 다음 복제한다.
  • 한번 설정된 서버는 수정 없이 파기되므로 멱등성을 고려할 필요도 없다.

도커 mac 설치하기

  1. mac용 도커 안정버전을 다운받는다. 링크
  2. docker version 명령을 실행하여 현재 설치된 버전을 확인한다.

도커 기본설정 ( 상태바 > Preferences 클릭 )

  1. 호스트 운영 체제 디렉터리 마운트: 아래 탭에 보이는 디렉터리 아래에 위치한 디렉터리를 컨테이너에 마운트할 수 있다. 그 외의 디렉터리는 경고 메시지가 출력되며 마운트되지 않는다.
  2. 가상 디스크 용량 설정: 'Disk' 탭에서 도커를 실행할 가상 디스크 크기를 조절할 수 있다.
  3. CPU 코어 및 메모리 할당: 'Advanced' 탭에서 호스트 운영 체제의 CPU 코어와 메모리 리소스를 얼마나 도커에 할당할지를 설정할 수 있다.
  4. 비보안 레지스트리: 'Daemon' - 'Basic' 탭의 'Insecure registries'에서 비보안 도커 레지스트리를 등록할 수 있다. 도커 레지스트리는 기본적으로 HTTPS통신을 권장하며, HTTP 통신을 사용하려면 옵션에서 별도로 설정해야 한다.

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

  1. 도커 이미지: 도커 컨테이너를 구성하는 파일 시스템과 실행할 어플리케이션 설정을 하나로 합친 것으로, 컨테이너를 생성하는 템플릿 역할.
  2. 도커 컨테이너: 도커 이미지를 기반으로 생성되며, 파일 시스템과 애플리케이션이 구체화돼 실행되는 상태

도커 이미지로 도커 컨테이너 생성해보기

  1. 이미지 받아오기
  2. 도커 컨테이너 실행
    도커 실행환경의 포트 9000을 거쳐 HTTP 요청을 전달받는다.
  3. 도커 이미지 응답 확인
  4. 도커 컨테이너 정지

간단한 애플리케이션과 도커 이미지 만들기

  1. 아래 기능을 갖는 서버 애플리케이션을 작성한다.
  • 모든 HTTP 요청에 대해 'Hello Docker!!'라는 응답을 보낸다.
  • 포트 8080로 요청을 받는 서버 애플리케이션으로 동작한다.
  • 클라이언트로부터 요청을 받으면 received request라는 메시지를 표준으로 출력한다.

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")

    http.ListenAndServe(":8080", nil)
}

  1. main.go 파일을 포함하는 도커 이미지를 만들기 위해 아래와 같이 Dockerfile 작성한다.
    
    FROM golang:1.9
    
    RUN mkdir /echo
    COPY main.go /echo
    
    CMD ["go", "run", "/echo/main.go"]

 

  • FROM: 도커 허브라는 레지스트리에서 도커 이미지를 받는다.
  • RUN: 도커 이미지를 실행할 때 컨테이너 안에서 실행할 명령을 정의하는 인스트럭션이다.
  • CMD: 도커 컨테이너를 실행할 때 컨테이너 안에서 실행할 프로세스를 지정한다.

도커 이미지 빌드하기

  1. 빌드를 실행하면 베이스 이미지를 내려받고 RUN, COPY 인스트럭션에 지정된 명령이 단계적으로 실행되는 것을 확인할 수 있다.
  2. docker image ls명령으로 생성된 이미지의 정보를 확인할 수 있다.
  3. docker container 실행
  4. docker container 백그라운드 실행
반응형

'클라우드 > 도커' 카테고리의 다른 글

서비스와 스택  (0) 2021.11.29
도커 스웜  (0) 2021.11.28
컨테이너 실전 구축 및 배포  (0) 2021.10.31
도커 컴포즈로 여러 컨테이너 실행하기  (0) 2021.10.30
도커 컨테이너  (0) 2021.10.17