일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- jpa
- findAny
- ResponseBodyAdvice
- @AutoConfiguration
- Save Action
- fotmatter
- AccessLevel
- 개방/폐쇄 원칙
- ClientHttpRequestInterceptor
- RestTemplate
- JsonStringType
- LogInterceptor
- 포맷터
- Stream
- Starter
- vaultTemplate
- gradle
- spring
- AOP 매개변수
- JsonType
- Spring Boot
- findFirst
- AOP this
- java
- AOP target
- Thread Safety
- auto configuration
- AOP
- restTemple
- 쓰레드 안전
- Today
- Total
맨땅에 헤딩하는 개바른자
Docker 사용 방법 본문
[Docker]
1 Docker 이미지 만들기
1) docker build -t 이미지명 .
- Dockerfile을 만든 위치에서 빌드하는거라 맨 뒤에 . 점이 있다
파일 내용을 보면 아래와 같이 간략하게 설정되어있다
[carrier@localhost interceptor]$ cat Dockerfile
FROM java:openjdk-8-jdk //기본 베이스가 되는 구간 java
ADD asis /srv/app // 파일or폴더를 컨테이너 가상파일or경로에 매핑되며 컨테이너 경로는 자동으로 mkdir이 된다
EXPOSE 9001 //서비스 포트 설정
WORKDIR /srv/app/bin // CMD가 실행 될 컨테이너 속에 위치를 이동 cd /srv/app/bin이랑 동일하다
CMD ./start.sh // 실행할 명령어
2) docker images
이미지 목록 확인
3) docker rmi 이미지ID
이미지 삭제
2. Docker 프로세스 실행
TODO 이 글을 추후 수정이 필요할 수 있음..
1) 케리어 실행 프로세스 목록
- war 프로세스
docker run -d -p 9001:9001 -v /home/carrier/srv/interceptor/asis:/srv/app --rm --name interceptor-asis --network carrier --ip 172.19.0.5 interceptor
docker run -d -p 9002:9001 -v /home/carrier/srv/interceptor/tobe:/srv/app --rm --name interceptor-tobe --network carrier --ip 172.19.0.6 interceptor
docker run -d -p 9003:9001 -v /home/carrier/srv/carrier/asis:/srv/app --rm --name carrier-asis --network carrier --ip 172.19.0.7 interceptor
docker run -d -p 9004:9001 -v /home/carrier/srv/carrier/tobe:/srv/app --rm --name carrier-tobe --network carrier --ip 172.19.0.8 interceptor
... cruiser 등등 다른 war가 존재하겠죠 위 예시를 응용해서 다른 war도 뛰울 수 있습니다.
> 실행 옵션에서 --network를 -net=네트워크ID로 줘도 된다.
> 내가만든 네트워크를 써도되고 --ip설정은 빼면 자동으로 ip가 설정 된다.
> 자동ip로하면 ip가유동적이라 yml파일에 ip설정을 바꿔야하는 일이 생길 수 있어서 ip는 사전에 정해두면 편할 것 같다.
- redis 프로세스
docker run -d -p 6379:6379 --rm --name redis --network carrier --ip 172.19.0.2 redis
> 필요에 따라 -v 볼륨을 config파일과 연결하여 사용
- mongo 프로세스
docker run -d -p 27017:27017 --rm --name mongo --network carrier --ip 172.19.0.3 mongo
> 필요에 따라 -v 볼륨을 config파일과 연결하여 사용
- nginx 프로세스
docker run -d -p 80:80 -p 8080:8080 -v ~/srv/nginx:/etc/nginx --rm --name nginx --network carrier --ip 172.19.0.4 nginx
> 필요에 따라 -v 볼륨을 config파일과 연결하여 사용
> -p는 다중으로 넣을 수 있다!!
- 옵션s
> -d 백그라운드
> -rm 컨테이너 프로세스 종료 시 ps목록에서 자동으로 삭제
> -v 로컬파일or디렉토리와 컨테이너 파일or디렉토리를 마운트
> -name 컨테이너 이름 지정
> -network 컨테이너 네트워크 설정
> -p 외부유입 포트:로컬 컨테이너 연결 포트
3. Docker 네트워크
3.1. 네트워크 생성
docker network create --gateway 172.19.0.1 --subnet 172.19.0.0/24 carrier
게이트웨어와 서브넷은 임의로 지정 가능한거 같다.
3.2. 네트워크 리스트 보기
docker network ls
NETWORK ID NAME DRIVER SCOPE
2836d8bd937c bridge bridge local
3f9435490a84 carrier bridge local
f1022ff2db45 host host local
f12eab584d19 none null local
NAME을 보면 기본적으로 생성 된 것이 있고 carrier라고 새로 생성 된 네트워크 목록도 보인다.
3.3. 네트워크 별 사용 정보 확인
docker network inspect 네트워크ID
예) docker network inspect carrier
> 해당 네트워크에 속한 docker process목록 확인이 가능하다.
4. Docker 배포 스크립트
4.1. 스크립트 사용법
1. 첫번 째 스크립트
> 첫번 째 스크립트는 asis와 tobe를 모두 서비스 되도록하는 내용입니다.
> tobe를 기동해야하기 때문에 "사용포트"에는 tobe가 사용 할 포트를 param으로 넘겨줍니다.
> tobe에 새롭게 적용한 기능 테스트를 진행 합니다.
first.sh (TYPE) (PORT)
예) first.sh interceptor 9002:9001
2. 두번 째 스크립트
> 두번 째 스크립트는 tobe의 적용 된 사항을 asis에 반영하고 tobe서비스를 종료시키는 내용입니다.
> asis를 재 기동해야하기 때문에 "사용포트"에는 asis가 사용 할 포트를 param으로 넘겨줍니다.
second.sh (TYPE) (PORT)
예) second.sh interceptor 9001:9001
4.2. 첫 번째 스크립트 내용
#!/bin/bash
TYPE=$1
PORT=$2
TOBEPATH=~/srv/$TYPE/tobe
DEPLOYPATH=~/srv/$TYPE/deploy
NGINXPATH=~/srv/nginx/sites-enabled
DOCKERTOBEID=`docker ps | grep interceptor-tobe | cut -d' ' -f1`
DOCKERNGINXID=`docker ps | grep nginx | cut -d' ' -f1`
if [ $TYPE = 'interceptor' ] || [ $TYPE = 'cruiser' ]
then
# tobe 폴더 WAR 파일 삭제
#rm -f $TOBEPATH/lib/$1.war
# WAR 파일 tobe 폴더 복사
#cp $DEPLOYPATH/$1.war $TOBEPATH/lib/
# tobe 서비스 실행
#docker run -d -p 9002:9001 -v $PATH:/srv/app --rm --name $TYPE-tobe --network carrier --ip 172.19.0.3 interceptor
docker run -d -p $PORT -v $TOBEPATH:/srv/app --rm --name $TYPE-tobe --network bridge interceptor
echo 'Please wait for 15 seconds.'
sleep 15
#TODO TOBE서버가 정상적으로 올라왔을 때 아래 로직을 수행
# nginx site-enable에 모든 링크 삭제
rm -f $NGINXPATH/$TYPE-*
# nginx site-enable에 asis-tobe 링크 생성
cd $NGINXPATH
ln -s ../sites-available/$TYPE-asis $TYPE-asis
ln -s ../sites-available/$TYPE-tobe $TYPE-tobe
# nginx reload
docker exec $DOCKERNGINXID nginx -s reload
else
echo 'ERROR....'
echo ' Invalid param...!! param1 TYPE(interceptor||cruiser) param2 PORT(9001:9001)'
echo ' EX)) step1.sh interceptor 9001:9001'
fi
4.3. 두 번째 스크립트 내용
#!/bin/bash
TYPE=$1
PORT=$2
TOBEPATH=~/srv/$TYPE/tobe
ASISPATH=~/srv/$TYPE/asis
DEPLOYPATH=~/srv/$TYPE/deploy
NGINXPATH=~/srv/nginx/sites-enabled
DOCKERASISID=`docker ps | grep interceptor-asis | cut -d' ' -f1`
DOCKERTOBEID=`docker ps | grep interceptor-tobe | cut -d' ' -f1`
DOCKERNGINXID=`docker ps | grep nginx | cut -d' ' -f1`
if [ $TYPE = 'interceptor' ] || [ $TYPE = 'cruiser' ]
then
# nginx sites-enabled에 모든 링크 삭제
rm -f $NGINXPATH/$TYPE-*
# nginx site-enable에 tobe를 운영80포트로 하기위해서 asis로 링크 생성
cd $NGINXPATH
ln -s ../sites-available/$TYPE-tobe $TYPE-asis
# nginx reload
docker exec $DOCKERNGINXID nginx -s reload
# asis 서비스 중지
docker kill $DOCKERASISID
# 서비스 중지 간격주기
sleep 1
# asis 폴더 WAR 파일 삭제
#mv -b $ASISPATH/lib/$TYPE.war $ASISPATH/lib/$TYPE.war.$(date +%Y%m%d)
# WAR 파일 asis 폴더 복사
#cp $TOBEPATH/lib/$TYPE.war $ASISPATH/lib/
# asis 서비스실행
docker run -d -p $PORT -v $ASISPATH:/srv/app --rm --name $TYPE-asis --network bridge interceptor
echo 'Please wait for 15 seconds.'
sleep 15
#TODO: asis 정말 실행 되었는지 확인 로직 필요
# nginx site-enable에 모든 링크 삭제
rm -f $NGINXPATH/$TYPE-*
# nginx site-enable에 tobe 링크 생성
ln -s ../sites-available/$TYPE-asis $TYPE-asis
# nginx reload
docker exec $DOCKERNGINXID nginx -s reload
# tobe 서비스 중지
docker kill $DOCKERTOBEID
else
echo 'ERROR....'
echo ' Invalid param...!! param1 TYPE(interceptor||cruiser) param2 PORT(9001:9001)'
echo ' EX)) step1.sh interceptor 9001:9001'
fi
'인프라 TIP' 카테고리의 다른 글
NGINX 사용을 해보았다 (0) | 2022.04.14 |
---|