본문 바로가기
개발/docker

[Docker] 그래서 Docker 가 뭔데 ?

by 콰이엇 2024. 4. 23.
💡 이 문서는 도커의 원리, 탄생 배경을 설명하기 보다는 도커라는 도구를 이해하기 쉽게 풀어쓴 글이다.

1. 도커 (Docker) 란?

컨테이너 기반의 오픈소스 가상화 플랫폼

 

도커 컨테이너는 가상의 공간을 만들어서 호스트 OS와 독립된 환경에서 프로세스들이 동작하는 기술이다.

즉, 애플리케이션이 작동하기 위한 환경들을 독립적으로 만들어 줄 수 있는 도구인 것이다.

도커는 이러한 기술을 통해 로컬 환경에서 서버로 환경을 쉽게 이동하는 등의 막강한 이점을 가진다.

 

1-1. 컨테이너 (Container)

격리된 공간에서 프로세스가 동작하는 기술

 

 먼저 “컨테이너”라는 단어를 머리 속으로 생각해보자. 그리고 어떤 물류 창고에 여러 컨테이너가 있다고 가정해보자. 한 컨테이너가 바나나로 가득차 있는데, 이 바나나들이 상하게 되었을 때 다른 컨테이너의 바나나에 영향을 미칠 수 있을까? 컨테이너의 내용물은 물리적으로 서로 분리되어 있으므로 영향을 미치기 어려울 것이다.

 

 이처럼 한 컨테이너의 환경은 다른 컨테이너의 환경에 영향을 미치지 않는다. 즉 다른 컨테이너에 영향을 미치지 않고, 하나의 애플리케이션을 동작하기 위한 독립적인 개발 환경으로 만들 수 있다는 뜻이다. 예를 들면, Spring Framework를 사용하는 한 컨테이너가 있어도, 다른 Spring Framework 환경에 영향을 미치지 않는다. 해당 컨테이너의 애플리케이션을 실행하기 위한 프레임워크 또는 라이브러리 등의 개발 환경을 독립적으로 만들어 줄 수 있는 것이다!

 

1-2. 이미지 (Image)

컨테이너를 생성하기 위한 일종의 템플릿

 

 우리는 일반적으로 웹 서버, 데이터베이스 등 공통적인 플랫폼을 활용하여 개발하고 있다. Spring Framework, MySQL, NGINX, Jenkins 등 각 목적과 기능에 따라 사용하는 플랫폼이 있을 것이다. 이러한 도구들을 매번 컨테이너에 일일이 집어 넣는 작업을 해야만 할까?

 

 다행히 이를 방지하기 위해 이미지라는 템플릿이 존재한다. 이미지는 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있다. 클래스와 인스턴스 개념을 설명할 때 흔히 붕어빵과 붕어빵 틀을 예로 많이 사용한다. 이를 빗대어 설명하면 이미지는 붕어빵 틀, 컨테이너는 붕어빵이 되는 것이다.

 

 이러한 이미지는 Dockerfile 이라는 파일을 통해 생성할 수 있다. 붕어빵 틀은 누구나 만들 수 있지만, 일반적으로 흔히 사용하는 붕어빵 틀을 사용하는 것처럼 DockerHub 라는 곳에 배포되어 있는 이미지를 사용하게 된다.

 

2. 설치하고 실행하기

2-1. Docker Desktop 다운로드

운영체제에 맞는 파일을 다운로드하고 설치하면 정상적으로 이용할 수 있다.

Overview of Docker Desktop

 

Overview of Docker Desktop

Explore more of Docker Desktop, what it has to offer, and its key features. Take the next step by downloading or find additional resources.

docs.docker.com

 

일반적으로 bash 창을 통해 컨테이너 상태를 확인하지만, docker desktop을 통해 상태를 확인할 수도 있다.

 

2-2. 컨테이너 실행하기

컨테이너는 아주 쉽고 빠르게 생성하고 실행 해볼 수 있다!

