본문 바로가기

DevOps/Docker

<Docker> 도커 컨테이너의 기본 사용법 : Run

1. 생성 및 실행

* 컨테이너 생애주기

 - 컨테이너를 생성하고 삭제하며 실행하고 정지시키는 도커 커맨드에 대해 알아보자. 보통은 개별적으로 docker create (또는 docker container create), docker start (또는 docker container start), docker pull (또는 docker image pull) 명령어를 사용하지만, 일반적으로 이러한 기능을 한꺼번에 수행할 수 있는 docker run 명령어를 사용한다.

 

 

 - 컨테이너를 폐기할 때에는 실행 중인 컨테이너를 삭제할 수 없으므로 먼저 정지시켜야 한다. 컨테이너를 정지시키려면 docker stop (또는 docker container stop) 명령어를 사용하고, 컨테이너를 삭제하려면 docker rm (또는 docker container rm) 명령어를 사용한다.

 - 다시 컨테이너 실행으로 돌아와서 docker run에 대해 알아보자.

 

docker run [옵션] 이미지 [인자]

 

 - docker run 명령어는 주로 위와 같은 형식으로 사용되며, 주요 옵션은 다음과 같다.

 

옵션 내용
—name <컨테이너이름> 컨테이너 이름 지정
-p <호스트 포트번호>:<컨테이너 포트번호> 포트번호 지정
-v <호스트 디스크>:<컨테이너 디렉토리> 볼륨 마운트
-net=<네트워크 이름> 컨테이너를 네트워크에 연결
-e <환경변수 이름>=<값> 환경변수 설정
-d 백그라운드로 실행
-i 컨테이너에 터미널을 연결
-t 특수 키를 사용 가능하도록 함

 

 - -d는 컨테이너를 백그라운드로 실행시키는 옵션이다. -i와 -t는 컨테이너 내부의 터미널에 접속하기 위해 사용하는 옵션이다. -d를 붙이지 않고 컨테이너를 실행시키면 컨테이너가 프로그램의 실행을 마칠 때까지 터미널의 제어를 차지하므로 명령어를 입력할 수 없는 상태가 된다. 또한 -i와 -t 옵션을 붙이지 않으면 컨테이너 안의 파일 시스템에 접근할 수 없다.

 - 이러한 옵션들은 모두 필수적으로 사용해야 하는 것은 아니다. 컨테이너는 "한 번만 실행되는 컨테이너"와 "데몬" 형태로 동작하는 컨테이너로 구분된다. 한 번만 실행되는 컨테이너는 실행된 후 바로 종료되므로 컨테이너가 터미널의 제어를 차지하더라도 괜찮다. 그러나 데몬처럼 지속적으로 실행되는 프로그램은 자동으로 종료되지 않으므로 터미널의 제어를 넘기지 않는 것이 좋다. 참고로 관례적으로 항상 백그라운드에서 동작하는 프로그램을 데몬(demon)이라고 한다.

 - 또한 docker ps (또는 docker container ls) 명령어는 자주 사용하는 커맨드 중 하나다. 컨테이너 목록을 출력한다. -a 옵션을 추가하면 정지 상태의 컨테이너까지 포함하여 출력한다.

 

docker ps [옵션]

 

 - 각 컨테이너를 구분하는 무작위 값인 "CONTAINER ID", 컨테이너를 만들 때 사용한 이미지 이름인 "IMAGE", 컨테이너 상태를 표시하는 "STATUS", 컨테이너 이름인 "NAMES" 등의 정보가 표시된다.

 

* 실습

 - 위에서 배운 내용을 아파치 컨테이너를 실행해보면서 실습해보자. 아파치는 웹 서버 기능을 제공하는 소프트웨어이다. 먼저, 아파치 이미지(httpd)를 사용하여 apa000ex1이라는 이름의 컨테이너를 생성하고 실행하는 명령어를 입력해보자.

 

docker run --name apa000ex1 -d httpd

 

 - 위 명령어를 입력하면 이미지를 내려받고 컨테이너가 생성되고 실행된다. docker ps 명령어로 실행 중인지 확인해보자.

 

