Search

#010 #Docker Compose

Docker 네트워크 개념 간단정리

공유기는 두개의 아이피를 갖는다. 공인 아이피 : 50.20.20.20 사설 아이피: 192.168.0.1
설명
3번의 컴퓨터에서 192.168.0.4 로 요청을 하면, 그 요청은 공유기 까지 갔다가 자신을 찾게 된다.
3번의 컴퓨터에서 50.20.20.20:8003 같은 형식으로 포트포워딩을 한다면 해당 요청은 공유기 바깥 세상을 나가서 다시 되돌온다. → 비효율적
Docekr는 3번의 PC에서 설치가 되면 그 OS 내부에서 Docker만의 사설 네트워크를 갖는다.
Docker의 사설 네트워크는 보통 172.17.0.1 을 사용하게 된다.
Docker 세상은 OS안에 있다. Docekr 세상의 사설 네트워크는 172.17.0.1 세상으로 돌아간다.
172.17.0.1:8004 로 포트포워딩을 해서 LB를 찾을 수 있다. 또는 172.17.0.4:80으로도 LB를 찾을 수 있다.

프록시 패스

서버는 XSS공격 때문에, 자바스크립트 요청을 허용하지 않는다.
대신 Lobby 서버로 ajax나 자바스크립트 요청을 할 수 있는데, 실제 서버에서 LB서버의 요청을 허용하는 작업을 CORS설정이다.
생활코딩 리버스 프록시 꼭 보기!!

ex07

폴더 구조

mySQL 환경변수를 도커파일에 설정하기

세팅할 때 MySQL은 환경변수를 확인해서 세팅을 해준다.
MySQL이 세팅이 될 때, 무조건 ENTRYPOINT를 건들게 되는데, 여기다가 초기세팅이 필요한 쿼리를 넣어두면 만들어준다.
MySQL에서 사용할 수 있는 도커환경변수는 여기에 정리 되어있다.

도커파일 db 세팅

init.sql

db로 빌드 해보자.
docker images로 확인
docker run -dit db bash로 해당 이미지 실행
docker exec -it ac56 bash해당 이미지 접속
mysql version도 확인이 가능하다.
mySQL 이렇게 접속이 가능하다. —→ 접속 안됨 다시 지우고 다시 해보자.

다 지우고 새로 빌드 해보자.

이거 넣고 다시 빌드 하자. 컨테이너 이미지 다삭제하고 다시 해보자.
db안의 도커파일을 굽는다. 여기서 CMD랑 ENTRYPOINT는 여기서 실행되는 것이 아니라. RUN할 때 실행 되는 것.
이미지 실행 아마 엔트리 포인트

mySQL로 들어가보자.

아이피는 로컬 호스트 : 127.0.0.1 포트 : 3308 아이디랑 패스워드는 도커파일에서 확인
DB접속해보면 생성이 된 것이 확인이 가능하다.
이미 다른 터미널이 돌고 있으니까, 같은 ps를 bash로 접근 해보자.

터미널에서도 mysql로 접근이 가능하다.

bash로도 mysql 접근이 가능하다. mysql -u root -p 여기서 enter password에서 아무반응이 없는 것 처럼 보이는데, 비밀번호 입력이 되고 있으니 정확하게 타이핑해서 넣자. 여기선 root1234
비밀번호가 맞으면 격한 환영해준다.

mysql bash 명령어 테스트

show databases; 데이터 베이스 목록을 볼 수 있다.
use blogdb; 명령어로 database를 활성화한다.
show tables;
describe 테이블을 설명해라 이뜻

서버 도커파일

Dockerfile 작성

FROM openjdk:11-jdk-slim RUN apt-get update RUN apt-get install -y git WORKDIR /app COPY ./entrypoint.sh ./entrypoint.sh RUN ["chmod", "+x", "entrypoint.sh"] ENTRYPOINT ["/bin/bash", "./entrypoint.sh"]
JavaScript
복사
도커 파일 설정을 위와 같이 해준다.

entrypoint 작성

git clone https://github.com/busanuv/blog-last.git cd blog-last chmod +x gradlew ./gradlew build chmod +x build/libs/*.jar java -jar -Dspring.profiles.active=docker build/libs/*.jar
JavaScript
복사
환경변수 세팅해야된다. docker-compose에 세팅 해야됨

docker-compse 작성

keep 파일옆에 파일을 생성 해보자.
여기가 도커 이미지 태그명이라고 생각하면 된다.
이건 server 이미지 태그라고 생각하면 된다.
스크립트가 통신으로 일어나니까, db/server중 어느 것이 먼저 끝날지 알수가 없다. 하지만 depends_on 이라는 명령어를 사용하면 server는 db가 다 빌드가 되어야지 server가 run하게 된다.
환경변수를 만들 때, RDS_HOSTNAME 에는 아이피를 미리 알 수 가 없기 때문에 곤란해질 수 있지만, compose에서는 서버명 (태그명)으로 변수를 지정할 수 있게 지원한다. 그래서 db를 적어놓으면, compose는 해당 서비스명을 inspect해서 IP주소를 찾아서 할당한다.
도커파일에서 해당 환경변수 설정이 안된다. compose에 지정해야되는거 잊지말자

docker-compose.yml 전체 코드

docker-compose up 명령어로 전체를 다 빌드하고 연결하고 오만거 쌔만거 다하는 거다. 겁나 편함.
컴포즈 성공!!!!
도커파일에 환경변수가 실행되는 시점이랑 도커컴포즈의 환경변수가 실행되는 시점이 다르다. 변수는 보통 jar파일을 구울 때 실행이 되므로, 해당 서버가 jar파일로 구워질 때 DNS서버로 부터 환경변수를 가져와서 빌드하게 된다.
그래서 오케스트라 서버로 관리해주는 것이 필요하다. 그게 쿠버네티스
도커 레디스 설치 (레디스는 해쉬맵 서버)
요청 - 응답 (JSON)
메모리 데이터 서버 (커밋없음)
채팅 기록
레디스/ 스프링 / 로그인 / 세션기반
레디스 라이브러리로 세션저장
세션을 레디스랑 연결 할 수 있음
세션을 레디스 서버에 저장하고 가져오라는 말이신듯.
redis서버로 세션을 관리하면 스케일 아웃을 할 수 있다는 것이지