👉 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 세팅
FROM mysql COPY init.sql /docker-entrypoint-initdb.d/init.sql ENV MYSQL_USER=ssar ENV MYSQL_PASSWORD=ssar1234 ENV MYSQL_ROOT_PASSWORD=root1234 ENV MYSQL_DATABASE=blogdb CMD ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"] EXPOSE 3306
init.sql
use blogdb; CREATE TABLE IF NOT EXISTS user_tb ( id integer auto_increment, created_at timestamp, email varchar(20) not null, password varchar(60) not null, username varchar(20) not null unique, profile varchar(100), primary key (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE IF NOT EXISTS board_tb ( id integer auto_increment, content varchar(10000), created_at timestamp, title varchar(100) not null, user_id integer, primary key (id), constraint fk_board_user_id foreign key (user_id) references user_tb (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE IF NOT EXISTS reply_tb ( id integer auto_increment, comment varchar(100) not null, created_at timestamp, board_id integer, user_id integer, primary key (id), constraint fk_reply_board_id foreign key (board_id) references board_tb (id), constraint fk_reply_user_id foreign key (user_id) references user_tb (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; FLUSH PRIVILEGES;

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"]
도커 파일 설정을 위와 같이 해준다.
🔹 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

환경변수 세팅해야된다. 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 전체 코드
version: '3' services: db: build: context: ./db ports: - 3306:3306 restart: always server: build: context: ./server ports: - 8080:8080 restart: always depends_on: - db environment: RDS_HOSTNAME: db RDS_PORT: 3306 RDS_USERNAME: ssar RDS_PASSWORD: ssar1234 RDS_DB_NAME: blogdb

docker-compose up
명령어로
전체를 다 빌드하고 연결하고 오만거 쌔만거 다하는 거다. 겁나 편함.
컴포즈 성공!!!!


도커파일에 환경변수가 실행되는 시점이랑 도커컴포즈의 환경변수가 실행되는 시점이 다르다.
변수는 보통 jar파일을 구울 때 실행이 되므로, 해당 서버가 jar파일로 구워질 때 DNS서버로 부터 환경변수를 가져와서 빌드하게 된다.

그래서 오케스트라 서버로 관리해주는 것이 필요하다.
그게 쿠버네티스
도커 레디스 설치 (레디스는 해쉬맵 서버)
요청 - 응답 (JSON)
메모리 데이터 서버 (커밋없음)
- 채팅 기록
- 레디스/ 스프링 / 로그인 / 세션기반
- 레디스 라이브러리로 세션저장
- 세션을 레디스랑 연결 할 수 있음

- 세션을 레디스 서버에 저장하고 가져오라는 말이신듯.


redis서버로 세션을 관리하면 스케일 아웃을 할 수 있다는 것이지