SpringBoot 프로젝트를 Docker 이미지로 패키징하는 데는 두 가지 옵션이 있습니다.
완전 자동화 : 먼저 도커 이미지 웨어하우스를 구축한 다음 프로젝트의 Maven 구성에서 웨어하우스 주소를 구성하고 프로젝트에 Dockerfile 파일을 구성하여 아이디어에 직접 패키징하고 이미지 웨어하우스에 자동으로 업로드한 다음 서버로 이동하세요. 미러를 시작하세요.
반자동화 : 반자동화에는 두 가지 옵션이 있는데, 하나는 Dockerfile 파일을 프로젝트 내부에 배치하는 것이고, 다른 하나는 프로젝트 외부에 배치하는 것입니다.
프로젝트 내부에 배치: springboot pom에서 maven 플러그인 지원 구성
이 jar를 서버에 업로드하고, 서버에 Dockerfile을 생성하고, docker build 명령을 실행하고, 이 jar를 docker 이미지로 빌드한 다음, 다음을 통해 실행합니다. 영상.
일반적으로 반자동화는 완전 자동화보다 더 많이 사용됩니다. 이 기사에서는 반자동화의 두 번째 방법을 사용합니다. 일반적으로 말하면 몇 가지 단계가 있습니다.
docoer 파일을 생성합니다:
(1) 프로젝트에 Dockerfile이라는 새 파일을 만듭니다.
Dockerfile 작성:
#基础镜像
FROM openjdk:8-jre
#发布到网上时只会把jar包和Dockerfile发布上去
# 把当前目录下的jar包拷贝进docker镜像里
COPY *.jar /ftdocker.jar
#CMD命令用于指定这个容器启动的时候要运行的命令(CMD一行只执行一个命令,可以写多个CMD)
#地址映射
CMD ["--server.port=8088"]
#对外暴露端口
EXPOSE 8088
# ENTRYPOINT命令用于指定这个容器启动的时候要运行的命令(可以追加命令)
#执行命令
ENTRYPOINT ["java", "-Xmx512m", "-jar", "/ftdocker.jar"]
Java 프로젝트를 저장하기 위해 프로젝트를 저장하려는 서버에 새 폴더를 만듭니다.
패키지된 jar 패키지와 Dockerfile 파일을 서버에 업로드합니다.
Dockerfile을 사용하여 Docker 이미지 패키징
#选项及解释
-t的t是tag,表示生成的镜像的名称和版本号
.表示当前构建时上下文的路径为当前目录
docker build -t todocker:0.1 .
표현:
(FROM java:8)을 지정하면 Jenkins가 서비스를 빌드하고 Dockerfile에서 오류를 보고합니다. java:8-jre에 대한 매니페스트를 찾을 수 없음: 매니페스트 알 수 없음: 매니페스트 알 수 없음
1. 문제 설명:
Jenkins 빌드 서비스, 콘솔 보고 오류:
manifest for java:8-jre not found: manifest unknown: manifest unknown
1. 스크린샷:
2. 문제 해결
Docker가 공식적으로 java8 이미지를 포기했기 때문입니다.jdk1.8을 사용하려면 openjdk를 사용하면 됩니다.
해결책은 Dockerfile을 FROM openjdk:8-jre로 변경하는 것입니다.
FROM openjdk:8-jre
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
ARG JAR_FILE
COPY ${JAR_FILE} /app.jar
ENTRYPOINT ["java", "-Xmx512m", "-Djava.security.egd=file:/dev/./urandom", "-Ddruid.mysql.usePingMethod=false", "-jar", "/app.jar"]
CMD ["--spring.profiles.active=prod"]
다음 명령을 사용하여 이미지가 성공적으로 빌드되었는지 확인합니다.
docker images
표현:
새로운 도커 이미지를 사용하여 도커 컨테이너를 시작하려면 다음 명령을 사용하십시오.
#옵션 및 설명
-d는 컨테이너가 백그라운드에서 실행 중임을 나타냅니다.
-P는 임의로 지정된 포트를 나타내거나 -p 지정된 포트를 나타냅니다.
--name="name" 매개변수는 컨테이너
docker 실행을 구별하기 위해 컨테이너에 이름을 지정하는 데 사용됩니다. d -p 8012:8012 --name 컨테이너 이름 이미지 이름: 버전
표현:
Docker 컨테이너 내부의 프로젝트에 액세스
(1) docker 컨테이너 내 SpringBoot 프로젝트의 8080 포트를 매핑하기 위해 -P 파라미터로 docker 포트를 임의로 지정하기 때문에 docker에서 어떤 포트를 임의로 지정했는지 알 수 없으므로 다음 명령어를 사용하여 어떤 포트가 지정되었는지 확인하세요. 무작위로 지정된 도커 포트는 (도커 컨테이너 시작 시 포트를 지정하면 이 단계를 수행할 필요가 없습니다)
도커 ps
렌더링:
(2) 컬 명령어를 사용하여 docker 컨테이너에 있는 SpringBoot 프로젝트에 접근하고, 404라는 단어가 나타나면 SpringBoot 프로젝트가 성공적으로 시작되었음을 의미합니다.
컬 로컬호스트: 도커
렌더링 에 의해 무작위로 지정된 포트
(3) 컬 명령을 사용하여 SpringBoot 프로젝트의 인터페이스를 호출하고 호출이 성공할 수 있는지 확인합니다.
컬 로컬호스트: docker 에 의해 무작위로 지정된 포트/인터페이스 경로 . 렌더링
:
다른 문제:
이 오류는 컨테이너가 이미 존재하는 경우 발생하며, 다음 명령을 사용하여 컨테이너를 중지, 삭제하고 최종적으로 시작할 수 있습니다.
docker stop name/image_id
docker rm name/image_id
태그로 이미지 삭제
미러링은 다음 중 하나를 통해 삭제할 수 있습니다.
docker rmi [image]
또는:
docker image rm [image]
강제 삭제:
docker rmi -f image_id
컨테이너 작업 명령 요약: 참조 링크
컨테이너 중지:
docker stop hello1
중지된 컨테이너 시작:
docker start hello1
컨테이너 입력:
docker exec -it hello1 /bin/bash
컨테이너 삭제:
docker rm -f hello1
도움말 명령:
docker --help