Docker

[Docker] Linux서버에 Docker설치, Container (생성-실행-정지-삭제)

Yeji Heo 2024. 5. 1. 17:50

지난 글에서 Docker개념과 대해 정리했다.

 

[Docker] Container, Image, Docker개념을 쉽게 이해하기

1. Container항만의 화물을 옮길 때 사용하는 컨테이너를 떠올려보자. 만약 컨테이너가 없었다면?사과는 사과 상자에, 쌀은 쌀포대에 담아 옮기곤 했을 것이다.화물 종류에 따라 각기 다르게 담기

crayeji.tistory.com

이젠 Docker를 쓰면 참 편하겠구나~ 라는 생각이 들었으니, 직접 써보고싶다!!

 

+ 이 글에서는 Tomcat이라는 WAS를 이용해서 연습을 했기 때문에 자꾸 Tomcat이란 말이 나올텐데,

Tomcat에 종속적이기보다는 그냥 WAS라고 이해해주시기를! 


1. Host로 사용할 서버 생성

나는 요즘 NCloud를 쓰고 있어서 이걸로 ubuntu Linux 서버를 만들었다.

Windows나 Mac O/S를 쓰는데 로컬 서버를 만들어 테스트 한다면 VMWare, VirtualBox 등 가상화로 Linux서버를 구축해도 좋다. 

단지 Linux O/S의 서버환경이기만 하면 된다. Docker는 Linux기반 시스템에서 실행되기 때문이다.

 

이 서버에 컨테이너 엔진(컨테이너를 생성하고 관리하는 엔진)인 Docker를 설치할 것이다.

그러면 그 위에 Container를 올려서 실행환경을 쉽게 구축할 수 있게 될 것이기 때문이다.

 


2. Server접속 및 Docker 설치

클라우드 서버로 접속해놓고,  Docker.com에서 설치 방법을 찾아보자.

 

Install Docker Desktop on Ubuntu

Learn how to install, launch and upgrade Docker Desktop on Ubuntu. This quick guide will cover prerequisites, installation methods, and more.

docs.docker.com

도커 설치 전 해줘야하는 필수적으로 해줘야하는 작업이 있다고 적혀있다.

Gnome Desktop환경이 아닌 경우 gnome-terminal을 설치하는 일이다. 

 

사전작업을 마쳤다면 Docker를 설치하고 확인해보자.

아래의 1, 2, 3단계로 나뉜 다운로드 스크립트를 차근차근 입력해주면 된다. 

1 - Docker apt repository를 가져오는 것

2 - Docker를 설치하는 것

3 - 설치를 확인하는 것(컨테이너 생성, 실행)

 

아래는 3번을 통해 설치를 확인한 모습이다.

Hello from Docker!가 출력되고 있고, 이는 성공적으로 설치된 모습이라고 말해주고 있다.

더불어서 나오는 1.2.3.4steps로 도커가 동작하는 흐름을 이해하기 좋은 것 같다.


3. DockerHub에서 Image받아오기, Image로 Container 생성하기

Tomcat 실행 환경을 구축하고 싶다고 치자.

Docker를 쓰지 않았다면 Tomcat홈페이지에 들어가서 버전을 선택해서 서버에 설치해줬을 것이다.

 

하지만 이제는 서버에 Docker라는 Container Engine을 설치했기 때문에,

서버 위에 Tomcat환경을 가지고있는 컨테이너를 올려줄 수 있다. 

 

Step 1. Image 가져오기

docker image pull tomcat:9.0.74-jre8

Docker Image를 pull한다. pull해오는 장소는 Docker hub가 Default다.

(NCloud의 Container Registry등 다른 곳에서 Image를 가져올 수도 있다.)

열심히 이미지를 다운로드하는 모습

Docker hub에 가서 내가 필요한 실행환경이 담긴 컨테이너를 골라 가져오면 된다.

내가 pull한 tomcat:9.0.74-jre8은 tomcat 9.0.74버전이 담긴 컨테이너의 이미지다.


Step 2. 가져온 Image 확인

