갬미의 성장일기
Day 38 - docker-compose 3tier, SQL (간단), GCP 가입 본문
오늘 배운 내용
- 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 플랫폼 들어가기
클라우드 컴퓨팅 서비스 | Google Cloud
데이터 관리, 하이브리드 및 멀티 클라우드, AI와 머신러닝 등 Google의 클라우드 컴퓨팅 서비스로 비즈니스 당면 과제를 해결하세요.
cloud.google.com
정보 입력하면 끝!
300 크래딧이 들어왔다 ><
오늘의 회고
- 도커를 마쳤다,,! 내일부터는 관리형 k8s를 한다 (gcp로)
- 먼가,, 신기함 오늘은 운동 다녀와서 공부하고 복습하고 자야겠다
'Cloud > Cloud 공부일기' 카테고리의 다른 글
Day 40 - Google Cloud CLI, Docker DeskTop 설치 (0) | 2022.03.07 |
---|---|
Day 39 - GCP 가상머신 만들기, 도커, 쿠버네티스 설치 및 테스트 (0) | 2022.03.04 |
Day 37 - 도커, 도커 컴포즈 3tier (0) | 2022.03.02 |
Day 36 - 도커 네트워크 | 도커 3tier (0) | 2022.02.28 |
Day 35 - 네트워크 특강 (0) | 2022.02.25 |