docker ps

 

 - 위 명령어를 입력하면 컨테이너의 상태와 정보가 출력될 것이다. 이제 컨테이너를 종료해보자.

 

docker stop apa000ex1
docker ps

 

 - 종료 후 docker ps 명령어를 입력해보면 컨테이너 목록에 나타나지 않는다. 정상적으로 종료된 것이다. -a 옵션을 추가하면 "STATUS"에 종료되었다는 정보가 출력된다.

 - 마지막으로 컨테이너를 삭제하는 명령어이다.

 

docker rm apa000ex1
docker ps -a

 

 - 위 명령어로 완전히 삭제하고 docker ps -a를 입력하면 컨테이너가 완전히 삭제되었음을 확인할 수 있다.

 

 

2. 확인 및 삭제

* 컨테이너 통신

 - 위에서 아파치 웹 서버를 컨테이너를 통해 실행해보았다. 그러나 우리는 웹 브라우저를 통해 사이트의 동작을 확인하고 싶다. 기본적으로 컨테이너는 외부에서 접근할 수 없는 상태로 실행된다.

 - 웹 브라우저를 통해 컨테이너에 접근하려면 외부와 접속하기 위한 설정이 필요하다. 이를 위해 포트를 설정한다. 아파치는 서버에서 미리 정해둔 포트 80번에서 접근을 기다린다. 따라서 우리는 컨테이너를 실행 중인 물리적 컴퓨터가 외부의 접근을 받아 전달해주도록 설정해야 한다.



 - 컨테이너를 실행 중인 컴퓨터(호스트)의 임의의 포트와 컨테이너의 80번 포트를 연결한다. 이 설정은 -p 옵션을 사용하며, 호스트의 포트 번호와 컨테이너의 포트 번호를 콜론으로 연결하여 작성한다. 그리고 다시 아파치 서버를 실행해보도록 하자.

 

docker run --name apa000ex2 -d -p 8080:80 httpd
docker ps

 

 - 위 명령어를 입력하고 docker ps 명령어로 확인해보면 포트 정보(PORTS)가 출력된다. 이제 웹 브라우저에서 http://localhost:8080에 접속해보면 아파치의 초기화면이 출력될 것이다.

 - 확인했다면 컨테이너를 삭제하자.

 

docker stop apa000ex2
docker rm apa000ex2
docker ps

 

 

* 이미지 삭제

 - 아파치 이외에도 여러 컨테이너를 실행하다보면 이미지가 늘어나게 된다. 이미지가 늘어나면 스토리지 용량을 차지하므로 필요하지 않은 이미지는 정리해주는 것이 좋다.

 - 이미지를 삭제하기 전에 실행한 컨테이너가 남아있는지 확인해야한다. 실행 중인 컨테이너가 있으면 이미지를 삭제할 수 없다. 따라서 docker ps -a와 같이 컨테이너 목록을 출력하여 확인하고 컨테이너를 먼저 종료하고 삭제해야 한다.

Copy code
docker image ls


 - 위 명령어를 통해 이미지 목록과 해당 이미지의 태그(버전 정보), 이미지 ID 등의 정보를 확인할 수 있다.

 - 이미지를 삭제하기 위해 다음 명령어를 사용한다.

Copy code
docker image rm httpd


 - 위 명령어로 이미지를 삭제할 수 있다. 여러 버전의 이미지를 삭제해야 한다면 이미지 ID를 사용하거나 myimage:1.5 또는 myimage:2와 같이 이미지 이름에 버전을 명시하여 특정할 수 있다.

 

 

 

 

 

 

 

 


참고

 

 해당 포스팅은 그림과 실습으로 배우는 도커&쿠버네티스를 읽고 개인적으로 필요한 내용을 추가 및 정리한 글입니다.

 

 

 

그림과 실습으로 배우는 도커 & 쿠버네티스 - YES24

컨테이너나 도커를 도통 이해하기 어려운 분들을 위한 본격 도커 입문서!이 책은 컨테이너 기술이 어렵게 느껴지는 엔지니어나 백엔드 기술에 자신이 없는 분들을 위한 도커 입문서다. 자세한

www.yes24.com