To Do
API를 활용한 React Side Project가 끝이 났다. 개인 일정 때문에, 초기에 잡았던 사이드 프로젝트 일정보다는 실제 마무리 일정이 늦어졌지만 React를 활용해 SPA + Link + Router 를 활용해 프로젝트를 마무리했다는 것에 의의를 둬야겠다.
최근 회사에서 서버 PC 외에 백업용 PC에 이중화 작업을 진행했었다. 백업용 PC의 환경은 Docker를 활용해 환경을 구축하게 됐다. 구축은 마무리했지만, 어차피 Docker를 경험하게 됐기 때문에, 구체적으로 Docker가 무엇인지 등을 알아보았다.
Learned
- React > Blog > Navbar 만들기 (Link 사용)
- Linux > Blog > Linux 설치 파일 확장자명 .tar, .rpm, .deb 비교
- tar.gz 파일은 gzip 으로 압축된 파일의 tar 저장 파일
- .rpm 파일은 레드햇 패키지 매니져(RedHat Package Manager) 패키지 파일
- .deb파일은 데비안(Debian) 배포판을 위한 데비안 패키지 파일
- Docker > Blog > Docker Container와 Image란 무엇인가?
- Docker란
- Docker는 애플리케이션 구축, 구현 및 테스트를 위해 격리된 가상화 환경을 생성하는 서비스형 플랫폼
- Docker는 컨테이너 엔진으로 리눅스 커널 기능을 사용하여 운영 체제 위에 컨테이너를 만들고, Docker 자체는 서비스의 컨테이너를 관리하는 데몬으로 실행
- Application을 포장 및 전송하기 위해 도커는 "docker image"를 사용
- Docker image란
- Docker image는 파일로 어플리케이션 실행에 필요한 독립적인 환경을 포함하며, 런타임 환경을 위한 일종의 템플릿
- 도커 이미지는 소스 코드, 라이브러리, 종속성, 도구 및 응용 프로그램을 실행하는데 필요한 기타 파일을 포함하는 불변(변경 불가) 파일
- 이미지는 읽기 전용이므로 스냅샷이라고도 하며, 특정 시점의 애플리케이션과 가상 환경을 나타냄
- 이러한 일관성은 도커의 큰 특징 중 하나로 개발자가 안정적이고 균일한 조건에서 소프트웨어를 테스트하고 실험할 수 있도록 함
- Docker container란
- 사용자가 기본 시스템에서 애플리케이션을 분리할 수 있는 가상화된 런타임 환경
- 이러한 컨테이너는 응용프로그램을 빠르고 쉽게 시작할 수 있는 portable units 임
- 중요 기능은 컨테이너 내부에서 실행되는 컴퓨팅 환경의 표준화 (standardization of the computing environment running inside the container.)
- 응용 프로그램이 동일한 환경에서 작동하도록 할 뿐 아니라 다른 사람과의 공유도 단순화
- 컨테이너는 자율적(autonomous)이기 때문에 strong isolation을 제공하며 서로 방해하지 않음
- 하드웨어 수준에서 가상화가 이루어지는 VM과 달리 컨테이너는 애플리케이션 계층에서 가상화됨
- 하나의 머신을 활용하고 커널을 공유하며 분리된 프로세스를 실행하기 위한 운영 체제를 가상화할 수 있음
- 따라서 컨테이너가 매우 가벼워져 리소스를 많이 사용하지 않을 수 있음
- 도커 이미지와 컨테이너의 차이점
- 컨테이너가 존재하려면 이미지를 실행해야 하는 반면, 이미지는 컨테이너 없이 존재할 수 있음
- 따라서 컨테이너는 이미지에 종속되어 런타임 환경을 구성하고 애플리케이션을 실행하는 데 사용됨
- 도커 이미지는 도커 컨테이너에서 코드를 실행한다. 실행 중인 컨테이너를 만들려면 도커 이미지에 핵심 기능의 쓰기 가능 계층을 추가함(Writable container)
- 도커 컨테이너는 실행 중인 이미지 인스턴스로 간주한다. 각각의 고유한 데이터와 상태를 가진 동일한 이미지에서 여러 개의 컨테이너를 만들 수 있음
- 컨테이너 채택의 주요 이점은 개발, 운영 및 테스트의 표준화 및 단순화임
- Docker > Blog > 볼륨과 마운트
- 볼륨이란 호스트 머신의 폴더라는 것(로컬 컴퓨터 폴더라는 뜻)
- 즉, 도커가 인식하는 호스트 머신임
- 볼륨은 도커 컨테이너 내부의 폴더에 매핑
- 볼륨이 가지는 의미
- 볼륨의 가지는 의미는 컨테이너 내부 폴더와 컨테이너 외부 폴더를 연결하는 것
- 로컬폴더와 내부 폴더는 격리되어 있으나 볼륨을 이용해 연결이 가능하도록 만들 수 있다는 의미
- 마운트란 물리적인 장치를 특정 디렉터리에 연결시켜주는 것
- 도커는 크게 3가지의 마운트 방식을 제공
- 볼륨 마운트 = 이 방식이 가장 베스트 방식
- 바인드 마운트
- tmfs 마운트
- 볼륨 마운트
- 도커가 생성하고 관리하는 방식
- 즉, 도커에 의해 볼륨이 생성되고 도커에 의해 관리되는 방식으로 볼륨이 로컬 디렉터리에 마운트 될 경우 바인드 마운트와 유사하게 동작
- 바인드 마운트
- 바인드 마운트의 경우 호스트의 로컬경로를 직접 지정하여 볼륨을 마운트하는 방식
- 해당 방식은 도커가 아니기 때문에, 도커프로세스와 non-도커프로세스 간의 차이가 발생할 수 있기 때문에 권장하지 않는 방식
- tmfs 마운트
- 파일시스템 대신 메모리에 데이터를 저장하는 방식을 의미
- Docker > Blog > Docker volume, mount 알아보기
- 바인드 마운트
- 호스트 시스템의 경로(파일 or 폴더)가 컨테이너에 마운트되는 형태
- 경로가 존재하지 않으면 생성하여 마운트하고 호스트 시스템의 경로에 모두 접근 할 수 있기에 주의가 필요
- 쓰기 기능이 필요 없는 경우 readonly로 마운트 가능하다.
- 볼륨 마운트
- 바인드 마운트보다 좀 더 좁은 범위의 마운트이며, 도커에 의해 관리되는 영역에 데이터가 저장됨
- 격리된 별도의 저장공간을 만든 후, 필요할 때 마운트 하는 형식이다. (N개의 서비스에 1개의 NAS를 마운트 하는 느낌)
- bind mount와의 차이점
- 백업과 마이그레이션이 편리하고
- 경로가 제한되어 안전하게 공유 가능하며
- 볼륨 드라이버를 사용하여 원격의 저장소를 사용할 수 있다.
- tmpfs mount
- 호스트 메모리에 데이터를 저장한다.
- 따라서 컨테이너가 중지(stop)되면 마운트가 제거되고 파일이 삭제됨
- document에 따르면 민감한 파일을 임시로 저장하는데 유용하다는데, 일반적인 데이터 저장은 start 시에 데이터를 다시 사용 가능한데 중지시에 데이터를 삭제하는 식으로 사용하는 것으로 추정됨
- windows는 지원하지 않고 linux에서만 사용 가능
- Docker > Blog > Docker 기본 명령어 - 이미지 관리 명령
- Docker > Blog > 도커데몬(Docker Daemon)
- Docker는 클라이언트-서버 구조를 가짐
- Docker 데몬(dockerd)은 API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 객체를 관리함
- Docker 클라이언트는 많은 Docker 사용자가 Docker와 상호작용하는 기본방법
- Docker 클라이언트는 Docker 컨테이너를 빌드, 실행 및 배포에 대한 무거운 작업을 수행하는 Docker 데몬과 통신을 함
- Docker registries는 Docker 이미지를 저장
- Docker Hub는 누구나 사용할 수 있는 공용 레지스트리이며 Docker는 기본적으로 Docker Hub에서 이미지를 찾음
- 컨테이너나 이미지를 다루는 명령어는 /usr/bin/docker에서 실행되지만 도커 엔진의 프로세스는 /usr/bin/dockerd 파일로 실행되고 있음
- 이는 docker 명령어가 실제 도커 엔진이 아닌 클라이언트로서의 도커라는 것을 알 수 있음
전반적으로 Docker에 대해서 공부를 하였다.
Reference
Feedback
약 15일이라는 기간동안 API를 활용한 React 사이드 프로젝트를 무사히 마무리한 것, Docker를 통해 환경 구축을 하는 것을 한 번 경험해 보고 싶었는데, 회사를 통해 경험을 하게 되어 좋았다.