> Java > java지도 시간 > 본문

docker가 SpringBoot를 배포하고 jar 패키지를 교체하는 방법

PHPz
풀어 주다: 2023-05-12 14:16:14
앞으로
2316명이 탐색했습니다.

프로젝트 디렉터리

docker가 SpringBoot를 배포하고 jar 패키지를 교체하는 방법

dockerfile 파일

나중에 사용할 dockerfile 파일을 만듭니다.

파일 배포

서버에 새 /data/docker/hellolearn 폴더를 생성하고(파일 경로는 사용자 정의 가능), maven 패키지 jar 패키지와 위에서 생성한 dockerfile 파일을 서버의 새 폴더(/data /도커/hellolearn).

docker가 SpringBoot를 배포하고 jar 패키지를 교체하는 방법

이미지 생성

docker build -t hellolearn .

docker build -t 이미지 이름: tag dockerfile의 상대 위치, 점은 현재 디렉터리를 나타내며, 태그가 없는 경우 기본값은 최신입니다. 쓴.

docker가 SpringBoot를 배포하고 jar 패키지를 교체하는 방법

컨테이너 시작

docker run -d -p 8301:8301 --name hellolearn hellolearn

docker start hellolearn

-d 매개변수는 컨테이너가 백그라운드에서 실행되도록 하는 것입니다. 는 지정된 컨테이너의 이름이고, -p는 포트 매핑을 위한 것입니다. 이때 서버의 8301(콜론 뒤의 포트) 포트는 컨테이너(application.properties)의 8301(콜론 뒤의 포트)에 매핑됩니다. 8301)

Access the web

docker가 SpringBoot를 배포하고 jar 패키지를 교체하는 방법

jar 패키지 매핑 배포

위 단계만 따르면 springboot의 docker 배포 전 과정을 쉽게 처리할 수 있습니다. 그러나 컨테이너를 시작한 후에는 jar 패키지를 업데이트해야 할 때마다 이미지를 다시 생성한 다음 컨테이너를 다시 생성해야 합니다. 이 과정은 매우 번거롭고 비효율적입니다. 그렇다면 이미지나 컨테이너를 업데이트하지 않고 배포를 완료하기 위해 jar 패키지를 직접 업데이트하는 방법은 무엇입니까?

5.1 dockerfile 업데이트

마지막 줄 entrypoint ["java","-jar","/data/learn-web-0.0.1-snapshot.jar"] 는 /data를 실행합니다. 컨테이너 디렉토리의 learn-web-0.0.1-snapshot.jar 파일입니다.  entrypoint ["java","-jar","/data/learn-web-0.0.1-snapshot.jar"] 会运行容器里/data目录下的learn-web-0.0.1-snapshot.jar文件。

5.2 使用docker build命令构建镜像

docker build -t hellolearn .

5.3 创建&启动容器

docker run --name hellolearn -it -v /data/docker/newhellolearn/package:/data -d -p 8301:8301 hellolearn

-v 宿主机目录关联容器目录。这样宿主机的/data/docker/newhellolearn/package目录就与docker的/data目录进行映射。

这样的话,当jar包发生变动时,直接更新宿主机的/data/docker/newhellolearn/package目录下的jar包即可,更新jar包之后需要将容器重启一下。

脚本部署

通过jar包部署方式引起一个问题,若jar包名字发生变化,比如版本号变化(learn-web-0.0.1-snapshot.jar-->>learn-web-1.0.1-snapshot.jar)。需要怎么处理呢?下面就介绍第三种通过脚本部署的方式。

6.1 创建hellolearn.sh文件

java -jar /data/learn-web-0.0.1-snapshot.jar

将hellolearn.sh上传到/data/docker/hellolearn/scriptdeploy/package,这个文件夹路径可以自定义,记住这个文件夹路径,后面还会用到。

6.2 添加脚本执行权限

chmod +x hellolearn.sh

6.3 创建dockerfile

cmd ["sh","-c","/data/hellolearn.sh"] 

5.2 docker build 명령을 사용하여 이미지 빌드

docker build -t hellolearn .

5.3 컨테이너 생성 및 시작

docker run --name hellolearn -it -v /data/docker/newhellolearn/ package:/data -d -p 8301:8301 hellolearndocker가 SpringBoot를 배포하고 jar 패키지를 교체하는 방법

-v 호스트 디렉터리는 컨테이너 디렉터리와 연결되어 있습니다. 이러한 방식으로 호스트의 /data/docker/newhellolearn/package 디렉터리가 docker의 /data 디렉터리에 매핑됩니다.

이 경우 jar 패키지가 변경되면 호스트의 /data/docker/newhellolearn/package 디렉터리에서 jar 패키지를 직접 업데이트할 수 있습니다. jar 패키지를 업데이트한 후 컨테이너를 다시 시작해야 합니다.

스크립트 배포

jar 패키지 배포 방법으로 인해 버전 번호 변경(learn-web-0.0.1-snapshot.jar-) 등 jar 패키지 이름이 변경되는 경우 문제가 발생합니다. -> ;>learn-web-1.0.1-snapshot.jar). 무엇을 해야 합니까? 스크립트를 통한 세 번째 배포 방법은 다음과 같습니다.

