반응형
도커의 기본 개념
도커는 컨테이너형 가상화를 구현하기 위한 상주 애플리케이션과 이를 관리하는 명령형 도구로 구성된다. (dockerd라는 데몬이 상주 실행된다.)
가상화 기술
- 컨테이너형 가상화 기술
- 도커는 컨테이너형 가상화 기술을 사용한다.
- 컨테이너형 가상화를 사용하면 가상화 소프트웨어 없이도 운영 체제의 리소스를 격리해 가상 운영 체제로 만들 수 있다.
- 이 가상 운영 체제를 컨테이너라고 한다.
- 호스트 운영 체제 가상화
- 운영 체제 위에서 가상화 소프퉤어를 사용해 하드웨어를 에뮬레이션하는 방법으로 게스트 운영체제를 만드는 방식.
애플리케이션의 중심이 되는 도커
- 도커는 컨테이너 정보를 Dockerfile 코드로 관리할 수 있다. 이 코드를 기반으로 복제 및 배포가 이루어지기 때문에, 재현성이 높다.
- 도커는 컨테이너에 애플리케이션 실행 환경이 같이 배포되는 방식이다. 실행 환경째로 배포하는 방식으로 골치 아픈 의존성 문제를 근본적으로 해결하려는것이다.
도커파일
- Dockerfile이나 애플리케이션 실행 파일을 사용해서 도커 컨테이너의 원형이 될 이미지를 만드는 이 과정을 '도커 이미지 빌드' 라고 한다.
- FROM 절: 컨테이너의 원형(틀) 역할을 할 도커 이미지를 정의한다.
- COPY 절: 배포하고자 하는 파일을 도커 컨테이너 안의 /usr/local/bin에 복사하는 것
- RUN 절: 도커 컨테이너 안에서 어떤명령을 수행하기 위한 것.
- CMD 절: 완성된 이미지를 도커 컨테이너로 실행하기 전에 먼저 실행할 명령을 정의한다.
코드로 관리하는 인프라(Infrastructure as Code)와 불변 인프라(Immutable Infrastructure)
- 서버를 어떻게 구성할 것인지, 어떤 라이브러리와 도구를 설치할지를 코드로 정의하고 셰프(Chef)나 앤서블(Ansible) 같은 프로비저닝 도구로 서버를 구축한다.
- 수작업이 개입할 여지를 줄이고 코드를 중심으로 바꿈으로써 쉽게 같은 구성의 서버 여러 대를 복제할 수 있다.
- 코드 기반으로 인프라 구축을 하기 위하여 항구적인 코드를 계속 작성하는 것이 운영업무에 부담을 줄 수 있고 서버가 늘어남에 따라 부담이 되어 불변 인프라 개념이 도입되었다.
- 불변 인프라는 어떤 시점의 서버 상태를 저장해 복제할 수 있게 하자는 개념이다.
- 서버에 변경을 가하고 싶을 때는 기존 인프라를 숮어하는 대신 새로운 서버를 구축하고 그 상태를 이미지로 저장한 다음 복제한다.
- 한번 설정된 서버는 수정 없이 파기되므로 멱등성을 고려할 필요도 없다.
도커 mac 설치하기
- mac용 도커 안정버전을 다운받는다. 링크
- docker version 명령을 실행하여 현재 설치된 버전을 확인한다.
도커 기본설정 ( 상태바 > Preferences 클릭 )
- 호스트 운영 체제 디렉터리 마운트: 아래 탭에 보이는 디렉터리 아래에 위치한 디렉터리를 컨테이너에 마운트할 수 있다. 그 외의 디렉터리는 경고 메시지가 출력되며 마운트되지 않는다.
- 가상 디스크 용량 설정: 'Disk' 탭에서 도커를 실행할 가상 디스크 크기를 조절할 수 있다.
- CPU 코어 및 메모리 할당: 'Advanced' 탭에서 호스트 운영 체제의 CPU 코어와 메모리 리소스를 얼마나 도커에 할당할지를 설정할 수 있다.
- 비보안 레지스트리: 'Daemon' - 'Basic' 탭의 'Insecure registries'에서 비보안 도커 레지스트리를 등록할 수 있다. 도커 레지스트리는 기본적으로 HTTPS통신을 권장하며, HTTP 통신을 사용하려면 옵션에서 별도로 설정해야 한다.
도커 이미지와 도커 컨테이너
- 도커 이미지: 도커 컨테이너를 구성하는 파일 시스템과 실행할 어플리케이션 설정을 하나로 합친 것으로, 컨테이너를 생성하는 템플릿 역할.
- 도커 컨테이너: 도커 이미지를 기반으로 생성되며, 파일 시스템과 애플리케이션이 구체화돼 실행되는 상태
도커 이미지로 도커 컨테이너 생성해보기
- 이미지 받아오기
- 도커 컨테이너 실행
도커 실행환경의 포트 9000을 거쳐 HTTP 요청을 전달받는다. - 도커 이미지 응답 확인
- 도커 컨테이너 정지
간단한 애플리케이션과 도커 이미지 만들기
- 아래 기능을 갖는 서버 애플리케이션을 작성한다.
- 모든 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)
}
- main.go 파일을 포함하는 도커 이미지를 만들기 위해 아래와 같이 Dockerfile 작성한다.
FROM golang:1.9 RUN mkdir /echo COPY main.go /echo CMD ["go", "run", "/echo/main.go"]
- FROM: 도커 허브라는 레지스트리에서 도커 이미지를 받는다.
- RUN: 도커 이미지를 실행할 때 컨테이너 안에서 실행할 명령을 정의하는 인스트럭션이다.
- CMD: 도커 컨테이너를 실행할 때 컨테이너 안에서 실행할 프로세스를 지정한다.
도커 이미지 빌드하기
- 빌드를 실행하면 베이스 이미지를 내려받고 RUN, COPY 인스트럭션에 지정된 명령이 단계적으로 실행되는 것을 확인할 수 있다.
- docker image ls명령으로 생성된 이미지의 정보를 확인할 수 있다.
- docker container 실행
- docker container 백그라운드 실행
반응형
'클라우드 > 도커' 카테고리의 다른 글
서비스와 스택 (0) | 2021.11.29 |
---|---|
도커 스웜 (0) | 2021.11.28 |
컨테이너 실전 구축 및 배포 (0) | 2021.10.31 |
도커 컴포즈로 여러 컨테이너 실행하기 (0) | 2021.10.30 |
도커 컨테이너 (0) | 2021.10.17 |