개인 프로젝트/환경설정

Docker 에 대해서 ....

Hx2y98 2025. 1. 16. 02:06

프로젝트를 해보면서 처음 Docker을 써보니.. 도커에 대한 이해 필요성을 더 느끼게 되었다. 

(하다보니 서버 설정 문제가 조금씩 나온다..)

 

때문에 오늘은 이에 도커의 대한 이해를 위해 도커를 조금더.. 공부하기로 하였다. 

(진즉에 그냥 이거먼저할껄..)

 

Docker 란? 

 

2013년 Pycon US 2013, "리눅스 컨테이너의 미래" 라는 라이트닝 토크에서 솔로몬 하이크가 처음 소개하였다. 

 

Go 언어로 개발되고 있으며, DockerCon 2014 에서 1.0 버전 발표 이후 , 지속적으로 업데이트가 되고 있다. 

 

도커의 기능 

  • 리눅스 상에서 컨테이너 방식으로 프로세스를 격리해서 실행하고 관리할 수 있도록 도와준다.
  • 계층화된 파일 시스템에 기반해 효율적으로 [이미지(프로세스 실행 환경)]을 구축할 수 있도록 한다. 
  • 해당 [이미지]를 기반으로 [컨테이너]를 실행할 수 있으며, 다시 특정 컨테이너의 상태를 변경해 이미지로 만들 수 있다. 
  • 이렇게 만들어진 이미지는 파일로 보관하거나 원격 저장소를 사용해 쉽게 공유할 수 있으며 , 도커만 설치되어 있다면 언제 어디서나 컨테이너로 실행하는 것이 가능하다. 

 

왜 도커 컨테이너를 활용하는가? 

서버를 구성하고 운영하다보면 시간의 흐름에 따라 또한 각 서버에 환경이 다름으로 인해 , 아무리 오래된 서버 운영자라고 하더라도 발생하는 문제들을 마음먹은대로 해결하기 어렵다고 한다. 

이는 운영자의 역량과는 별개로 각 서버마다의 운영 기록이 다르기 때문이다. 

또한 같은 일을 하는 두 서버가 있다고 하더라도 , A 서버는 한달전에 구성하였고 B 서버는 막 구성하였다면 , 

운영체제부터 컴파일러 , 설치된 패키지까지 완벽하게 같기는 쉽지 않다. 

 

이러한 차이점들은 장애를 일으키기 마련인데 , "A서버는 잘되는데 , B서버는 왜 죽었지?" 같은 같은 서버더라도 한 쪽만 문제가 발생하는 경우가 있는 것이다. 

이와 같이 서로 모양이 다른 서버들이 존재하는 상황을 [눈송이 서버 (Snowflakes Server)] 이라고도 한다. 

 

 

서버 구축에 시간의 차이가 있는 서버들을 기반으로 하는 각각 웹 서비스를 운영하며 한 쪽 서버에서 문제가 발생하였을  때 

만약에 정상적인 서버를 구축한 사람이 팀을 옮겼거나 , 퇴사를 했을 경우 새로 담당하게 된 서버의 운영자는 이를 확인하고 문제점을 찾는데 상당한 시간이 소요 되게 된다. 

문제를 일으키는 작은 차이는 각 서버의 구축 초기에는 큰 문제가 없을 수도 있지만 , 시간이 흐르며 눈송이 처럼 문제가 커지기 마련이기 때문이다.  

 

그렇다면 지금까지 이러한 문제점들은 어떻게 관리하였을까 ? 

 

이런 문제점을 해결하고자 하는 방안들은 지속적으로 존재해 왔었다. 

대표적인 방법은 서버의 운영 기록을 저장해두는 것이다. 

서버에서 어떤 작업을 실행할 때마다 사내 문서 도구에 기록한다거나 , 여러 서버에 동시 접속하여 한꺼번에 명령을 실행하는 tmux-xpanes 같은 도구를 사용하기도 한다. 

 

하지만 문서에 적힌 대로 하여도 잘 되지 않는 경우가 허다하고 (그때는 맞지만 지금은 안됨) , 여러 서버를 한 번에 조작할 때에도 특정 서버 하나만 문제를 일으키는 경우가 허다하다.

때문에 이러한 서버의 운영기록을 코드화 하려는 시도들이 등장하는데 Vagrant, Chef, Puppet, Ansible 등의 도구들이 이러한 운영 기록을 재현하려는 의도가 담겨있다. 

 

도커에서 사용되는 Dockerfile 또한 이런 "서버 운영 기록을 코드화" 한 것이다. 

 

이 도커 파일로 이미지를 빌드하는데 , 도커 파일이  서버 운용 기록이라면 , 도커 이미지는 운영 기록을 실행할 시점이라고 한다. 

 

  • 도커 파일 = 서버 운영 기록 코드화
  • 도커 이미지 = 도커 파일 + 실행 시점

그 순간을 이미지로 만들어두는 것과 같다.

 

예를 들어 

개발자가 Ansible 같은 도구를 사용하여 예전에 구성해두었던 서버를 신규로 구성한다고 하였을때 , 두 서버에 대해서 1년의 차이가 생기지만, 

도커 파일로 이미지를 만들어두고, 해당 이미지를 이용하여 컨테이너를 새로운 서버에 배포한다면 두 서버의 서버 구성 및 설치 시점은 차이가 없는 것이다. 

 

출처 : 44BITS 블로그

 

이러한 도커의 특성 때문에 서버를 항상 같은 상태로 관리가 가능하게 된다.  이러한 특징은 유지보수의 용의성, 빠른배포, 버전 관리 및 확장성의 용의점이 존재하게 된다. 

 

도커 이미지(Docker Image) 

