Загружаем каталог…
Загружаем каталог…
1. 오늘 학습 키워드 Docker Docker Image Docker Container Dockerfile Docker Network Bridge Network Docker Compose Port Mapping 컨테이너 간 통신 OpenFeign과 Docker 네트워크 2. 오늘 학습 한 내용을 나만의 언어로 정리하기 오늘은 Docker와 Docker Compose의 기본 개념을 학습했다. Docker에서 먼저 이해해야 할 것은 이미지와 컨테이너의 차이였다. 이미지는 애플리케이션을 실행하기 위한 환경과 파일들을 미리 담아둔 템플릿이고, 컨테이너는 그 이미지를 실제로 실행한 상태라고 이해했다. 예를 들어 다음 명령어는 현재 디렉토리의 Dockerfile을 기준으로 img-service-a 라는 이미지를 생성한다. docker build -t img-service-a . 반면, docker run ... 은 이미 만들어진 이미지를 이용해서 새로운 컨테이너를 생성하고 실행한다. 정리하면 다음과 같다. docker build → 이미지 생성 docker run → 이미지로 컨테이너 생성 및 실행 docker start → 이미 존재하는 컨테이너 다시 실행 Dockerfile Spring Boot 애플리케이션을 Docker 이미지로 만들기 위해 Dockerfile을 사용했다. FROM eclipse-temurin:17-jre VOLUME /tmp ARG JAR_FILE=build/libs/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java", "-jar", "/app.jar"] 먼저 Gradle의 bootJar 를 통해 jar 파일을 만들고, Dockerfile에서는 그 jar 파일을 이미지 안에 복사한다. 이후 컨테이너를 실행하면 java -jar /app.jar 명령이 실행되면서 Spring Boot 애플리케이션이 시작된다. 전체 흐름은 아래처럼 이해했다. Spring Boot 코드 ↓ Gradle bootJar ↓ jar 파일 생성 ↓ docker build ↓ Docker Image 생성 ↓ docker run ↓ Container 실행 Docker Network 오늘 가장 헷갈렸던 부분 중 하나는 컨테이너 간 네트워크였다. 컨테이너는 각각 독립된 네트워크 공간을 가지고 있다. 따라서 service-a 컨테이너 안에서 localhost 를 사용하면 내 Windows PC나 service-b 가 아니라 service-a 컨테이너 자기 자신을 의미한다. 그래서 A 서비스가 B 서비스를 호출하려면 두 컨테이너가 같은 Docker 네트워크에 연결되어 있어야 한다. docker network create my-network 처럼 사용자 정의 bridge 네트워크를 만든 뒤 A와 B를 같은 네트워크에 연결하면 이름으로 서로 통신할 수 있다. 예를 들어 A가 B를 호출한다면 service-a ↓ http://service-b:8080 ↓ service-b 와 같은 형태가 된다. Docker가 내부 DNS를 통해 service-b 라는 이름을 실제 B 컨테이너의 IP로 찾아주기 때문에, 컨테이너의 IP가 바뀌더라도 직접 IP를 수정하지 않아도 된다. Port Mapping 실습에서는 아래와 같은 명령어도 사용했다. docker run -d --name service-b --network my-network -p 18081:8080 img-service-b 각 옵션의 의미는 다음과 같다. -d → 컨테이너를 백그라운드에서 실행 --name service-b → 컨테이너 이름을 service-b 로 지정 --network my-network → my-network 에 연결 -p 18081:8080 → 호스트의 18081 포트를 컨테이너의 8080 포트에 연결 img-service-b → 실행할 이미지 따라서 내 PC에서는 localhost:18081 로 접근하지만 실제 Spring Boot 애플리케이션은 컨테이너 내부의 8080 포트에서 실행되고 있다. Docker Compose 컨테이너가 하나라면 docker run 으로 직접 실행해도 되지만, 컨테이너가 여러 개가 되면 각각 포트, 네트워크, 환경변수를 관리하기가 점점 불편해진다. Docker Compose를 사용하면 여러 컨테이너의 설정을 하나의 파일에서 관리할 수 있다. 또한 Docker Compose를 실행하면 프로젝트 전용 사용자 정의 bridge 네트워크를 자동으로 만들어준다. 프로젝트명_default ├── service-a └── service-b 그래서 Compose로 실행한 컨테이너끼리는 별도로 IP를 지정하지 않아도 서비스 이름을 이용해서 통신할 수 있다. 예를 들어 A에서 B를 호출한다면 http://service-b:8080 처럼 사용할 수 있다. 그리고 docker compose down 을 실행하면 Compose가 만든 컨테이너와 네트워크도 함께 정리된다. 반면 docker network create my-network 처럼 내가 직접 만든 네트워크는 특정 Compose 프로젝트에 종속된 것이 아니기 때문에 컨테이너를 내리더라도 그대로 남아 있다. 4. 내일 학습 할 것은 무엇인지 오늘은 Docker와 Docker Compose를 이용해서 애플리케이션을 이미지로 만들고 여러 컨테이너를 실행하는 기본 흐름까지 학습했다. 다음 학습에서는 CI/CD 내용을 시작할 예정이다. 오늘 직접 해본 코드 → jar 빌드 → Docker Image 생성 → Container 실행 과정을 CI/CD에서는 어떻게 자동화하는지 집중해서 학습해 보고 싶다. 직접 명령어를 입력해서 빌드하고 이미지를 만드는 과정이 자동화되면 실제 배포 흐름이 어떻게 달라지는지 연결해서 이해해 볼 예정이다.
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
[내일배움캠프] Docker와 Docker Compose. 1. 오늘 학습 키워드 Docker Docker Image Docker Container Dockerfile Docker Network Bridge Network Docker Compose Port Mapping 컨테이너 간 통신 OpenFeign과 Docker 네트워크 2. 오늘 학습 한 내용을 나만의 언어로 정리하기 오늘은 Docker와 Docker Compose의 기본 개념을 학습했다. Docker에서 먼저 이해해야 할 것은 이미지와 컨테이너의 차이였다. 이미지는 애플리케이션을 실행하기 위한 환경과 파일들을 미리 담아둔 템플릿이고, 컨테이너는 그 이미지를 실제로 실행한 상태라고 이해했다. 예를 들어 다음 명령어는 현재 디렉토리의…
Открыть источник