docker 실행 자동화

Docker 2020. 12. 11. 17:03

도커를 현업에 도입하기 위해서 작업 중 테스트 하면서 정리한 기록들을 남김.

[목표]

1 . github -> master 커밋

2.  dockerhub maven build 및 docker 이미지 파일 생성

3. 생성된 이미지를 서버에서 실행

4. nginx 자동 반영

 

1번 부터 4번까지 자동으로 실행이 된다면  무중단 배포가 됨

 

1번과 2번 사이에 젠킨스를 끼어 넣어야 되겠지만. 우선 젠킨스 없이 진행 함. 

젠킨스가 필요 하다면 추후 넣을 예정

 

현제 회사에서는 빌드툴로 maven을 사용하고 있고 1번과 2번은 간단하게 도커허브에서 바로 연동가능합니다.

2번 과정에서 도커파일을 maven을 이용해서 컴파일 하는 스크립트 입니다.

가장 중요한 부분은 FROM을 통해서  메이븐 빌드영역과

자바를 실행하는 zulu-openjdk 영역이 다릅니다.

copy때 이 부분 때문에 많은 시간을 소비 했습니다. ㅜㅜ

 

Dockerfile

###########################################
#maven build 영역
###########################################
FROM maven:3.6.3-openjdk-11 as builder
ENV APPNAME testapp
RUN adduser $APPNAME
WORKDIR /home/$APPNAME
COPY pom.xml .
COPY src ./src
RUN mvn -f pom.xml package -Dmaven.test.skip=true -Dfile.encoding=UTF-8

