나중에 사용할 dockerfile 파일을 만듭니다.
서버에 새 /data/docker/hellolearn 폴더를 생성하고(파일 경로는 사용자 정의 가능), maven 패키지 jar 패키지와 위에서 생성한 dockerfile 파일을 서버의 새 폴더(/data /도커/hellolearn).
docker build -t hellolearn .
docker build -t 이미지 이름: tag dockerfile의 상대 위치, 점은 현재 디렉터리를 나타내며, 태그가 없는 경우 기본값은 최신입니다. 쓴.
docker run -d -p 8301:8301 --name hellolearn hellolearn
docker start hellolearn
-d 매개변수는 컨테이너가 백그라운드에서 실행되도록 하는 것입니다. 는 지정된 컨테이너의 이름이고, -p는 포트 매핑을 위한 것입니다. 이때 서버의 8301(콜론 뒤의 포트) 포트는 컨테이너(application.properties)의 8301(콜론 뒤의 포트)에 매핑됩니다. 8301)
위 단계만 따르면 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"]
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 패키지를 업데이트한 후 컨테이너를 다시 시작해야 합니다.
6.1 hellolearn.sh 파일 생성jar 패키지 배포 방법으로 인해 버전 번호 변경(learn-web-0.0.1-snapshot.jar-) 등 jar 패키지 이름이 변경되는 경우 문제가 발생합니다. -> ;>learn-web-1.0.1-snapshot.jar). 무엇을 해야 합니까? 스크립트를 통한 세 번째 배포 방법은 다음과 같습니다.
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 로그 [옵션] 컨테이너 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
systemctl restart docker
🎜위 내용은 docker가 SpringBoot를 배포하고 jar 패키지를 교체하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!