Docker 배포(5) - docker run 명령을 사용하여 jar 프로젝트를 배포하고 실행합니다.

       일부 간단한 단일 프로젝트의 경우 docker run 명령을 사용하여 미리 이미지를 빌드하지 않고도 명령줄에서 직접 컨테이너를 실행할 수 있습니다. 이는 이전 배포 프로젝트를 실행하기 위해 dockerfile 파일을 사용했던 것과 비교하여 또 다른 간단한 배포 방법입니다. dockerfile 파일을 사용하여 배포를 실행하는 이전 방법에 대해서는 다음 문서를 참조하세요.

Docker 배포 (1) - jar 패키지를 docker 이미지로 만들고 컨테이너를 시작합니다.

      먼저 jar 패키지와 구성 파일을 프로젝트 디렉터리에 배치합니다.

 

 그런 다음 이 디렉터리에서 직접 docker run 명령을 실행합니다.

docker run -d -p 20238:20238 --name my-container-name \
-v $(pwd):/app \
-e CONFIG_FILE=/app/application.yml \
-e CONFIG_FILE_1=/app/config1.properties \
-w /app \
dockette/jdk8 java -Duser.timezone=GMT+08 -Dfile.encoding=utf-8 -jar /app/reportools-1.0.0.RELEASE.jar

실행 결과는 다음과 같습니다. 

docker 명령에 대한 관련 설명:

①: -v 매개변수를 사용하면 호스트의 디렉터리나 파일을 컨테이너에 마운트할 수 있습니다. 명령에서 구성 파일, 템플릿 파일 및 애플리케이션 JAR 파일은 -v 매개변수를 사용하여 컨테이너의 해당 경로에 마운트됩니다. -v $(pwd):/app \ 정보는 다음 코드의 단순화된 결과입니다.

-v /mnt/docker/files/ssexcel/config:/app/config \
-v /mnt/docker/files/ssexcel/template.xlsx:/app/template.xlsx \

-v /mnt/docker/files/ssexcel/reporttools-1.0.0.RELEASE.jar:/app/app.jar \

②: CONFIG_FILE은 구성 파일의 경로를 지정하는 데 사용되는 환경 변수입니다. 주어진 명령에서 -e CONFIG_FILE=/app/application.yml을 통해 환경 변수 CONFIG_FILE을 /app/application.yml로 설정합니다. 즉, 애플리케이션의 구성 파일 경로를 /app/application.yml로 설정합니다. -e 매개변수는 컨테이너 내에서 환경 변수를 설정하는 데 사용됩니다. 명령에는 두 개의 환경 변수 CONFIG_FILE 및 CONFIG_FILE_1이 설정됩니다.

-e는 Docker 명령줄 옵션의 일부이며 컨테이너 내에서 환경 변수를 설정하는 데 사용됩니다. 컨테이너를 실행할 때 컨테이너 내부에 환경 변수를 전달하는 데 사용됩니다. -e 옵션을 사용하여 키-값 쌍 형태의 환경 변수를 컨테이너 내 환경 변수로 설정할 수 있습니다. 예를 들어, -e VAR_NAME=value는 VAR_NAME이라는 환경 변수를 값으로 설정합니다.

③: -d 매개변수는 컨테이너가 백그라운드(데몬) 모드에서 실행됨을 나타냅니다. 이를 통해 컨테이너는 터미널을 차단하지 않고 백그라운드에서 계속 실행될 수 있습니다. 다음으로 -p 20238:20238 매개변수는 컨테이너의 포트 20238을 호스트의 포트 20238에 매핑하므로 컨테이너 내의 서비스는 호스트의 해당 포트를 통해 액세스할 수 있습니다.

마지막으로 Dockette/jdk8은 지정된 이미지의 이름이고 java -jar app.jar은 컨테이너에서 실행될 명령입니다.

