본문 바로가기

Docker

[Docker]도커에 대해서 + 도커관련 명령어

도커(Docker)Container 기반의 오픈소스 가상화 플랫폼이다.

Container를 관리하는 플랫폼으로 다양한 프로그램, 실행 환경을 Container로 추상화 하고, 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다.

 

이는 가상머신과 비슷하며 하나의 프로그램에서 나오는 컨테이너는 각각 하나의 운영체제라 생각하면 된다.

 

Image?

컨테이너의 실행에 필요한 파일과 설정값 등을 포함하고 있는 것.

컨테이너는 이미지를 실행하여 나온 프로세스라고 생각해 본다면 이미지는 프로그램 이라고 생각할 수 있다.

 

Container?

운영체제를 기반으로 한 소프트웨어는 실행을 위해 OS와 소프트웨어가 사용하는 동적 Library에 대해 의존성을 갖는다.

즉, 소프트웨어가 실행되기 위해 OS와 Library를 포함하고, 소프트웨어가 필요로 하는 파일 등으로 구성된 실행 환경이 필요하다.

 

하지만, 두개의 소프트웨어가 하나의 동일한 Library를 사용하면 문제가 발생할 수 있다. 이럴때 소프트웨어를 위한 시스템을 각각 준비해야 하는데 이 부분에 대해서도 비용 문제가 발생할 수 있다.

 

이를 해결하기 위한 것이 바로 Container이다. 컨테이너는 개별 소프트웨어 실행환경을 독립적으로 운용할 수 있도록 도와준다.

 

프로그램(정적인 로직(로직 덩어리), 디스크에서 실행

1 : 프로그램을 하나만 설치하면 : 이미지

 

프로세스(동적인 로직, 메모리에서 실행)

N : N개를 실행한다. : 컨테이너

 

 

Images

docker run hello-world

hello-world라는 이미지(프로그램)을 실행하라. 라는 의미이다.

 

먼저 내 PC에 hello-world가 설치되어 있는지 체크한다.

그 다음 docker hub라는 곳에서 있는지 확인한다.(휴대폰의 app store같은 느낌이다.) -> 이때는 pull이 필요하다.

 

그러면 내 PC에 이미지가 얼마나 있는지 조회해보자.

docker images

 

이미지를 삭제해보자.

docker rmi 이미지명

 

Container

하나의 이미지에서 나오는 프로세스들을 의미하며 각 컨테이너는 하나의 OS라고 생각하면 된다.

각각의 컨테이너는 이미지와 통신이 가능하지만, 컨테이너끼리 통신이 불가능하며 독립적이다.

 

현재 docker에서 실행되고 있는 컨테이너(프로세스)를 조회해보자.

docker ps (옵션)-a : 지금까지 실행된 컨테이너 조회옵션

 

docker의 컨테이너는 다운로드 할 수 없다.

 

linux에서도 같은 명령어로 프로세스를 확인할 수 있다.

 

ps 명령어로 출력된 ID를 사용해 다양한 기능을 확인해보자.

 

실행되었던 컨테이너의 로그를 확인해보자. 실행되었을 때 그대로 출력된다.

docker logs 컨테이너 ID or NAMES

 

실행되었던 컨테이너의 상태를 확인해보자.

docker inspect 컨테이너 ID or NAMES

컨테이너의 자세한 정보를 확인할 수 있다.

 

마지막으로 ps -a 명령어로 남아있는 컨테이너들을 삭제해보자.

docker rm 컨테이너 ID or NAMES

 

만약 컨테이너가 여러개 있을 경우에는 하나하나씩 삭제하기 여간 귀찮은 일이 아니다. 한번에 삭제하는 방법을 찾아보았다.

docker container prune

 

docker의 중지된 컨테이너를 모두 삭제하는 명령어로 hello-world의 컨테이너를 모두 삭제한다.

 

Docker Container 내부

Container 내부를 조작해보자.

docker exec (-it : 복잡한 명령어일 경우) 컨테이너명 ls
docker exec -it 컨테이너명 yum install mysql... (예시)

컨테이너 내부를 조작하기 위해서 exec 명령어가 필요하다. 기존 linux와 같은 명령어를 사용할 수 있으며 이는 linux자체가 아닌 docker의 container 내부를 조작하는 것이다.

 

그러면 Docker Container의 내부 bash도 존재하지 않을까? docker 내부의 bash를 사용해보자.

docker exec -it nginx /bin/bash

 

현재 bash의 위치는 window -> vitualbox(CentOS) -> Docker -> Container에 위치한다.