( 참고 : 알면 더 쉬운 도커 쿠버네티스 (곽영호, 황승준) )

2. 실무에 바로 쓰는 도커 (1)

Contents

  • 2-1. 도커 도입 시 이점

  • 2-2. 도커 적용을 위한 준비

  • 2-3. 도커 이미지


2-1. 도커 도입 시 이점

여러 Microservice를 1대의 서버에서 운영할 수 있도록 함!

이를 가능케 해주는 2가지 핵심 커널 기술 :

  • 1) Cgroup
  • 2) Namespace


(a) Cgroup

  • Contorl Group
  • 시스탐의 CPU 시간, 시스템 메몰, 네트우커 등의 자원을 제한/격리 가능케함


(b) Namespace

  • 시스템 리소스를, 각 프로세스에만 해당되는 자원처럼!
  • 다른 프로세스와 격리시키는 가상화 기능


이 두 기술을 통해, VM과 달리 물리적 가상화 사용 필요 X ( + 보다 나은 성능 )


2-2. 도커 적용을 위한 준비

2-3절

  • Docker 설치
  • Docker Hub에서 Image 가져와서 사용
    • Nginx 웹 서버 Docker Image


2-3. 도커 이미지

(구) 배포 과정 ( ex. with Java )

  1. 개발자 컴퓨터에서 개발 & 소스 commit

  2. 빌드 & 배포 요청

  3. CI/CD 서버가 커밋된 소스 내려받고, 테스트 & 빌드

    배포 단위의 파일 뭉치 생성

  4. 원하는 환경의 서버에 이동 후 실행


Docker Image

위의 “파일 뭉치” = 도커 이미지

  • 컨테이너의 기초
  • 계층화된 파일 시스템
  • 컨테이너의 스냅샷


명령어 요약

[1] docker images

  • Docker Image 리스트 나열

[2] docker pull nginx

  • Docker Image 다운로드 ( nginx 이미지 )

[3] docker run --name nginx -p 8000:80 -d nginx

  • Image를 container화
  • ( Image 다운 따로 하지 않아도 OK. 자동으로 다운로드 후 run 해줌 )
  • 매개변수 소개
    • --name : container의 이름 지정
    • -p : 도커에서 실행되는 포트 & 현재 호스트의 포트 연결
      • 내 PC 8000번 포트 & 도커 컨테이너 80번 포트 포트포워딩
    • -d : 백그라운드로 실행

[4] docker ps

  • ps = process status
  • Container 정보 확인


( 위의 과정을 거치고, 주소창에 http://localhost:8000 입력 시, nginx 웹 서버의 웰컴 페이지 나옴 )


이미지 만들기 위해서?

  • 이미지 : 변경 불가능한 파일
  • 컨테이너의 파일 : 수정 가능

\(\rightarrow\) 컨테이너의 파일을 수정하고 난 뒤, 이미지 생성


우선, nginx의 index.html 페이지 문구를 수정 한다.

그러기 위해, nginx 컨테이너 안에서, 해당 파일의 위치를 찾아야!

우선, nginx 컨테이너 안에 접속해야!

( = 호스트 PC(외부)에서 Docker container(내부)의 쉘을 실행해야 )


[5] docker exec -it nginx /bin/bash

  • exec : HOST에서 container 안에 명령을 실행
  • -i : (interactive) 표준 입력을 활성화
  • -t : (tty) 리눅스 쉘
  • 위 명령어 실행으로, docker container 내부 쉘이 실행됨!


[6] find / -name index.html 2>/dev/null

  • find : 파일 찾기
  • / : 루트 디렉토리
  • -name : 파일 이름
  • 2>/dev/null : 에러 출력 시, /dev/null로 보내기!

  • 위치 찾은 후, exit으로 HOST 컨테이너로 다시 빠져나와!


[7] docker cp nginx:/usr/share/nginx/html/index.html index.html

  • container 내의 index.html을, HOST PC에 복사!
  • index.html 편집 한 뒤 …


[8] docker cp index.html nginx:/usr/share/nginx/html/index.html

  • 다시 container로 복사!


[9] docker commit nginx mynginx

  • 수정된 index.html의 이미지 새로 생성


[10] docker images

  • 이미지 다시 조회 시, 새로운 mynginx 이미지가 생서오딘 것을 확인 가능


[11] docker stop nginx & docker rm nginx

  • 기존의 nginx 컨테이너 종료 & 삭제

    ( 반드시 종료 시킨 후 삭제해야! )

  • docker ps -a 통해, 정지된 container 확인 가능


[12] docker run --name nginx -p 8000:80 -d mynginx

  • 새로 만든 mynginx 이미지를 container로 실행


위와 같이 image로 만들 수도 있고, 또 다른 방법도 가능

\(\rightarrow\) with “도커 파일”


도커 파일

  • 명령어 묶음으로 이미지 만들 수 있는 text file

  • example

    ( 아래의 docker file은 현재 작업 디렉토리에 있어야 )

    FROM nfinx
    COPY index.html /usr/share/nginx/html/
    


[13] docker build -t mynginx2 .

  • Docker File을 사용하여 Image 만들기


[14] docker run --name custom1 -p 8002:80 -d mynginx2

  • 마찬가지로 container 실행하기
  • http://localhost:8002 들어가서 확인


[15] docker rmi 이미지명

  • 도커 이미지 삭제