[Docker] 깔끔한 기본 개념

이수혁/Lee_Su_Hyeok·2023년 7월 22일
1

Docker

목록 보기
1/2
post-thumbnail
post-custom-banner

서론

프로젝트 진행 도중 Docker가 필요하게 되었다.
그러나, 대부분의 게시글들은 잡다한 정보가 혼란을 주어 Docker 이해가 쉽지 않았다.
따라서, 초심자도 이해하기 쉽도록 필요한 정보만 깔끔히 정리하고자 노력하였다.

그 어떤 포스팅도 다루지 않은 간단한 개념과 예시로 쉽게 서술하도록 할 것이다.


Docker를 사용하는 이유

다음을 가정해보자

내 컴퓨터에서 Node.js를 이용하여 소스파일을 개발하였다.

우리는 위 상황에 대해 다음을 자연스럽게 가정한다.

  • Node.js가 컴퓨터에 설치되어있음
  • 소스파일에 필요한 기타 의존성 파일들이 컴퓨터에 설정되어있음
  • 기타 소스파일의 구동에 필요한 기타 파일들이 설정되어있음

이제 이 프로젝트를 서버에서 구동해보자.
여기서 우리는 다음의 문제점을 생각해볼 수 있다.

"현재 프로젝트를 서버에서 구동하려면, 내 컴퓨터에 설치/설정 된 기타 정보들을 서버에 또 다시 그대로 설치해야겠네?"
"내 테스트 서버, 실제 서버 전부 다 이걸 매번 반복해야하나?"

이걸 쉽게 해결할 수 있는 형식이 Docker이다.
즉, 내 현재 환경을 그대로 이쁘게 포장하고 묶어서 여기저기에 둘 수 있는 것이다.

정리

도커를 정리해보면?

코딩을 하고 소스를 만지는데 도움이 되는게 아니라
완성된 코드, 환경, 세팅을 다른 컴퓨터에 옮기는데 도움이 되는 도구


개념 정리


Docker의 3 요소

Docker는 기본적으로 3단계로 구성된다고 보면 된다.

1. 소스파일

말 그대로 기본이 되는 소스파일이다.

2. Image파일

소스파일과 기타 의존성 및 설정 파일들을 함께 묶은 파일이다.
이제 이 파일은 수정할 수 없다. 하지만 여기저기에 가져가서 실행할 수 있다.

3. Container

Image 파일을 실행한다.

위의 일련의 과정은 다음과 같이 진행된다.

소스파일 -> Image파일로 변환 -> Container를 이용하여 실행


DockerHub란?

우리는 프로젝트를 GitHub에 push/pull하여 관리한다.
Docker로 생성한 image파일은 어떻게 관리할까?

Image파일은 DockerHub에 push/pull하여 관리한다.

즉, 정리하면 다음과 같이 말할 수 있다.

  1. 내 컴퓨터에서 생성한 Image파일을 push한다.
  2. 서버에서 Image파일을 pull한다. (이후 실행한다.)

이 역시도 public/private을 설정할 수 있으며,
따라서 다른 사용자의 Image파일도 쉽게 가져다 쓸 수 있다.

차이가 있다면, 플레이스토어에 올라간 apk를 쉽게 다운받아 실행하듯이,
DockerHub에 올라간 Image파일도 이처럼 쉽게 다운받아 그냥 바로 사용할 수 있다.


DockerHost

DockerHost는 Container 여러 개를 관리하는 집합이다.

포트 관리

Dockerhost와 Container 각각은 독립적으로 관리된다.
따라서 개별 포트를 지닌다.
이를 위해 우리는 포트포워딩을 진행해야한다.

포트포워딩

접속할 DockerHost와 Container를 연결한다.
docker run -p (HOST포트):(CONTAINER포트) NAME

이는 다음과 같이 포트 포워딩을 진행시킨다.
로컬(또는 접속자) -> Host포트 -> Container포트 -> 웹서버

호스트-컨테이너 FileSystem 연동

컨테이너의 직접적인 파일 수정은 Docker의 취지와는 조금 거리가 있다.
(IMAGE를 통한 쉬운 생성, 삭제가 안되기 때문)

대신, HOST 파일이 컨테이너에 연동되게 한다면
추후 컨테이너 관리에 전혀 문제도 없고, 목적도 달성한다.

profile
Back-End( Spring Boot ) 기반 FullStack 개발자
post-custom-banner

0개의 댓글