Docekrとは?2再チャレンジ導入(成功)


こいつのドックも慣れていないように見える.DockerおよびDocker Composeを使用すると、プロジェクトを一度に配置できます.
前日に過去の種目を拡大しようとして失敗した戦績がある.今回はAWS連動やその他を理由に、進行中のプロジェクトを拡大してみました.
  • ターゲットは、サーバ自体を仮想マシンに入れ、
  • に戻すことです.
  • Serviceが更新されると、運用環境を変更することなく新しいイメージを作成し、導入できます.
    ->サービスを一度に使用して環境イメージを操作します.一度使用して捨てる.
  • Docker Compose
  • マルチコンテナアプリケーションを定義および共有するために開発されたツール.
  • Componentは、サービスを定義するYaMLファイルを作成し、すべてまたはすべての終了を単一のコマンドで実行します
  • 設定

  • サーバー.jarファイルで構築./gradlew build

  • Dockerfileの作成(上部)
  • # FROM: 어떤 이미지를 기반으로 할지 설정합니다. Docker 이미지는 기존에 만들어진 이미지를 기반으로 생성합니다. 
    # FROM <이미지 이름>:<태그> 형식으로 설정합니다.
    FROM openjdk:8-jdk-alpine
    # build 시점에만 사용되는 변수
    ARG JAR_FILE=build/libs/*.jar
    # COPY는 파일을 이미지에 추가합니다. ADD와는 달리 COPY는 압축 파일을 추가할 때 압축을 해제하지 않고, 파일 URL도 사용할 수 없습니다.
    COPY ${JAR_FILE} app.jar
    # ENTRYPOINT는 컨테이너가 시작되었을 때 스크립트 혹은 명령을 실행합니다
    # 셀 없이 바로 실행하기  ENTRYPOINT ["<실행 파일>", "<매개 변수1>", "<매개 변수2>"] 
    ENTRYPOINT [ "java", "-jar", "/app.jar" ]
  • docker-compose.作成yml(Dockerfileと同じ場所)
  • # Docker compose 버전
    version: '3.8'
    # 가동할 컨테이너 목록
    services:
      db:
        # 사용할 이미지(Docker Hub 또는 로컬에 저장된 Image)
        image: mysql:8.0
        container_name: gaon_db
        restart: always
        # 외부에서 컨테이너 내부로 연결되는 포트 목록
        ports:
          - 32000:3306
        # 컨테이너 내에서 사용되는 환경 변수
        environment:
          # <사용할 Database root 계정 비밀 번호 설정>
          MYSQL_ROOT_PASSWORD: password
          TZ: 'Asia/Seoul'
        # 실제 드라이브와 컨테이너의 드라이브를 연결(Mount)
        volumes:
          # 처음에 실행될 sql문을 집어넣는다
          - ./db:/docker-entrypoint-initdb.d
          # 볼륨에 db 연결 (컨테이너 종료시에도 날아가지 않게)
          - 'gaon_volume:/var/lib/mysql'
        # 컨테이너 내부에서 사용되는 네트워크
        networks:
          - backend
        # 안해주면 aws에서 mbind: Operation not permitted 에러 뜸
        security_opt:
          - seccomp:unconfined
    
      app:
        # 공개된 Image 가 아닌 Dockerfile 을 통한 빌드 이미지 사용
        # 위에서 만든 Dockerfile을 사용한다
        build:
          context: ./
        restart: always
        container_name: gaon_app
        ports:
          - 8080:8080
          - 8443:8443
        environment:
          TZ: Asia/Seoul
          # Spring application.properties DB 설정
          SPRING_DATASOURCE_URL: 'jdbc:mysql://db:3306/gaon?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=true'
          server.address: 0.0.0.0
          # 의존 컨테이너
        depends_on:
          - db
        networks:
          - backend
    volumes:
      gaon_volume:
    networks:
      backend:
    
    もちろん、ここではプロジェクトに必要なopenviduやnginxなどを追加しましたが、基本フレームワークは以下の通り!
    gaon volumeが使用され、データベースが対応するボリュームに接続されているため、コンテナを削除して再実行してもデータベースデータは失われません.
    うんてん
    docker-compose up -d
    上記のコマンドを実行すると、イメージがない場合は、DockerHubから取得したDBイメージと、以前に作成したDockerfileを使用してプロジェクトのイメージが作成されます.作成した画像をコンテナとして実行します.
    すなわちdocker-composeymlファイル内のすべてのサービスを作成して実行
  • -dオプションはバックグラウンドで実行されることを示します.
  • 画像を再構築する場合は、--buildオプションを使用します.
  • 削除
    docker-compose down
    docker-compose.ymlファイル内のすべてのサービスコンテナを一度に停止して削除します.
    画像まで削除したいなら.
    docker-compose down --rmi all
    上記のコマンドを使用すればよい.
  • プロジェクトがjarファイルを変更して再構築した場合は、jarファイルをドッキングステーションにコピーするCOPY ${JAR_FILE} app.jarコマンドを実行するために、イメージを再構築する必要があります.
  • 再構築が必要な場合は、downオプションで現在の画像を削除できます
  • または--rmi allの場合は、upオプションを使用することもできます.