도커 이미지를 리스트업해보자.

docker image ls

맨 처음에 도커 설치 테스트했던 hello-world 이미지가 있고,

내가 pull한 tomcat도 잘 들어와있다.


Step 3. 가져온 Image로 Container생성

docker container create --name Tomcat8100 tomcat:9.0.74-jre8

Tomcat이 들어있는 컨테이너를 생성했다.

즉, 이 컨테이너는 Linux껍데기 위에 Tomcat이라는 WAS가 올라가 있는 실행 환경이다.

 

Linux껍데기라고 한 이유는 얘가 실제 O/S로서 Linux의 기능을 할 수 있는 존재는 아니기 때문이다.

얘는 Shell, Kernel등 Linux의 기능이 전혀 없으며 그래서 컨테이너가 가벼운 것이다. 

대신에 이 컨테이너는 Host Linux 서버 위에서 도커를 통해 돌아가기 때문에, Host Linux에 있는 Linux기능을 갖다 쓸 수 있다.

그 부분은 나중에 직접 사용하며 알아보겠다. 

docker container ls -a

생성된 컨테이너들를 확인하고자 컨테이너를 모두 리스트업 해봤다.

도커 설치 확인 때의 hello-world는 역시나 있다. STATUS부분을 보면 Exited로 되어있다.

즉, 설치확인 명령을 통해 이미지 가져오기, 컨테이너 생성 및 실행, 종료까지 수행한 것이다.

한편, 방금 내가 직접 생성한 Container는 create명령어를 날렸기 때문에 STATUS가 Created인 것을 확인하였다.

이처럼 Container가 create~start~exit되는 일련의 과정이 Docker Container Lifecycle이다.


 

Step 4. Container 실행

# container name으로 실행
docker container start Tomcat8100

# container id로 실행
docker container start a9c184c38f1a

내가 Create한 Container를 이제 실행시켜보자. 

Tomcat이라는 WAS가 들어있는 컨테이너이므로, WAS가 구동되고 콘솔이 찍힐 것이다.

 

+ 참고로 컨테이너는 보다시피 생성하기 아주 쉽고 삭제하기도 쉽기 때문에 

컨테이너에 문제가 생길 경우, 그 컨테이너를 삭제하고 다시 만들어버리는 '휘발성'있는 형태로 사용한다고 한다.

그래서 굳이 Container name을 붙이지 않고, 자동 부여되는 id를 쓰는 경우가 많다고 한다. 

 

# 콘솔 로그 확인
docker container logs Tomcat8100

실행 시킨 후 컨테이너의 로그를 확인해보면 

우리가 기존에 WAS구동시켰을때 보던 콘솔과 똑같이 로그가 찍힌 것을 확인할 수 있다.

컨테이너를 이용해서 WAS가 돌아가는 환경을 구축한 것이다!

컨테이너 실행시켜 WAS동작시킨 모습
eclipse에서 WAS설치해서 돌렸던 모습

 

 

docker container ls -a

다시 컨테이너를 리스트업 해보면 STATUS 또한 CREATED에서 Up ~ minutes로 바뀐 것을 확인할 수 있다.


 

Step 5. Container 정지, 삭제

이제 쓰지 않는 컨테이너를 삭제해보자

docker container rm Tomcat8100

삭제되지 않는다. 컨테이너를 start시켜 running상태이기 때문이다. 

stop후 다시 시도해서 삭제하자. 이후 다시 컨테이너를 리스트업 해보면 STATUS가 EXITED로 바뀐 것을 확인할 수 있다.

docker container stop Tomcat8100

 

물론 이미지도 삭제할 수 있다

# 이미지 리스트 확인
docker image ls

# 톰캣 컨테이너담긴 컨테이너 이미지 삭제
docker image rm tomcat:9.0.74-jre8

 


Docker를 사용해보기 위해서 아주 기본적인 실습을 해보았다

다음 글에서는 브라우저에서 컨테이너 동작 확인, port-forwarding 등에 대해 알아보겠다!!!