• 실습1) 간단한 java 프로그램 실행

    • Docker파일 작성, 실행 실습
      • java로 만들어진 프로그램을 간단한 프로그램 실행
      • 도커파일 작성 예시) FROM openjdk:11 COPY . /app WORKDIR /app RUN javac MyApplication.java CMD ["java", "MyApplication"]
        • java 특정 버전 download
          • 컴퓨터 마다 java버전이 다를수 있는 문제를 통제
          • OS마다 환경설정이 달라지는 경우의 문제도 발생도 통제
          • 버전과 환경에 독립적인 docker를 사용하여 실행시 java버전, OS 등에 상관없이 실행가능
        • java를 실행하기 위한 절차와 명령어를 docker파일을 통해 자동화
      • 이미지 빌드
        • docker build -t 이미지명:버전명 -f <도커스크립트경로> <빌드컨텍스트위치>
          • 예시)docker build -t testjava:version1.0 -f .\DockerfileJava .
        • 빌드컨텍스트
          • 빌드 컨텍스트는 Docker 이미지를 빌드할 때 Docker 데몬에게 전송되는 파일과 디렉토리의 집합
          • Dockerfile이 실행될 때 참조하는 모든 파일과 리소스를 포함
      • 도커 실행
        • ex) docker run testjava:version1.0
        • 포트 및 백그라운드 실행
          • docker run -d -p 8080:8080 이미지명:태그명
      • docker 포트 매핑
        • 예시) 8081:8080

        • 호스트(컨테이너를 실행하는 시스템)의 포트와 컨테이너 내부의 포트 사이의 연결을 정의

        • 이를 통해 외부에서 컨테이너 내부의 애플리케이션에 접근

        • 포트매핑이 없다면 외부에서 접근불가

          Untitled

  • 실습2)spring 프로그램 실행

    • DB 커넥션시 에러 발생
      • db가 localhost로 설정돼 있을 경우 docker내에서는 접근 불가
        • host.docker.internal을 통해 도커 컨테이너에서 호스트 머신에 접근
        • docker run -d -p 8081:8080 -e SPRING_DATASOURCE_URL=jdbc:mariadb://host.docker.internal:3306/board spring_test:v1
        • 위와 같은 명령시 db정보 host.docker.internal로 변경하여 주입
      • docker에서 localhost는 각 컨테이너 내부의 루프백 네트워크 인터페이스를 가리킴. 즉, localhost를 사용하면 컨테이너는 자기 자신을 가리키는 것
      • host.docker.internal를 사용시 docker외부의 host의 localhost를 의미
    • volumn설정
      • 컨테이너 내의 특정 디렉토리에 쌓이는 파일을 호스트 머신의 디렉토리로 마운트
      • 예를 들어)docker서버에 쌓이는 log를 호스트머신에 마운트 하여 docker 컨테이너가 삭제되고 다시 실행되어도 log는 남아있도록 설정
  • 실습3)프론트, 백엔드 도커 실습

    • 백엔드 도커파일 작성
    • 프론트엔드 도커파일 작성
      • 주의)클라이언트 관점의 docker의 localhost는 클라이언트 자신이 실행되고 있는 호스트를 가리므로 개발용도로 프론트엔드에서 서버url을 localhost를 설정하는 것은 문제 없음