④: 이를 기반으로 데이터 라이브러리의 컨테이너에 연결을 추가하려는 경우 Docker의 네트워크 기능을 사용하여 두 컨테이너 간의 통신을 달성할 수 있으며, 한 컨테이너는 애플리케이션 JAR 파일을 실행하는 데 사용되고 다른 컨테이너는 사용됩니다. MySQL 서비스를 실행합니다. 이를 통해 애플리케이션과 데이터베이스를 더 효과적으로 분리하고 관리할 수 있습니다. 다음과 같이 명령을 수정합니다.

  1. 커스텀 네트워크를 생성합니다:

    docker network create my-network
  2. MySQL 컨테이너를 실행하고 네트워크에 연결합니다.

    docker run -d --name mysql-container --network my-network -p <MySQL端口>:3306 -e MYSQL_ROOT_PASSWORD=<密码> mysql:5.6

    <MySQL端口><密码>실제 MySQL 포트와 비밀번호로 바꾸세요 .

  3. 애플리케이션 컨테이너를 실행하고 동일한 네트워크에 연결합니다.

    docker run -d --name app-container --network my-network -p 20238:20238 \
    -v /mnt/docker/files/ssexcel/config:/app/config \
    -v /mnt/docker/files/ssexcel/template.xlsx:/app/template.xlsx \
    -e CONFIG_FILE=/app/config/application.yml \
    -e CONFIG_FILE_1=/app/config/config1.properties \
    -e DB_HOST=mysql-container -e DB_PORT=<MySQL端口> \
    -v /mnt/docker/files/ssexcel/reportools-1.0.0.RELEASE.jar:/app/app.jar \
    -w /app \
    openjdk:8 java -Duser.timezone=GMT+08 -Dfile.encoding=utf-8 -jar app.jar

    DB_HOST환경 변수의 값은 MySQL 컨테이너의 이름인 입니다 . mysql-container왜냐하면 두 컨테이너가 동일한 네트워크에 있고 컨테이너 이름을 통해 통신할 수 있기 때문입니다.

요약하다

        docker run 명령과 Dockerfile 파일을 사용하여 프로젝트를 배포하는 것에는 다음과 같은 차이점이 있습니다.

도커 실행 명령:

        이미지를 미리 빌드하지 않고 명령줄에서 직접 컨테이너를 실행하려면 docker run 명령을 사용하세요. 명령줄에 제공되는 매개변수와 옵션은 컨테이너의 구성 및 런타임 동작을 정의합니다. 간단한 시나리오에 적합하며 사용자 지정 Docker 이미지가 필요하지 않습니다.


도커파일:

        Dockerfile을 사용하여 특정 구성 및 소프트웨어 패키지가 포함된 사용자 정의 이미지를 정의합니다. Dockerfile 파일은 이미지 빌드를 위한 단계와 지침을 설명하고 빌드 프로세스를 통해 이미지를 생성합니다. 필요에 따라 Dockerfile의 내용을 자유롭게 수정하고 종속성, 구성 파일 등을 추가할 수 있습니다. 사용자 정의 이미지가 필요하고 여러 환경에 배포해야 할 수 있는 복잡한 프로그램이나 프로젝트에 적합합니다. 특정 환경 변수 추가, 필수 소프트웨어 패키지 설치, 네트워크 구성 등과 같은 Dockerfile을 사용하여 보다 고급 컨테이너화 설정을 수행할 수 있습니다. 또한 Dockerfile은 CI/CD 도구와 통합되어 자동 연속 통합 및 배포를 달성할 수도 있습니다.

사용하기로 선택하는 방법은 특정 요구 사항과 시나리오에 따라 다릅니다.

  • 단순한 컨테이너화이고 사용자 정의 이미지가 필요하지 않은 경우  docker run 명령을 사용할 수 있습니다.
  • 프로젝트가 복잡하거나 여러 구성 요소 및 구성이 포함되거나 다른 환경에 배포해야 하는 경우 Dockerfile을 사용하여 사용자 지정 이미지를 빌드하는 것이 좋습니다. 이를 통해 더 나은 코드 관리 및 재사용이 가능하고 다양한 환경에서 일관성이 보장됩니다.

        요약하자면, docker run 명령은 간단한 컨테이너 실행에 적합한 반면, Dockerfile은 사용자 정의 이미지를 구축하고 복잡한 프로젝트 또는 애플리케이션을 관리하는 데 적합합니다. 사용할 방법의 선택은 특정 요구 사항과 프로젝트 복잡성에 따라 다릅니다.

추천

출처blog.csdn.net/weixin_49171365/article/details/130470401