백엔드 개발에 빠질 수 없는 데이터베이스 컨테이너를 한 번 만들어 보자!

여기서는 MySQL 데이터베이스 컨테이너를 생성해볼 것이다!

$ docker run --name mysql-local -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=MYDB -d -p 3306:3306 mysql:8.0

명령어를 하나씩 이해해보자.

$ docker run (<옵션>) <이미지 식별자> (<명령어>) (<인자>)

run 명령어를 사용하여 컨테이너 생성과 동시에 실행이 가능하다.

 

--name 컨테이너 이름 설정
-e 컨테이너 내에서 사용할 환경변수 설정 (environment)
-d detached mode, 백그라운드로 실행하여 실행 후 sh에 입력이 가능해진다.
-p 호스트와 컨테이너의 포트를 연결 (포워딩)
-v 호스트와 컨테이너의 디렉토리를 연결 (마운트)
-rm 프로세스 종료 시 컨테이너 제거
-it -i 와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
-link 컨테이너 연결 [컨테이너명:별칭]

몇 번 사용해보면 직관적으로 와닿을 만한 명령어들로 이루어져있다.

다른 명령어도 많지만, 위에 나열되어 있는 표의 명령어들을 흔히 사용한다.

 

2-3. 컨테이너 확인하기

간단한 명령어로 현재 만들어진 컨테이너들을 확인할 수 있다.

$ docker ps

 

2-4. 컨테이너에서 명령어 입력하기

컨테이너 안에 들어가서 shell 명령어를 입력할 수도 있다.

docker exec -it mysql-local bash

여기서 mysql-local 은 위에서 확인할 수 있듯이 컨테이너 이름이다!

 

2-5. MySQL 접속하기

이를 통해, 로컬에서 MySQL 컨테이너를 생성할 수 있고, MySQL Workbench 등으로 접속할 수도 있다!

이를 통해 프로세스를 독립적인 공간에 실행하지만, 적절히 접속해서 사용할 수 있다는 것을 알 수 있다!

 

3. 마치며

 이를 통해 간단히 docker container를 생성하고 실행해보았다. docker는 가벼운 컨테이너 환경에 의한 강력한 장점들이 많이 있으니 사용하면서, 그리고 찾아보면서 이해해보면 좋을 것 같다!

 

 지금은 하나의 컨테이너를 실행하는 데에 그쳤지만, 여러 애플리케이션을 실행하여 서로 통신할 수도 있다. 즉, 여러 개의 컨테이너를 실행하여 서로가 영향을 받지 않고 프로세스를 실행할 수 있다는 뜻이다!

 

 다음 글은 Dockerfile을 통해 이미지를 빌드하고, 이를 활용하여 컨테이너를 만들어 볼 것이다. 그리고, 여러 컨테이너를 동시에 띄우는 docker-compose 를 간단히 소개할 예정이다. 이 글을 통해 docker에 대해 쉽게 이해하는 시간이 되었으면 좋겠다 :)

 

참고자료

 

초보를 위한 도커 안내서 - 도커란 무엇인가?

 

초보를 위한 도커 안내서 - 도커란 무엇인가?

도커를 처음 접하는 시스템 관리자나 서버 개발자를 대상으로 도커 전반에 대해 얕고 넓은 지식을 담고 있습니다. 도커가 등장한 배경과 도커의 역사, 그리고 도커의 핵심 개념인 컨테이너와 이

subicura.com

초보를 위한 도커 안내서 - 설치하고 컨테이너 실행하기

 

초보를 위한 도커 안내서 - 설치하고 컨테이너 실행하기

초보를 위한 도커 안내서 2번째 글입니다. 도커의 기본적인 내용을 이야기 했던 첫번째 글에 이어 실제로 도커를 설치하고 컨테이너를 실행하면서 도커 명령어를 알아봅니다. 도커를 처음 접하

subicura.com

docker run 커맨드 사용법

 

docker run 커맨드 사용법

Engineering Blog by Dale Seo

www.daleseo.com