Docker

2022. 7. 20. 21:01기타

귀여운 도커 아이콘..

Docker란?

도커란 컨테이너 가상화 기술을 사용하여 응용프로그램을 더 쉽게 배포, 실행 할 수 있도록 설계된 툴이며 컨테이너 기반의 기술 및 오픈소스라는 특징을 갖고있습니다.

 

서버에서의 컨테이너 기술은 자신이 필요한 프로그램 혹은 실행환경 등 여러 리소스들을 한곳에 모아놓고 관리 할 수 있습니다. 

ex) 카카오톡을 예로 들자면, 카카오 톡을 실행하기 위한 파일, 시스템 설정, 라이브러리 등의 종속성을 도커 컨테이너에 저장하고 실행 후 이를 카카오톡에서 필요로 한다면 컨테이너에서 가져가는 방식.

 

가상화 기술

하나의 하드웨어에 여러가지 OS 혹은 프로그램을 실행하여 보다 하드웨어의 자원을 효율적으로 사용 할 수 있는 기술

허나 가상화 기술은 각각 Guest OS를 갖고 있어야 하는 제약적인 부분 때문에 느리다.

 

도커 vs VM

1. 도커는 하나의 엔진에서 OS 혹은 여러 환경 부분을 담당하기 때문에 애플리케이션 마다 게스트 OS를 가질 필요가 없음.

2. 도커는 같은 호스트의 다른 컨테이너와 커널을 공유한다.

3. 도커는 컨테이너 부팅시 OS가 이미 시작된 상태이기 때문에 부팅 시간이 월등히 빠르다

4. VM은 이미지 사이즈가 매우 크고, 시작 시간이 느리며, VM 간의 환경이 불일치 하여 불편하다. 

도커를 써야 하는 이유?

프로그램을 실행하기 위한 과정에서 서로 다른 OS 혹은 환경적인 문제를 최소화 하고 설치 및 배포를 쉽게 할 수 있습니다.

 

 

도커 실행법

1. 도커 CLI에 커맨드 입력

2. 도커 서버 ( 도커 Daemon )이 커맨드를 받아 그것에 따라 이미지 생성 혹은 컨테이너 실행 등 모든 작업을 수행

 

초간단 예제)

1. docker run hello-world

 

로컬 에서 해당 명령어를 실행하게되면 백그라운드에서 돌고 있던 도커 서버가 로컬 내의 이미지 Cache 저장소에 있는지 먼저 확인하고 있다면 run을 시키고 없다면 도커 허브로 가서 hello-world라는 이미지를 가져와 실행 시킨다.

 

캐시 저장소에 없다 ( Unable to find image '이미지 이름' locally )

즉 해당 명령어를 한번 더 실행하게 되면 hello-world가 위 문구 없이 실행된다 ( 로컬 이미지 저장소에 저장 되었기 때문 )

 

 

도커 명령어

docker {명령어}

- create: 도커 이미지를 생성한다. ( 생성 만 ),

- start {컨테이너 ID}: 도커 이미지를 구동 한다.

- run {이미지 이름}: 이미지를 실행하여 컨테이너로 구동한다. ( 없으면 생성 )

- ps: 현재 구동중인 컨테이너의 목록을 조회 ( process status )  -a 커맨드 추가 시 구동중이지 않은 컨테이너도 조회함

- stop {이미지 이름 or 컨테이너 ID}: 구동중인 특정 컨테이너를 중지 시킨다. ( 종료 프로세스를 기다림 )

- kill {이미지 이름 or 컨테이너 ID}: 구동중인 특정 컨테이너를 중지 시킨다 ( 기다림 없이 바로 죽임 )

- rm {이미지 이름 or 컨테이너 ID}: 컨테이너 삭제 ( 실행중이면 중지 후 삭제 )

- rm `docker ps -a -q` : 모든 컨테이너 삭제

- exec {이미지 이름 or 컨테이너 ID} {명령어}: 이미 실행중인 컨테이너에 명령어를 전달함 (run은 새로 만들어서 실행), 대부분 -it 명령어와 함께 사용 ( -it: 지속 해서 명령어를 이어 나가는 커맨드 옵션 ) 

 

예제)

 

create & start

아래 생긴 문자열이 해당 컨테이너의 ID 값이다.
위에서 발급된 ID 값으로 실행한 결과

Tip

1. -a 커맨드를 꼭 붙여주어야 한다 -a는 attech로써 실행 결과들을 화면에 표출해주는 역할을 한다

2. 컨테이너 ID 값의 앞부분만 어느정도 붙여줘도 실행 가능하다.

 

run & stop

alpine 컨테이너를 실행하고 localhost의 핑값을 확인하기 위해 ping 커맨드 추가

docker ps 를 통해 실행중인 컨테이너의 id 값을 알아 내고 stop 명령어로 정지 시킴으로 써 계속 진행중이던

핑 체크가 중단되는 모습을 볼 수 있다.

 

exec

실행중인 컨테이너에서 추가적인 명령어가 실행되는 것을 볼 수 있다.

 

Dockerfile

- 도커 이미지를 만들기 위한 설정 파일이며, 컨테이너가 어떻게 행동해야 하는지 설정을 정의 해주는 곳

 

도커 파일 만드는 순서

1. 베이스 이미지 명시 ( 파일 스냅샷 / 베이스 이미지: 이미지의 기반이 되는 부분 OS 혹은 JVM 등)

2. 추가적으로 필요한 파일을 다운 받기 위한 명령어 명시 ( 파일 스냅샷 )

3. 컨테이너 시작시 실행될 명령어를 명시

 

완성된 도커 파일은

-> 도커 클라이언트 -> 도커 서버 -> 이미지 순으로 실행된다.

즉 도커 파일에 입력된 것이 도커 클라에 전달되어 서버가 인식하게 하여야하는데 이를 위해

도커 빌드 명령어인 docker build ./ 를 실행하면 된다

 

간단하게 docker에 대해서와 사용법을 알아봤다. 

시작전에 막연한 두려움이 있었지만 막상 해보니 별거 아니었다. 

뭐든지 어려울 것 같다고 걱정하지말고 일단 해보자! 

 

'기타' 카테고리의 다른 글

AWS 비용 최적화 여정  (1) 2024.03.18
HTTP  (0) 2023.06.04
Redis  (1) 2023.01.18