이미지는 가상머신(VM)에서 사용하는 이미지와 비슷한 역할을 한다. 

간략하게 설명하자면 , " 어떤 어플리케이션을 실행하기 위한 환경" 이라고 할 수 있다. 

환경 = 파일들의 집합 이며 , 도커에서는 어플리케이션을 실행하기 위한 파일들을 모아두고 , 어플리케이션과 함께 이미지로 만들 수 있다. 또한 이 이미지를 기반으로 바로 배포가 가능하다. 

 

도커의 이미지를 레지스트리 상에 올리고 받을 수 있다. 

# 이미지를 풀 받는 명령어
docker pull <IMAGE ID>

 

이미지 이름은 : 을 구분자로 이름과 태크로 구분된다. 태그를 지정하지 않으면 latest 가 사용된다. 도커는 먼저 pull 하고자 하는 이미지를 로컬에서 찾아본 후, 찾을 수 없다면, 도커 공식 저장소에서 찾아온다.  저장소에 해당하는 이미지가 존재한다면 이미지를 풀(pull) 받아온다. 

 

한가지 재밌는  특징이라고 한다면 도커는 install이나 download 같은 명령어 대신, pull 이라는 명령어를 사용한다. 이미지를 업로드 할때는 push, 새로운 이미지를 생성할 때는 commit , 이미지 차이를 확인할 때는 diff 라는 명령어를 사용하는데 , 이러한 명령어는 Git에서 자주 사용되는 명령어들로 개발자들에게 매우 친숙한 명령어 들이다. 

 

도커 허브(Docker Hub) - 공식 이미지 레지스트리 

도커 허브는 도커에서 제공하는 이미지 호스팅 서비스 이다. 

# 해당 명령어를 이용하여 클라이언트에 지정된 레지스트리 주소를 확인해 볼 수 있다. 
docker info | grep Registry
Registry: https://hub.docker.com/

 

도커 허브에는 많은 이미지들이 등록되어 있으며 , 이러한 이미지들은 도커 사에서 공식적으로 제공하는 이미지와 사용자들이 직접 만들어 올린 이미지들로 나누어 진다. 

 

컨테이너(Container) - 격리된 환경에서 실행되는 프로세스

 

앞서 이미지는 어떤 환경이 구성되어있는 상태를 저장해둔 파일 집합이라 한다면 , 컨테이너는 이러한 이미지 위에서 특정한 프로세스를 격리시켜 실행시킨 것이라 할 수 있다. 

 

컨테이너는 docker run 을 통해 실행 할 수 있다. 

# 도커 실행 명령어
docker run <이미지이름:태그>

# 재실행 명령어
docker restart <컨테이너 ID>

 

이미지는 가상머신 이미지와 비슷하다. 하지만 가상머신에서는 저장된 이미지를 기반으로 가상머신을 특정 상태를 복원한다. 

컨테이너는 가상머신처럼 보이지만 가상머신은 아니다. 

가상머신이 컴퓨터라면 , 컨테이너는 단지 [격리된 프로세스]에 불과하다. 

 

도커와 버전 관리 시스템

이미지와 컨테이너는 다르다. 때문에 컨테이너에 무엇을 하던간에 , 이미지에는 아무런 변화도 생기지 않는다. 

윈도우 CD를 이용하여 윈도우를 설치한다고 , 설치된 윈도우 CD에는 아무런 변화도 생기지 않는 것과 같은 이치이다. 

이미지는 어디까지나 고정되어 있고 , 불변한 저장 매체이다. 

 

이미지는 불변이지만 , 대신 도코에선느 이 이미지 위에 무언가를 더해서 새로운 이미지를 만들어내는 일이 가능하다. 

이미지를 기반으로 만들어진 [컨테이너]는 변경 가능하기 때문이다. 

도커의 중요한 특징은 계층화된 파일 시스템을 사용한다는 점이다. 특정한 이미지로 부터 생성된 컨테이너에 어떤 변경사항을 더하고 (파일을 변경하고) , 이 변경된 상태를 새로운 이미지로 만들어내는 것이 가능하다. 도커의 모든 이미지는 기본적으로 이 원리로 만들어진다. 

 


 

여기까지 도커에 대한 내용이였고 , 다음에는 도커 허브에 내가 작업한 것들을 올려보는 것을 해보도록 해야겠다... 

 

 

 

출처 : 

https://www.44bits.io/ko/post/easy-deploy-with-docker#%EB%8F%84%EC%BB%A4%EC%99%80-%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC-%EC%8B%9C%EC%8A%A4%ED%85%9C

 

도커(Docker) 입문편: 컨테이너 기초부터 서버 배포까지

도커(Docker)는 2013년 등장한 컨테이너 기반 가상화 도구입니다. 도커를 사용하면 컨테이너를 쉽게 관리할 수 있으며, 이미지를 만들어 외부 서버에 배포하는 것도 가능합니다. 이 글은 도커를 시

www.44bits.io

 

https://www.44bits.io/ko/post/why-should-i-use-docker-container

 

왜 굳이 도커(컨테이너)를 써야 하나요? - 컨테이너를 사용해야 하는 이유

컨테이너는 서버 애플리케이션을 배포하고 서버를 운영하는 표준적인 기술이 되어가고 있습니다. 하지만 처음 사용해본다면 그 장점이 잘 와닿지 않을 수도 있습니다. 왜 굳이 도커 컨테이너를

www.44bits.io

 

 

 

 

'개인 프로젝트 > 환경설정' 카테고리의 다른 글

GitHub 연결  (2) 2024.12.21
Docker -리액트 설치 및 환경설정  (0) 2024.12.21
Docker 컨테이너 생성 및 설정  (0) 2024.12.21
Docker 설치  (0) 2024.12.20