[PROJECT #1] N-Tier 애플리케이션 도커로 구성하기 (Web + App + DB)
·
Docker
0. 들어가며지금까지 우리는 도커의 모든 핵심 개념을 배웠다.BASIC #1: 개념과 등장 배경BASIC #2: 설치와 기본 명령어BASIC #3: 이미지와 컨테이너BASIC #4: Dockerfile로 이미지 만들기BASIC #5: Volume으로 데이터 저장BASIC #6: Network로 컨테이너 간 통신ADVANCED #1: Compose로 멀티 컨테이너 관리ADVANCED #2: Docker Hub로 이미지 배포이번 포스팅에서는 배운 모든 것을 종합하여 실제 운영 수준의 N-Tier 애플리케이션을 도커로 구성해보겠다.1. 프로젝트 개요1.1. 애플리케이션 아키텍처다음과 같은 3계층 아키텍처를 구성할 것이다.[Client Browser] | v[Web Tier] Nginx (..
[ADVANCED #2] 도커 이미지 배포와 공유: Docker Hub 활용법
·
Docker
0. 들어가며지금까지 우리는 로컬에서 도커 이미지를 만들고, 컨테이너를 실행하는 방법을 배웠다. 하지만 실제 개발에서는 다음과 같은 상황이 발생한다.팀원들과 이미지를 공유해야 한다.CI/CD 파이프라인에서 이미지를 사용해야 한다.운영 서버에 이미지를 배포해야 한다.이때 필요한 것이 이미지 저장소(Registry) 다. 가장 대표적인 이미지 저장소가 Docker Hub다.이번 포스팅에서는 Docker Hub를 활용하여 이미지를 공유하고 배포하는 방법을 알아보겠다.1. Docker Hub란?1.1. 정의Docker Hub는 도커 이미지를 저장하고 공유하는 클라우드 기반 레지스트리 서비스다.GitHub가 코드 저장소라면, Docker Hub는 이미지 저장소다.공개(public) 저장소는 무료로 사용할 수 있다..
[ADVANCED #1] 여러 컨테이너 한 번에 관리하기: Docker Compose
·
Docker
0. 들어가며지금까지 우리는 도커의 기본적인 개념부터 네트워크까지 모두 배웠다. 이제 여러분은 다음과 같은 작업을 할 수 있다.# 1. 네트워크 생성docker network create myapp-network# 2. 볼륨 생성docker volume create mysql-data# 3. MySQL 컨테이너 실행docker run -d \\ --name mysql-db \\ --network myapp-network \\ -v mysql-data:/var/lib/mysql \\ -e MYSQL_ROOT_PASSWORD=root \\ mysql:8.0# 4. Spring Boot 앱 컨테이너 실행docker run -d \\ --name spring-app \\ --network myapp..
[BASIC #6] 컨테이너 간 통신: Docker Network 이해하기
·
Docker
0. 들어가며지금까지 우리는 단일 컨테이너를 실행하고, 데이터를 영구적으로 저장하는 방법까지 배웠다. 하지만 실제 애플리케이션은 대부분 여러 컨테이너로 구성된다.웹 서버 컨테이너 (Nginx)애플리케이션 서버 컨테이너 (Spring Boot, Node.js)데이터베이스 컨테이너 (MySQL, PostgreSQL)이렇게 여러 컨테이너가 함께 동작하려면 컨테이너 간 통신이 필요하다. 이번 포스팅에서는 컨테이너들이 서로 통신할 수 있게 해주는 Docker Network에 대해 알아보겠다. 1. Docker Network의 필요성1.1. 컨테이너의 격리와 통신도커 컨테이너는 기본적으로 격리된 환경에서 실행된다. 각 컨테이너는 자신만의 네트워크 네임스페이스를 가지며, 기본적으로는 다른 컨테이너와 격리되어 있다.[..
[BASIC #5] 데이터를 영구적으로 저장하는 법: Docker Volume
·
Docker
0. 들어가며: 컨테이너의 휘발성[BASIC #3]에서 이미지와 컨테이너에 대해 배울 때, 중요한 특징 하나를 언급했었다.컨테이너는 삭제되면 내부 데이터도 함께 사라진다.이것이 바로 컨테이너의 휘발성(Volatility) 이다. 컨테이너는 기본적으로 일회용(ephemeral)으로 설계되었다. 언제든지 삭제하고 다시 생성할 수 있는 것이 컨테이너의 장점이지만, 동시에 데이터를 영구적으로 보관해야 하는 상황에서는 큰 문제가 된다. 예를 들어보자.# MySQL 컨테이너 실행docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0# 컨테이너에 접속해서 데이터베이스 생성docker exec -it mysql-test mysql -p# (비밀번호 ..
[BASIC #4] 나만의 이미지 만들기: Dockerfile 완전 정복
·
Docker
0. 들어가며지금까지 우리는 docker pull 명령어로 기존에 만들어진 이미지(nginx, ubuntu, mysql 등)를 다운로드받아 사용했다. 하지만 실제 개발에서는 나만의 애플리케이션을 이미지로 만들어야 할 때가 많다. Spring Boot 애플리케이션을 개발했다면, 이 앱을 도커 이미지로 만들어서 어디서든 실행할 수 있게 하고 싶을 것이다. 이번 포스팅에서는 Dockerfile을 작성하여 나만의 커스텀 이미지를 만드는 방법을 알아보겠다. 1. Dockerfile이란?1.1. Dockerfile의 정의Dockerfile은 도커 이미지를 생성하기 위한 설계도와 같은 텍스트 파일이다.파일 이름은 관례적으로 Dockerfile을 사용한다. (확장자 없음)파일 안에는 베이스 이미지부터 시작해서, 복사할..
[BASIC #3] 밀키트 비유로 완벽 이해하는 도커 이미지와 컨테이너
·
Docker
0. 들어가며[BASIC #2]에서는 도커를 설치하고 기본 명령어들을 실습해보았다. docker run nginx 같은 명령어를 실행하면 컨테이너가 실행된다는 것은 알겠는데, 도대체 이미지(Image) 와 컨테이너(Container) 는 정확히 무엇이고, 둘은 어떤 관계일까? 이번 포스팅에서는 도커의 가장 핵심 개념인 이미지와 컨테이너를 밀키트(Meal Kit) 비유를 통해 쉽고 완벽하게 이해해보겠다.1. 밀키트 비유: 이미지와 컨테이너1.1. 도커 이미지 = 밀키트밀키트(Meal Kit) 란? 된장찌개 밀키트를 생각해보자.밀키트 안에는 된장, 두부, 호박, 양파, 육수, 고춧가루 등 요리에 필요한 모든 재료가 정해진 양만큼 들어있다.또한 조리법(레시피)도 함께 제공된다. "물 500ml를 넣고 끓이다가..
[BASIC #2] 도커 설치부터 첫 컨테이너 실행까지 (Hello World 실습)
·
Docker
0. 들어가며[BASIC #1]에서는 도커가 왜 필요한지, VM과 비교하며 개념을 살펴보았다. 이번 포스팅에서는 실제로 도커를 설치하고, 첫 번째 컨테이너를 실행해보겠다. 이론만 공부하면 지루하니까, 직접 명령어를 입력해보면서 도커의 강력함을 체험해보자.1. 도커 설치하기도커는 Windows, macOS, Linux 등 주요 운영체제를 모두 지원한다. 각 환경에 맞는 설치 방법을 알아보겠다.1.1. Linux (Ubuntu)에 설치하기가장 흔한 개발/서버 환경인 Ubuntu 기준으로 설명한다.# 패키지 목록 업데이트sudo apt-get update# 도커 설치sudo apt install -y docker.io# 설치 확인 (버전 출력)docker --version설치가 완료되면 docker --ver..