개발일기장

Docker 공부(1) 본문

STUDY/Docker

Docker 공부(1)

게슬 2022. 5. 25. 12:38
728x90

 

 

http://www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9791158392864 

 

따라하며 배우는 도커와 CI 환경 - 교보문고

컨테이너 이론부터 Travis CI, AWS 실습까지 | ◎ 기본적인 도커 클라이언트 명령어 ◎ 도커를 이용한 간단한 Node.js 애플리케이션 만들기 ◎ 단일 컨테이너를 활용한 애플리케이션 개발과 배포 ◎

www.kyobobook.co.kr

다시 공부해야지 싶어서..


1. 도커와 기존 가상화 기술(하이퍼바이저, VM)의 차이점

가상화 이전에는 한 대의 서버를 하나의 용도로만 사용한다.

남는 서버 공간을 그대로 방치하게 되는 비효율적인 면이 있었다.

하나의 호스트에 하나의 OS, 하나의 프로그램만을 운영하는 상황

 

하이퍼바이저 기반의 가상화 기술은 논리적으로 공간을 분할하여 가상 머신이라는 독립적인 가상 환경에서 서버를 이용하는 기술임. 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있게 하는 SW이고, HW를 가상화하면서 하드웨어와 각각의 가상 머신을 모니터링 하는 중간 관리자.

 

도커 컨테이너에서 구동되는 애플리케이션은 컨테이너가 제공하는 격리 기능 내부에 샌드박스가 있지만, 다른 컨테이너와 동일한 커널을 공유한다. 

도커 컨테이너는 가상머신과 비교했을 때 하이퍼바이저와 게스트 OS가 필요하지 않으므로 더 가볍고, 호스트 OS 위에 애플리케이션의 이미지만 배포하면 되지만, 가상 머신은 가상머신을 부팅하고 자원을 할당한 다음, OS부팅, 애플리케이션을 실행하는 복잡하고 무거운 작업을 수행해야함.

 

Cgroup과 네임스페이스: 컨테이너와 호스트에서 실행되는 다른 프로세스 사이에 벽을 만드는 리눅스 커널의 기능.


2. 응용 프로그램을 실행하는 데 필요한것

1. 컨테이너가 시작될 때 실행할 명령어

2. 파일 스냅숏

 

컨테이너가 생성되는 순서

1. 도커 이미지에 있는 파일 스냅숏을 컨테이너에 있는 하드디스크로 옮겨준다.

2. 도커 이미지에서 가지고 있는 명령어를 컨테이너에 전달한다.

3. 컨테이너가 실행될 때 명령어를 이용해 애플리케이션을 실행한다.


3. 기본적인 명령어

이건 너무 많으니깐 그냥 까먹으면 안되는거 몇 개만..

 

  • 컨태이너 생성하고 실행하기
[컨테이너 생성]
docker create <image-name>
[컨테이너 시작]
docker start <container id/ name>
[위에꺼 두개 합친거]
docker run <image-name>
  • 컨테이너 종료
[Graceful하게 중지]
docker stop <container-name>
[그냥 중지]
docker kill <container-name>

docker stop의 경우에는 도커 내부에서 SIGTERM 명령어를 보내서 진행 중 프로세스를 정리하는 시간을 가지고 이후에 SIGKILL을 하는 방식이다.

 

  • 실행중인 컨테이너
docker ps
  • 모든 컨테이너(중지 된것도)
docker ps -a
  • 모든 컨테이너 삭제(window shell)
docker rm $(docker ps -a -q)
  • 실행중인 컨테이너에 명령어 전달하기
docker exec <명령어>
  • 실행 중인 컨테이너에 셸 환경으로 접속하기
docker exec -it <container-id/name> sh

4. Dockerfile

나중에 더 자세히 써야지

# 베이스 이미지 명시
# <이미지 이름>:<태그> 형식으로 작성
# 태그 없으면 최신 버젼으로 받는다.
FROM baseImage

# 추가로 필요한 파일들 내려받기.
# 도커 이미지가 생성되기 전에 수행할 셸 명령어
RUN command

# 컨테이너 시작 시 실행할 명령어를 명시
CMD ["echo","hello"]
  • 이렇게 Dockerfile을 만들고 Build를 하면 이미지 생성완료
docker build ./
  • 이미지에 이름 붙여주기 
docker build -t <docker-id>/<repo-name>:<tag(version)> ./

ex)
docker build -t tlqckd0/example:0.0.1 ./
  • 이렇게 하면 컨테이너 시작시
docker run tlqckd0/example

하면 최신버전 실행된다.

 

 

오늘은 여기까지

728x90
Comments