SpringBoot 및 Mysql 응용 Docker 패키지 배치

본 고 는 간단 한 springboot+my sql 응용(사용자 방문 상황 을 바탕 으로 ip 수 를 계산 하고 my sql 데이터베이스 에 저장)을 실현 하여 이 응용 에 docker 미 러 를 구축 하고 docker 용기 배치 와 my sql 용기 와 의 연결 을 실현 합 니 다.
Docker 설치
docker desktop for windows 를 직접 설치 하면 됩 니 다.docker copose 도 포함 되 어 있 습 니 다.docker-compose version를 통 해 결 과 를 검증 할 수 있 습 니 다.보통 다음 과 같은 정 보 를 출력 합 니 다.
docker-compose version 1.25.4, build 8d51620a
docker-py version: 4.1.0
CPython version: 3.7.4
OpenSSL version: OpenSSL 1.1.1c  28 May 2019

docker image 관련 명령:
  • docker images로 컬 모든 미 러 보기
  • docker rmi XXX이름 을 정 한 미 러 삭제
  • docker container 용기 관련 명령:
  • docker ps -a전체 용기 표시
  • docker ps현재 실행 중인 용기 보이 기
  • docker start mysql이전 이름 이 mysql 인 용 기 를 다시 시작 합 니 다
  • docker stop mysqlmsyql 용기 정지
  • Visitor 응용 프로그램 작성
    다 중 모듈 응용 에 대해 수 동 으로 model 을 만 들 때 경 로 를 비 공정 루트 디 렉 터 리 에 배치 할 수 있 습 니 다.예 를 들 어test라 는 module 을 만 들 때 수 동 으로 경 로 를 수정 하면D:\dev2\project\backends\docker\test이 때 디 렉 터 리 등급 docker 를 추가 하여 같은 디 렉 터 리 에 nginx,my sql 등 디 렉 터 리 를 추가 하여 통일 적 으로 관리 하고 docker 화 개 조 를 실현 합 니 다.
    현재 부모 프로젝트 가 backends 이면 모듈 생 성 이 완료 되면 pom.xml 파일 예제 는 다음 과 같 습 니 다.
    
    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>backendsartifactId>
            <groupId>pers.techlmmgroupId>
            <version>1.0-SNAPSHOTversion>
            <relativePath>../../pom.xmlrelativePath>
        parent>
        <modelVersion>4.0.0modelVersion>
        <artifactId>dockercompartifactId>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-data-jpaartifactId>
            dependency>
        dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                plugin>
            plugins>
        build>
    project>
    

    이 프로그램 은 jpa 를 기반 으로 자동 으로 ddl 문 구 를 만 듭 니 다.이 기능 은 방문 값 ip 에 따라 방문 횟수 를 계산 하 는 것 입 니 다.
    @RestController
    @RequestMapping("/api/v")
    public class VisitorController {
         
    
        @Autowired
        private VisitorRepository repository;
    
        @RequestMapping("/")
        public String index(HttpServletRequest request) {
         
            String ip = request.getRemoteAddr();
            Visitor visitor = repository.findByIp(ip);
            if (visitor == null) {
         
                visitor = Visitor.builder().ip(ip).times(1L).build();
            } else {
         
                //      +1
                visitor.setTimes(visitor.getTimes() + 1);
            }
            repository.save(visitor);
            return "ip " + ip + "access times:" + visitor.getTimes();
        }
    }
    

    최종 적 으로curl http://localhost:8080/api/v/또는 브 라 우 저 방식 으로 방문 하면 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.ip 0:0:0:0:0:0:0:1access times:7TestRestTemplate 를 통 해 검증 도 가능 하 다.
    @SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT)
    @Slf4j
    public class VisitorControllerTest {
         
    
        @Autowired
        TestRestTemplate restTemplate;
    
        //       
        URI uri = UriComponentsBuilder.fromUriString("/api/v/").build().toUri();
    
        @Test
        void indexTest() {
         
            String response = restTemplate.getForObject(uri, String.class);
            log.info(response);
        }
    }
    

    docker 프로필 만 들 기
    docker 환경 에 배 치 된 후에 데이터베이스 링크 모델 이 변화 하기 때문에application-docker.properties파일 을 추가 해 야 합 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
    # docker   ,          docker       ,   mysql-test   docker run  --link    
    spring.datasource.url=jdbc:mysql://mysql-test:3306/test
    spring.datasource.username=root
    spring.datasource.password=goodpine
    

    로 컬 패키지 및 실행
    현재 로 컬 포장 모드 를 시도 합 니 다.pom.xml 파일 경로(예 를 들 어 D:\dev2\\procject\backends\\dockercomp\\app>)에서 실행mvn clean package -Dmaven.test.skip을 통 해 포장 을 완성 할 수 있 습 니 다.포장 한 실행 가능 한 jar 는 target 디 렉 터 리 에 놓 습 니 다.예 를 들 어app\target\dockercomp-1.0-SNAPSHOT.jar명령 행 에서 직접 실행java -jar dockercomp-1.0-SNAPSHOT.jar하면 이 서 비 스 를 시작 할 수 있다.
    Dockerfile 파일 만 들 기
    pom.xml 파일 과 디 렉 터 리 에 이름 을Dockerfile파일 로 추가 합 니 다.
    FROM openjdk:8-jdk-alpine
    ARG JAR_FILE=target/*.jar
    COPY ${JAR_FILE} app.jar
    EXPOSE 8080
    #      -Dspring.profiles.active=docker,   docker          
    ENTRYPOINT ["java","-Dspring.profiles.active=docker","-jar","/app.jar"]
    

    위 파일 은 target 에 있 는 모든 jar 를 app.jar 에 복사 하고 실행 시 profile 을 docker 에 대응 하 는 설정 을 만 드 는 것 을 의미 합 니 다.
    Docker 배치
    mysql docker 서비스 시작
    docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=goodpine -e MYSQL_DATABASE=test  -p 3306:3306 -d mysql 
    

    시작 완료 후docker ps를 통 해 용기 운행 상황 을 볼 수 있 습 니 다.
    visitor-docker 미 러 구축
    spring 프로젝트 루트 디 렉 터 리 에서 실행docker build . -t visitor-docker,그 중-t xxx은 미 러 에 라벨 을 붙 이 는 것 을 말 합 니 다.이 명령 은 일반적으로 다음 과 같은 결 과 를 얻 습 니 다.
    E:\dev\2try\backends\dockercomp\app>docker build .  -t visitor-docker
    Sending build context to Docker daemon  39.79MB
    Step 1/5 : FROM openjdk:8-jdk-alpine
     ---> a3562aa0b991
    Step 2/5 : ARG JAR_FILE=target/*.jar
     ---> Using cache
     ---> 25bff168a2b2
    Step 3/5 : COPY ${
         JAR_FILE} app.jar
     ---> bac68174227c
    Step 4/5 : EXPOSE 8080
     ---> Running in 904bc1180df7
    Removing intermediate container 904bc1180df7
     ---> 1f234b6dbf72
    Step 5/5 : ENTRYPOINT ["java","-Dspring.profiles.active=docker","-jar","/app.jar"]
     ---> Running in 0a2a351a3225
    Removing intermediate container 0a2a351a3225
     ---> 2ee38fd2463a
    Successfully built 2ee38fd2463a
    Successfully tagged visitor-docker:latest
    

    미 러 구축 이 완료 되면docker images을 통 해 현재 이 컴퓨터 의 모든 미 러 를 볼 수 있 습 니 다.
    PS C:\Users\123> docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    visitor-docker      latest              156aa35a495c        46 seconds ago      145MB
    mysql               latest              30f937e841c8        4 weeks ago         541MB
    redis               latest              f9b990972689        7 weeks ago         104MB
    mongo               latest              3f3daf863757        8 weeks ago         388MB
    nginx               latest              602e111c06b6        8 weeks ago         127MB
    hello-world         latest              bf756fb1ae65        5 months ago        13.3kB
    openjdk             8-jdk-alpine        a3562aa0b991        13 months ago       105MB
    sath89/oracle-12c   latest              ee3351d51185        22 months ago       5.7GB
    

    docker 응용 프로그램 실행
    마지막 으로 아래 명령 을 통 해 응용 프로그램 을 실행 하면 됩 니 다.
    docker run --link mysql-test:mysql-test --name visitorapp -p 8080:8080 visitor-docker
    

    특별 설명:**이 링크 를 추가 하 십시오.그렇지 않 으 면 지정 한 데이터베이스 에 연결 할 수 없습니다.**링크 X:Y 에서 X 는 실행 중인 미 러 이름 을 말 합 니 다.위 에서 시작 하 는 my sql 데이터베이스 서비스의 별명 입 니 다.Y 설정 파일 에 인 용 된 데이터베이스 미 러 별명
    여기에 mysql 기반 의 springboot 응용 docker 배치 가 완료 되 었 습 니 다.시험 과정 에서 많은 구덩이 에 부 딪 혔 습 니 다.예 를 들 어–link 등 이 도움 이 되 기 를 바 랍 니 다.
    참고 자료
  • 다 중 모듈 maven 프로젝트,github 에 업로드 한 후 다시 다운로드 하려 면 먼저mvn idea:module를 통 해 한 번 실행 한 다음maven창 을 통 해 모든 module 를 새로 고침 하면 아이디어 에서 각 module
  • 를 식별 할 수 있 습 니 다.
  • 미 러 를 삭제 하면 해당 용 기 를 먼저docker rm XXX삭제 한 다음docker rmi visitor-docker을 통 해 해당 하 는 미 러 를 삭제 할 수 있다.
  • http://www.ityouknow.com/springboot/2018/03/28/dockercompose-springboot-mysql-nginx.html
  • https://docs.docker.com/compose/install/
  • https://spring.io/guides/gs/spring-boot-docker/
  • 좋은 웹페이지 즐겨찾기