Jenkins

Jenkins (1) - CI/CD 자동화와 Docker 설치

1. 개요 여러 사람이 코드를 합치면 빌드, 테스트, 배포 확인을 반복해야 한다. Jenkins는 이런 반복 작업을 이벤트나 일정에 따라 실행하는 오픈 소스 자동화 서버다. Git 저장소에서 코드를 가져와 테스트하고, 이미지를 만들고, 결과를 알리는 CI/CD 흐름을…

·5분
Jenkins

Jenkins (5) - Docker 이미지 빌드와 로컬 배포하기

1. 개요 앞선 글에서는 Jenkins Pipeline으로 Spring Boot 프로젝트를 테스트했다. 이번에는 테스트를 통과한 JAR를 Docker 이미지로 만들고, 기존 컨테이너를 새 이미지로 교체해 로컬에서 실행한다. 이 글의 Jenkins는 Docker Desk…

·8분
GitHub Actions

GitHub Actions (5) - SSH로 EC2에 Spring Boot 배포하기

1. 개요 앞선 글에서는 테스트를 통과한 Spring Boot 애플리케이션을 Docker 이미지로 만들어 Docker Hub에 푸시했다. 이미지를 저장소에 올리는 것만으로는 EC2에서 실행 중인 컨테이너가 바뀌지 않는다. 이 글에서는 main 브랜치에 푸시하면 테스트,…

·9분
Docker

Docker (14) - Docker Swarm으로 클러스터 서비스 운영하기

Docker Compose는 한 대의 호스트에서 여러 컨테이너를 함께 실행하고 관리하기에 편리하다. 그러나 서비스 복제본을 여러 서버에 나누어 배치하고, 서버나 컨테이너에 장애가 나도 원하는 개수를 유지하며, 무중단에 가깝게 버전을 교체하려면 클러스터 수준의 관리가 필…

·13분
Docker

Docker (13) - Docker Compose로 다중 컨테이너 애플리케이션 실행하기

Dockerfile은 하나의 애플리케이션을 이미지로 패키징하는 데 적합하다. 하지만 웹 프론트엔드, 백엔드 API, 데이터베이스처럼 여러 컴포넌트로 구성된 애플리케이션을 실행하려면 각 컨테이너의 이미지, 포트, 환경 변수, 볼륨, 네트워크를 함께 관리해야 한다. Doc…

·8분
Docker

Docker (12) - 멀티 스테이지 빌드와 Dockerfile 작성 원칙

앞선 글에서는 Dockerfile의 주요 명령어와 이미지 빌드 방법을 정리했다. 이번 글에서는 빌드 환경과 실행 환경을 분리하는 멀티 스테이지 빌드(Multi stage build) 를 살펴본다. 멀티 스테이지 빌드를 사용하면 컴파일러, 패키지 관리자, 개발용 의존성처…

·8분
Docker

Docker (11) - Dockerfile 명령어 심화와 빌드 실습

1. 개요 Docker (4)에서 FROM, WORKDIR, COPY, RUN, ENV, EXPOSE, CMD로 이어지는 Dockerfile의 기본 골격과 멀티 스테이지 빌드를 다뤘다. 이번 글에서는 그때 다루지 않았던 나머지 명령어들(ENTRYPOINT, ADD, V…

·13분
Docker

Docker (10) - 브릿지 네트워크와 다중 컨테이너 연동

1. 개요 컨테이너는 기본적으로 호스트나 다른 컨테이너와 격리되어 있는 독립된 실행 환경이다. Docker(5)에서 사용자 정의 네트워크로 컨테이너끼리 이름으로 통신하는 방법을 다뤘는데, 이번 글에서는 그 배경이 되는 기본 브릿지 네트워크의 동작 원리 와, 포트포워딩이…

·8분
Docker

Docker (9) - Docker Hub 이미지 배포 테스트

1. 개요 직접 만든 이미지( etakyung/for docker java:latest )를 Docker Hub에 올려두기만 하고 끝내면, 이게 다른 환경에서도 제대로 동작하는지는 알 수가 없다. 그래서 이번에는 로컬에서 이 이미지를 다시 pull 받아, MySQL 컨…

·6분
Docker

Docker (8) - 볼륨 마운트와 바인드 마운트

1. 개요 컨테이너 내부에 저장된 데이터는 컨테이너의 생명주기를 그대로 따라간다. 즉 컨테이너가 삭제되면 그 안에 쌓아둔 데이터도 함께 사라진다. DB 데이터처럼 컨테이너가 없어져도 유지되어야 하는 데이터가 있다면, 별도의 저장 매커니즘으로 데이터의 영속성을 확보해야…

·10분
Docker

Docker (7) - 컨테이너 생명주기와 실행 옵션 정리

1. 개요 Docker(2)에서 docker run 으로 컨테이너를 간단히 띄워봤지만, 실제로는 컨테이너가 어떤 상태를 거쳐 살아있고 사라지는지, run 의 옵션들이 각각 무엇을 하는지, 컨테이너 내부와 파일을 어떻게 주고받는지를 알아야 제대로 다룰 수 있다. 이번 글…

·9분
Docker

Docker (6) - 이미지를 파일로 저장하고 관리하기

1. 개요 지금까지는 이미지를 항상 Docker Hub 같은 레지스트리에서 pull 로 받아서 사용했다. 그런데 인터넷이 안 되는 폐쇄망이거나, 레지스트리를 거치지 않고 이미지를 바로 다른 서버로 옮기고 싶을 때는 이미지를 파일(tar)로 통째로 내보내고 다시 불러오는…

·3분
Docker

Docker (5) - network

Docker network Docker network는 컨테이너들이 서로 통신하는 공간이다. host에서 접속하려면 port publish가 필요하지만, 같은 Docker network 안의 컨테이너끼리는 container name으로 통신할 수 있다. 별도 네트워크를…

·2분
Docker

Docker (4) - Dockerfile 구조

1. 개요 Dockerfile 은 docker build 가 image를 만들 때 읽는 레시피이다. FROM, COPY, RUN 같은 명령어를 한 줄씩 조합해서 "어떤 환경 위에 어떤 파일을 올리고, 어떤 명령을 실행할지"를 정의한다. 기본적인 명령어의 의미를 이해하고…

·8분
Docker

Docker (2) - 설치 및 간단한 컨테이너 실행

도커 데스크탑 설치 https://docs.docker.com/desktop/setup/install/mac install/ 나는 mac os를 사용하기에 위의 링크를 첨부했다. 위의 명령어를 터미널에 차례로 실행한 결과이다. 잘 다운로드가 된 걸 확인할 수 있다. d…

·2분
Docker

Docker (1) - 기본 용어

도커 용어 Docker : 애플리케이션 실행 환경을 image와 container로 표준화하는 도구와 생태계 Docker Engine : image build, container run, network, volume을 실제로 처리하는 Docker 실행 엔진 Image…

·1분