MySQL, Redis 컨테이너 동시에 띄워보기 저번 포스팅에서 언급했다시피, 이번에는 실제 개발 환경처럼 여러 개의 컨테이너를 동시에 관리하는 방법에 대해 알아본다. 먼저 간단한 예제부터 시작해보자. MySQL과 Redis 컨테이너를 동시에 실행해보겠다. 1. compose 파일(compose.yml) 작성하기services: my-db: image: mysql environment: MYSQL_ROOT_PASSWORD: pwd1234 volumes: - ./mysql_data:/var/lib/mysql ports: - 3306:3306 my-cache-server: image: redis ports: - 6379:6379들여쓰기에..
Docker Compose란? Docker Compose는 여러 개의 Docker 컨테이너들을 하나의 서비스로 정의하고 구성해 하나의 묶음으로 관리할 수 있게 도와주는 툴이다. 왜 Docker Compose를 사용하는 걸까? 여기에는 아래와 같은 장점들이 있다.여러 개의 컨테이너를 관리하는 데 용이여러 개의 컨테이너로 이루어진 복잡한 애플리케이션을 한 번에 관리 가능보통 프로젝트에서 단순히 Spring Boot 서버만 띄우는 게 아니라 MySQL도 띄우고, Redis도 띄우고 그럴 수 있다!복잡한 명령어로 실행시키던 걸 간소화시킬 수 있음전에는 긴 명령어로 실행했지만 Docker Compose를 사용하면 docker compose up만 있으면 된다! Docker Compose 전체 흐름(Nginx) ..
Dockerfile 지금까지 Dockerhub를 통해 이미지를 다운 받아서 사용했다. 그렇다면 이러한 이미지들은 어떻게 만들어진 것일까? 바로 Dockerfile을 사용해 Docker 이미지를 만들 수 있다. Dockerfile은 Docker 이미지를 만들게 해주는 파일이다. Spring Boot 프로젝트 자체를 Docker 이미지로 만든다거나 하는데 사용할 수 있다. 참고로 Spring Boot 프로젝트를 Docker 이미지로 만들게 되면 JDK 런타임 환경이나 JAR 파일이나 애플리케이션을 실행하는 명령 등등이 포함될 수 있다. FROM : 베이스 이미지 생성 Dockerfile로 이름을 짓고 파일 내에서 문법에 맞는 명령어로 작성하면 된다. 첫 번째로 배울 명령어는 FROM이다. 해당 명령어는 ..
Docker Volume(도커 볼륨) 프로그램에 기능이 추가될 경우, 새로운 이미지를 만들어서 컨테이너를 실행시켜야 한다. 이 때, Docker는 기존 컨테이너에서 변경된 부분을 수정하지 않고, 이미지를 기반으로 새로운 컨테이너를 띄우는 방식으로 교체를 진행하게 된다. 그러나 새로운 컨테이너로 교체할 때, 기존 컨테이너 내부에 있던 데이터도 같이 삭제되는 문제가 발생한다...! 컨테이너의 파일 시스템은 일시적(휘발성)이기 때문이다. 컨테이너에 내에서 MySQL이 실행되고 있었는데 컨테이너를 갈아끼웠다고 안에 저장된 데이터가 전부 날아간다면 이는 큰 문제가 될 수 있다. 따라서 컨테이너 내부에 저장된 데이터가 삭제되면 안 되는 경우에는 볼륨(Volume)이라는 개념을 활용한다! Docker Volume은..
이미지(Image) 다운로드 / 조회 / 삭제 컨테이너를 실행시키기 위해서는 이미지가 필요하다. 최신 버전의 이미지를 다운 받는 명령어는 아래와 같다. # docker pull 이미지명$ docker pull nginx # docker pull nginx:latest와 동일하게 작동docker image ls를 통해 이미지가 다운 받아졌는지를 조회할 수 있다. 그렇다면 과연 이러한 이미지는 어디서 다운 받아진 것일까? 이미지를 다운로드 할 때 Dockerhub에서 이미지를 다운 받는다. Dockerhub은 Github처럼 이미지를 저장 및 다운 받을 수 있는 저장소 역할을 하고 있다. # docker pull 이미지명:태그명$ docker pull nginx:stable-perl이러한 이미지는 버전별..
Docker를 왜 배우는 걸까? 현업에서는 Docker를 많이 사용하고 있다. 이 Docker라는 건 왜 많이 사용되는 걸까? Docker를 쓰는 가장 큰 이유는 이식성 때문이다. 이식성이란 특정 프로그램을 다른 곳으로 쉽게 옮겨서 설치 및 실행할 수 있는 특성을 말한다. 개발을 하다 보면 팀원 간에 서로 동일한 개발 환경을 맞추는 일이 자주 생긴다. 예를 들어, Docker가 없이 Python으로 머신러닝 모델을 개발하고자 한다면 아래와 같은 과정을 거쳐야 A와 B가 같은 환경에서 프로젝트를 진행할 수 있다. 동일 버전의 Python을 설치하고,해당 Python 버전에 대한 venv 가상 환경을 만들어야 하며,requirements.txt 파일을 만들어 의존성을 공유하고,pip install -r re..