################################################
#실행영역
################################################
FROM azul/zulu-openjdk-centos:11.0.9-11.43.21
ENV APPNAME testapp
WORKDIR /home/$APPNAME
COPY --from=builder /home/$APPNAME/target/*.jar /home/$APPNAME/boot/app.jar
LABEL maintainer="webmaster@fourfree.com"
EXPOSE 8080

ENTRYPOINT ["java","-Dserver.port=8080","-Dspring.profiles.active=prod","-jar", "boot/app.jar" ]

가장 중요한 부분은

COPY --from=builder 

논리적으로 메이븐 빌드하는 영역과 jar실행하는 영역이 다름으로 위와 같이 as builder 선언 후 copy --from 명령을 통해서 복사 합니다.

 

[3번]도커허브에 생성된 이미지를 실행하는 부분

start.sh 쉘 스크립트 입니다.

docker container stop testapp
docker rm testapp
docker pull fourfree/testapp
docker run  -d -p 8902:8080 -v /home/esjob/logs:/home/testapp/logs  -it --name testapp  -e TZ=Asia/Seoul   fourfree/testapp:latest

 - 우선 구동되고 있는 testapp 컨테이너 stop

 - testapp 컨테이너 삭제

 - testapp-> 도커허브에서 latest파일 다운로드 ( 이미 최신 버전이면 다운로드 하지 않습니다.)

 - -e TZ=Asia/Seoul 옵션을 반드시줘야 timezone-> 서울로 생성됨

 

나머지 부분은 추후 더 추가할 예정

반응형

'Docker' 카테고리의 다른 글

docker rabbitmq 설치  (0) 2021.01.15
docker , redis설치  (0) 2021.01.14
도커허브에서 빌드된 이미지 다운로드  (0) 2020.12.11
도커허브 로그인  (0) 2020.12.11
centos7 docker 설치 , docker install  (0) 2020.12.08
블로그 이미지

visualp

c#, java

,

latest <-- 테그네임

fourfree/testapp<-- 이미지 네임

 

docker pull fourfree/testapp:latest

 

docker images 명령어를 통해서 다운로드 받은 이미지 확인

반응형

'Docker' 카테고리의 다른 글

docker rabbitmq 설치  (0) 2021.01.15
docker , redis설치  (0) 2021.01.14
docker 실행 자동화  (0) 2020.12.11
도커허브 로그인  (0) 2020.12.11
centos7 docker 설치 , docker install  (0) 2020.12.08
블로그 이미지

visualp

c#, java

,

도커허브 로그인

Docker 2020. 12. 11. 11:12

docker login <-- 명령어 입력 후 아이디 패스워드 넣고 로그인

[root@localhost /home/codegen]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: fourfree
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

 

반응형

'Docker' 카테고리의 다른 글

docker rabbitmq 설치  (0) 2021.01.15
docker , redis설치  (0) 2021.01.14
docker 실행 자동화  (0) 2020.12.11
도커허브에서 빌드된 이미지 다운로드  (0) 2020.12.11
centos7 docker 설치 , docker install  (0) 2020.12.08
블로그 이미지

visualp

c#, java

,

centos7 기준 docker설치

1 .  아래 명령어로 실행( 가장 최신의 docker 버전을 설치해줌

curl -s https://get.docker.com | sudo sh

 

2.  systemctl enable docker.service

 - 서버 부팅시 자동으로 docker 서비스가 시작되도록 설정

3. service docker start

 - 설치한 도커서비스 시작

 

4. systemctl status docker.service

 - 도커서비스 상태 확인

[root@localhost /home]#  systemctl status docker.service
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since 화 2020-12-08 12:00:56 KST; 15min ago
     Docs: http://docs.docker.com
 Main PID: 3839 (dockerd-current)
   CGroup: /system.slice/docker.service
           ├─3839 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-c...
           └─3853 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-...

12월 08 12:00:56 localhost.localdomain dockerd-current[3839]: time="2020-12-08T12:00:56.538619829+09:00" level=info msg="Loading containers: start."
12월 08 12:00:56 localhost.localdomain dockerd-current[3839]: time="2020-12-08T12:00:56.550207450+09:00" level=warning msg="Running modprobe bridge br_netfilter failed with message: modprobe: WARNING: Module br_netfilter not found.\n...
12월 08 12:00:56 localhost.localdomain dockerd-current[3839]: time="2020-12-08T12:00:56.554882918+09:00" level=info msg="Firewalld running: false"
12월 08 12:00:56 localhost.localdomain dockerd-current[3839]: time="2020-12-08T12:00:56.602266038+09:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be...red IP address"
12월 08 12:00:56 localhost.localdomain dockerd-current[3839]: time="2020-12-08T12:00:56.631344401+09:00" level=info msg="Loading containers: done."
12월 08 12:00:56 localhost.localdomain dockerd-current[3839]: time="2020-12-08T12:00:56.632363121+09:00" level=warning msg="Not using native diff for overlay2, this may cause degraded performance for building images: o...r later to fix"
12월 08 12:00:56 localhost.localdomain dockerd-current[3839]: time="2020-12-08T12:00:56.637499293+09:00" level=info msg="Daemon has completed initialization"
12월 08 12:00:56 localhost.localdomain dockerd-current[3839]: time="2020-12-08T12:00:56.637517968+09:00" level=info msg="Docker daemon" commit="0be3e21/1.13.1" graphdriver=overlay2 version=1.13.1
12월 08 12:00:56 localhost.localdomain dockerd-current[3839]: time="2020-12-08T12:00:56.642381158+09:00" level=info msg="API listen on /var/run/docker.sock"
12월 08 12:00:56 localhost.localdomain systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.

 

5- docker version

[root@localhost ~/download/docker]# docker -v
Docker version 19.03.14, build 5eb3275d40
[root@localhost ~/download/docker]#

 

6. docker pull centos

- centos기준으로 설치 했음으로 docker centos전용 image 다운받기

 

7 docker images

[root@localhost /home]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              300e315adb2f        2 hours ago         209 MB
반응형

'Docker' 카테고리의 다른 글

docker rabbitmq 설치  (0) 2021.01.15
docker , redis설치  (0) 2021.01.14
docker 실행 자동화  (0) 2020.12.11
도커허브에서 빌드된 이미지 다운로드  (0) 2020.12.11
도커허브 로그인  (0) 2020.12.11
블로그 이미지

visualp

c#, java

,

[참고]

 

https://flutter-ko.dev/docs/get-started/install/windows

 

윈도우에서 설치

 

flutter-ko.dev

1. java jdk 설치 

  cdn.azul.com/zulu/bin/zulu8.50.0.51-ca-jdk8.0.275-win_x64.zip

JAVA_HOME PATH 설정

1.8 설치를 권장 합니다. 

세팅중 잡다한 문제가 발생 될 수 있음 . 우선 1.8 PATH를 잡아 주세요

 

2. Flutter SDK 다운로드

storage.googleapis.com/flutter_infra/releases/stable/windows/flutter_windows_1.22.4-stable.zip

PATH 환경변수에 flutter sdk 추가

flutter/bin  <-- 형태로 넣으면 됨

 

3. intelij plugin 설치

Dart, flutter  플러그인 검색 후 설치

 

4. Tools->Android->Adv Manager api version 29로 생성(애뮬레이터)생성

 

5. CMD >  fluttor doctor 실행 또는 intelij -> tools -> flutter -> flutter doctor 실행

 

CMD > flutter doctor --android-licenses  라이센스 문제 해결됨

반응형
블로그 이미지

visualp

c#, java

,

[상황]

 - rdb를 이용해서 고객관련된 데이터가 구축되어 있음

 - legcy 시스템에서 약 20년 동안 운영하면서 주소 데이터가 엉망이됨

  ( 신주소, 구주소, 회사에서 사용하는 배송을위한 행정구역주소: xxx동 xxx아파트)

 - 주소검색의 필요성  : 간 혹 연락처 맵핑이 안되는 고객이 있음-

     > 조회를 위해서 주소검색을 시도해야 함,

       동일주소에 중복 주문이 발생 할 수 있음 ( 내가 주문하고,  부모님이 주문하고) <-- 중복주문

  

 

@fulltext searching 검색 엔진도입을 고민하게됨

 

[내가 생각했던 검색엔진 후보군]

   1. mariadb에 10.x버전 부터 추가된 plugin mgroonga 

   2. elasticsearch

 

mgroonga 

 - aws에서 free tier 를 이용해서 mariadb서비스를 생성후 테스트 진행 mgroonga plugin지원 안함

 - centos 설치하고 직접 mariadb 설치해서 간단하게 설치 후 테스트

 - 한글 검색 지원 

 - table type -> mgroonga 생성되고  외래키 사용할 수 없음

 - limitation : [참고]mroonga.org/docs/reference/limitations.html#limitations-of-table 

 

elasticsearch

 - 6.4 버전  전 까지만 해도 한글공식지원안됨

 - 7.x 버전 설치해서 테스트 nori elasticsearch에서 공식지원됨

 - uri 방식 or rest 방식으로 curd가능

 - spring data jpa와 연계하여 쉽게 구현 가능

 

 

@ mgroonga vs elasticsearch 사실 비교할 여지가 없음

elasticsearch를 선택한 이유

 - inverted index(역 색인) (매력적임)

 - nori : 한글형태소 분석기 

 - rest api  : 별도로 curd를 구현할 필요 없음 , 연동하기 편함

 - 주소검색 뿐만아니라 다양하게 이용할 가능성이 있음.

 - kibana : visualiztion에 특화된 도구

 등등등 개발자가 해야할 일들이 줄어듬

 

[해결시나리오]

 - 고객의 주소가 변경되면 -> elasicsearch 보내는 scheduler 개발(하루에 2번 정도 실행)

 - elasticsearch로 주소 컬럼에서 검색 후 , 고객코드 리턴

 - 리턴받은 고객코드로 실서비스 rdb에서 조회

 - 주소 컬럼에 데이터를 넣을 떄 주소정보, 건물명(아파트명), 행정구역 , 광역시,시,군,구,동,리 포함

 - 주소 컬럼에  건물명 ngram 2자, 3자 만들어서 추가 , (역 색인용)

   ex) 화정동 힐스테이트 -> 화정 힐스, 화정 힐스테 검색되기위해서

   보통 xxx동 xxx아파트 형태로 검색을 함

 

 이미 개발은 완료 되서 실서비스 하고 있음. 해보고 iessu사항이 있다면 정리해서 공유하도록 하겠습니다.

 

반응형
블로그 이미지

visualp

c#, java

,

@Document 를 지정후 

interface를 이용해서 쿼리를 하던 중

기본검색은 jpa사용하듯 하면되지만

match를 이용하여 모두 조건이 일치할 떄 데이터가 조회해야되는 이슈가 발생

ex) 화정동 현대, 화정동 힐스, 화정 힐스

모두 만족해야되는 상황이 발생

jpa는 match를 이용하면 elasticsearch에서는 기본 or조건이 걸림

 

[순서]

1- elasticsearch에서 Dev tools를 이용하여 쿼리 작성

GET idx_es_address/_search 
{
  "query": {
     "match": {
        "address": { 
          "query": "화정동 힐스",
          "operator": "and",
          "analyzer": "korean"
        }
      }
  }
}

2 - 작성된 쿼리를 query 부분을 제외함

{
  "match": {
      "title": {
        "query": "화정동 힐스",
        "operator": "and"
      }
    }
}

3 - 제외된 query를 

  - codebeautify.org/jsonminifier 가서 minify시킴

{"match":{"title":{"query":"화정동 힐스","operator":"and"}}}

 

4 -"화정동 힐스" -> ?0 로 변경 <-- 0번째 parameter라는 의미

{"match":{"title":{"query":"?0","operator":"and"}}}

 

5. interface작성<최종>

 @Query("{\"match\":{\"address\":{\"query\":\"?0\",\"operator\":\"and\"}}}")
 List<EsAddressVO> findAllByAddressMatches(String addr, Pageable pageable);

 

반드시 Pageable param을 넣어주는것을 권장

기본 pagesize = 10으로 세팅되어 있음

반응형
블로그 이미지

visualp

c#, java

,

ngram 구현하기

Java 2020. 11. 26. 10:02

elasticsearch 색인시키기 위해서  2자 , 3자 색인이 필요한 상황

그래서 간단하게 Stringtokenlizer활용하여 만듬

ex)

input : 힐스테이트2차 

 

//2자 result

힐스 

스테 

테이 

이트 

트2 

2차 

 

//3자 result

힐스테 

스테이 

테이트 

이트2 

트2차

 

/**
     * elastic search 용 ngram 2,3 자르기
     * @param str
     * @param n 자를 글자수
     * @return
     */
    public static String esNgram(String str, int n){
        StringTokenizer stringTokenizer = new StringTokenizer(str.trim()," ");
        List<String> strArr = new ArrayList<>();
        while(stringTokenizer.hasMoreTokens()){
            String token = stringTokenizer.nextToken();
            for(int i=0; i<token.length(); i++){
                if(i+n > token.length()){
                    break;
                }
                strArr.add(token.substring(i,i+n));
            }
        }
        return String.join(" ", strArr);
    }

 

반응형
블로그 이미지

visualp

c#, java

,