갬미의 성장일기

Day 38 - docker-compose 3tier, SQL (간단), GCP 가입 본문

Cloud/Cloud 공부일기

Day 38 - docker-compose 3tier, SQL (간단), GCP 가입

갬미 2022. 3. 3. 18:35

오늘 배운 내용

- docker-compose 3tier (과제 점검) 

- SQL

- GCP 가입

 

과제 점검 - docker-compose로 3tier 구성하기

docker-compose.yml

services:
  mysql-svc:
    image: mysql:5.7
    env_file: /docker/db/env/.env
    environment:
      TZ: Asia/Seoul

  mywas:
    image: gymin97/msa:java-was
    restart: always

  mynginx:
    image: nginx
    volumes:
      - /docker/nginx/conf:/etc/nginx/conf.d
      - /docker/nginx/log:/var/log/nginx
    ports:
      - "80:80"

 

was.conf

upstream mywas {
    ip_hash;
    server mywas:8080;
    }

server {
    listen 80;
    server_name myweb;
    access_log /var/log/nginx/test1.log;

location / {

        #root /usr/share/nginx/html;
        index index.html index.htm index.jsp;
        proxy_pass http://mywas;
    }

    location ~ \.(css|js|jpg|jpeg|gif|htm|html|swf)$ {
        root /usr/share/nginx/html;
        index index.html index.htm;
    }

    location ~ \.(jsp|do)$ {
    index index.jsp;
        proxy_pass http://was;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_set_header Host $http_host;
    
    proxy_redirect off;
    charset utf-8;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

mywas에서 포트를 지정하지 않아서 원 포트인 8080으로 붙었고 그에따라 upstream부분에서 8080을 붙여주면 된다

 

어제 해봤던건데 ,, ,,, 문제 해결방법이 떠오르지 않았던 이유는 ㅎㅐ결했기때문이었다 ..

어제 생겼던 문제들 

문제 1 - DB 서버는 실행을 해도 ps를 보면 계속 excite로 켜지지 않는다

-> 과제하면서 여러번 docker compose down, 이미지 삭제, 다시 실행 등을 반복하다가 꼬여버린것 같다.. 

-> DB가 제대로 실행되지 않는 문제였고 이미지를 아예 다 지웠다가 다시 docker-compose up -d 하면 잘 되었다

-> 하지만 이것도 여러번 하다보니까  no space left on device 오류가 발생했고, 해결 방법은 다음 링크를 참고하면 된다 https://gammistory.tistory.com/134

 

[Docker] no space left on device 에러 해결방법

docker-compose 에서 이미지를 받아올라니까 계속  no space left on device 오류가 떴다 이미지만 따로 받아오려고 해도 계속 공간이 없다고 한다 나는 이미지, 컨테이너 모두 돌아가는게 없는 상황이었

gammistory.tistory.com

 

문제 2 - was 서버는 잘 켜졌다가 갑자기 다운되어버린다

-> 작동 순서가 DB-WAS-WEB순으로 실행되어야 하는데 DB가 켜지지 않아 금방 was가 죽은거였다!

 

DB부터 켜지지 않으니 올바른 yml, conf파일을 줘도 실행이 안되었던 것이었다(또륵,,) 


이곳은 한국 DB 서버에서 한글이 안된다면 큰 문제 - 한글이 되게 하자

한글 깨짐 문제

 

먼저 host에 utf-8 설정 파일을 만든다

mkdir -p /docker/db/conf.d
cat <<EOF | sudo tee /docker/db/conf.d/my.cnf

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server           = utf8mb4
collation-server               = utf8mb4_unicode_ci
EOF

docker-compose.yml 파일을 수정한다 (mysql-svc vloume옵션)

services:    
  mysql-svc:
    image: mysql:5.7
    env_file: /docker/db/env/.env
    environment:
      TZ: Asia/Seoul
    volumes:
    - /docker/db/conf.d:/etc/mysql/
    
  mywas:
    image: gymin97/msa:java-was
    restart: always

  myweb:
    image: nginx
    volumes:
    - ./conf:/etc/nginx/conf.d
    - ./log:/var/log/nginx
    ports:
    - "80:80"

이후 DB 서버에 접속하여 잘 마운트 되었나 확인하고, db 한글이 잘 뜨나 확인한다

docker-compose ps
docker exec -it e63 bash
cd /etc/mysql
ls

DB에 한글 추가하고 확인

mysql use -u frodo -p
use frodo
select * from user

 

참고

 

컨테이너 MySQL 한글 인코딩 해결 방법

컨테이너로 기동한 mysql의 database와 table의 한글 깨지는 현상을 해결하기 위한 utf-8 인코딩 방법

velog.io


Docker-compose Depends on

docker-compose, 일괄적으로 db-was-web을 연결했을때 바로 웹에 접속이 안되고 조금 기다렸다가 접속해야 한다

 

왜 그럴까?

DB가 뜨고 WAS가 뜨고 나서야 nginx에 접속할 수 있기 때문이다. (순서가 있음)

명령어로 했을때는 DB-WAS-WEB 순서대로 run 했기때문에 괜찮았던것 (shell 스크립트를 만들었을때도 DB-was-web을 기다리느라 바로 접속이 안된것이다)

 

이럴때는 yml파일에 depands_on 옵션을 주어 명령어 실행때 처럼 하나하나 띄워지게 하면 된다

services:    
  mysql-svc:
    image: mysql:5.7
    env_file: /docker/db/env/.env
    environment:
      TZ: Asia/Seoul
    volumes:
    - /docker/db/conf.d:/etc/mysql/
    
  mywas:
    image: gymin97/msa:java-was
    restart: always
    depends_on: 
    - "mysql-svc"
    
  myweb:
    image: nginx
    volumes:
    - ./conf:/etc/nginx/conf.d
    - ./log:/var/log/nginx
    ports:
    - "80:80"
    depends_on:
    - "mywas"

이외 다양한 옵션들

 

[Docker CE] docker-compose 문법 간단 정리 (2) (ports, expose, depends_on, nevironment, env_file, container_name, labels, v

1편 (image, build, command, entrypoint, links) : https://nirsa.tistory.com/79?category=868315 5. ports ports는 호스트OS와 컨테이너의 포트를 바인딩 시켜줍니다. 참고로 아래 docker-compose.yml을 작성할..

nirsa.tistory.com


웹 페이지에서 말고, DataBase에서 SQL 명령어로 정보 입력하기

DB에서 정보 추가하기 (SQL 명령어)

sql insert 문을 사용하면 된다

docker exec -it e63 bash
mysql -u frodo -p

show tables; # 테이블 목록 보기

select * from user; # 현재 data
insert into user values (2,' b@b.com', 'MkLee');
select * from user; # 쿼리가 들어갔는지 확인

 

 

db에서 정보 수정하기

update table set 열 = 'data' where 열2 = 'data2'

열2 내용이 data2인 곳의 열 데이터를 'data'로 바꾸어라

update user set name = 'MarkLee' where id = 2 ;

데이터 삭제하기

delete user where id = 2;

user table에서 id가 2인 데이터를 지워라

delete from user where id = 2;

 

참고!

 

[MySQL] 데이터 추가, 수정, 삭제 (INSERT, UPDATE, DELETE)

▶MySQL 데이터 추가, 수정, 삭제 (INSERT, UPDATE, DELETE) ▶데이터 추가 (INSERT) 사용법 INSERT INTO 테이블명 [컬럼1, 컬럼2, ...] VALUES (값1, 값2, ...); 예제 : 전체 컬럼 INSERT INTO table_name VALUES..

extbrain.tistory.com


GCP 계정 만들기

GCP 플랫폼 들어가기

https://cloud.google.com/

 

클라우드 컴퓨팅 서비스  |  Google Cloud

데이터 관리, 하이브리드 및 멀티 클라우드, AI와 머신러닝 등 Google의 클라우드 컴퓨팅 서비스로 비즈니스 당면 과제를 해결하세요.

cloud.google.com

정보 입력하면 끝!

300 크래딧이 들어왔다 ><

 

오늘의 회고

  • 도커를 마쳤다,,! 내일부터는 관리형 k8s를 한다 (gcp로)
  • 먼가,, 신기함 오늘은 운동 다녀와서 공부하고 복습하고 자야겠다
Comments