6.1 hellolearn.sh 파일 생성

java -jar /data/learn-web-0.0.1-snapshot.jar

hellolearn.sh를 /data/docker/hellolearn/scriptdeploy/package에 업로드하세요. 이 파일은 폴더 경로는 사용자 정의할 수 있습니다. 이 폴더 경로는 나중에 사용되므로 기억해 두세요.

6.2 스크립트 실행 권한 추가

🎜🎜chmod +x hellolearn.sh🎜🎜🎜6.3 dockerfile 생성🎜🎜cmd ["sh","-c","/data/hellolearn.sh"] 는 컨테이너가 시작될 때 6.1에서 생성된 hellolearn.sh 스크립트를 시작한다는 의미입니다. 🎜🎜위에서 언급한 마지막 명령은 스크립트 배포에서 cmd로 변경된 진입점입니다. 진입점과 cmd의 구체적인 차이점에 관심이 있다면 자세히 알아볼 수 있습니다. 🎜🎜6.4 jar 패키지 업로드🎜🎜jar 패키지를 hellolearn.sh와 동일한 폴더 디렉터리, 즉 /data/docker/hellolearn/scriptdeploy/package에 넣습니다. 컨테이너를 생성할 때 이 디렉터리(호스트 디렉터리)를 다음과 결합합니다. 매핑을 위한 컨테이너의 /data 디렉터리입니다. . 🎜🎜6.5 파일 디렉터리 구조 다이어그램🎜🎜🎜🎜🎜여기서 디렉터리 구조에 대해 헷갈리실지 모르겠습니다. 한눈에 알아볼 수 있도록 호스트 컴퓨터의 디렉터리 구조 다이어그램을 업로드했습니다. 🎜🎜6.6 이미지 만들기🎜🎜🎜docker build -t hellolearn-script .🎜🎜🎜끝의 점은 현재 디렉터리를 나타내므로 이미지 생성 명령은 dockerfile이 있는 디렉터리에서 실행되어야 합니다. 🎜🎜6.7 컨테이너 생성 및 시작🎜🎜🎜docker run --name hellolearn-script -it -v /data/docker/hellolearn/scriptdeploy/package:/data -d -p 8302:8301 hellolearn-script🎜🎜docker start hellolearn -스크립트🎜

호스트의 /data/docker/hellolearn/scriptdeploy/package 디렉터리를 컨테이너의 /data 디렉터리 매핑과 연결합니다. 이 경우 jar 패키지가 변경되면 호스트 디렉터리의 jar 패키지를 직접 업데이트하면 됩니다. jar 패키지 이름이 변경되더라도 여전히 hellolearn.sh 스크립트를 업데이트해야 합니다. 업데이트 후 컨테이너를 다시 시작합니다.

6.8 웹 테스트 효과

docker가 SpringBoot를 배포하고 jar 패키지를 교체하는 방법

Docker 로그 보기

docker 로그 [옵션] 컨테이너 ID

options 설명:

-f: 추적 로그 출력
--since: 특정 시작 시간 표시 All 로그
-t: 타임스탬프 표시
--tail: 최신 n개의 컨테이너 로그만 나열

7.1 지정된 시간 이후의 로그 보기, 마지막 100줄만 표시:

docker 로그 -f -t -- 이후= "2020-10-01" --tail=100 컨테이너 ID

7.2 지정된 기간의 로그 확인

docker 로그 -t --since="2020-10-01t19:00:00" -- "2020-10-01t19:00:00" 컨테이너 ID

7.3 지정된 시간 이후의 로그 보기:

docker 로그 -t --since="2020-10-01t19:00:00" 컨테이너 ID

7.4 지난 5분 동안의 로그 보기:

docker 로그 --since 5m 컨테이너 ID

7.5 exec 명령을 통해 지정된 컨테이너에서 bash를 실행합니다.

docker exec hellolearn -it /bin / bash 또는 docker exec -it hellolearn bash docker exec hellolearn -it /bin/bash 或者 docker exec -it hellolearn bash

7.6 查看docker ip

docker inspect --format='{{.networksettings.ipaddress}}' hellolearn

遇到的问题

问题描述:error response from daemon: driver failed programming external connectivity on endpoint flamboyant_leavitt (iptables failed: iptables --wait -t nat -a docker -p tcp -d 0/0 --dport 8301 -j dnat --to-destination 172.17.0.2:8301 ! -i docker0: iptables: no chain/target/match by that name.

解决方案:重启docker。 systemctl restart docker

7.6 View docker ip🎜🎜🎜dockerspec --format='{{.networksettings.ipaddress}}' hellolearn🎜🎜

문제 발생🎜🎜문제 설명: 데몬의 오류 응답: 드라이버가 엔드포인트 flamboyant_leavitt에서 외부 연결 프로그래밍에 실패했습니다(iptables 실패: iptables --wait -t nat -a docker -p tcp -d 0/ 0 --dport 8301 -j dnat --to-destination 172.17.0.2:8301 ! -i docker0: iptables: 해당 이름으로 체인/대상/일치가 없습니다.🎜🎜해결책: docker를 다시 시작하세요. systemctl restart docker🎜

위 내용은 docker가 SpringBoot를 배포하고 jar 패키지를 교체하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