본문 바로가기

docker-kub10

MySQL SpringBoot docker-compose the driver has not received any packets from the server. 자주 보던 에러 메시지인데 오늘도 기억이 안나서 시간을 너무 많이 써버렸다. MySQL8.0이상부터는 jdbc:mysql://mysql:3306?allowPublicKeyRetrieval=true allowPublicKeyRetrieval=true 옵션을 써줘야 한다 MITM(Man In The Middle) 공격을 막기 위함이란다. 추가적으로 MySQL 에 depends_on 옵션을 달고 Spring boot에 의존성을 걸어줬는데 몇 번의 커넥션 실패 후에야 성공하는 문제가 있었다. 그건 해당 링크를 보고 해결했다. https://stackoverflow.com/questions/42567475/doc.. 2023. 8. 9.
kubernetes - intro 지금까지 EC2에 도커를 직접 설치해 배포하는 단계 - ECS에 배포하는 단계 들이 있었다. 수동 배포의 문제 1. 자체적으로 모든 리소스들을 관리하고 구성해야 한다. 2. 해당 인스턴스의 운영체제와 어플리케이션에 대한 모든 관리를 해줘야 한다. 3. 컨테이너가 충돌하거나 다운될 수 있으며 새 컨테이너로 교체해야 한다. 이 과정에서의 문제점은 항상 모니터링 하고 있어야 한다. 4. 트래픽의 증가가 생기면 여러 동일한 컨테이너를 직접 실행해줘야 한다. 5. 어플리케이션의 업데이트를 직접 관리해줘야 한다. ECS의 장점 ECS는 위의 문제들을 대부분 해결해줬다. 1. 컨테이너의 헬스체크를 통해 문제가 생기면 컨테이너를 재시작 해준다. 2. 오토스케일링을 통해 가옫 및 실행중인 컨테이너 인스턴스 수를 조절해준.. 2023. 1. 28.
docker - 멀티스테이지 빌드 다양한 프론트엔드 프레임워크가 있지만 package.json 파일을 살펴보면 빌드와 개발 환경의 명령어가 다른 것을 확인할 수 있다. react를 기준으로 이야기하자면 아래 사진의 명령어를 보면 react-script라는 서드파티 패키지를 이용한 컴파일이고 start는 개발 모드라고 보면 된다. 개발 모드 - hot-module-replace가 동작해 수정과 동시에 화면이 변경된다. - 에러가 있을시 브라우저에 메시지를 출력한다. - 디버깅을 위한 무거운 서버가 제공된다. - react 코드가 node 환경에 종속되는 것을 의미한다. 운영 모드 - build는 배포 환경에서 사용할 파일을 압축 형태로 만들어준다. 그러면 우리가 선택한 웹 서버의 도움을 받아 스스로 서비스를 제공할 수 있다. - 파일만 있.. 2023. 1. 15.
ECS를 이용한 배포 1. 단일 컨테이너를 ECS에 배포하기 ECS를 사용하기 전에 직접 로컬에서 만든 이미지를 docker hub에 올리고 EC2 등의 서버에 ssh 접속을 통해 빌드 해 주는 방법도 있다. 하지만 너무 불편하다 또한 로드 밸런서를 사용하려고 한다면 새로운 서버가 생성될 때마다 배포를 해줘야 하는데 현실적으로 말이 안된다. 따라서 ECS를 사용하려고 한다. ECS는 클러스터, 컨테이너, 테스크, 서비스 네 가지 범주로 구분된다. ECS 설정을 하면서 각각의 레이어가 어떤것을 의미하는지 알아보자. 1. Container 컨테이너부터 만들어보자 네 가지 옵션이 있는데 우선 커스텀 옵션을 통해 단일 컨테이너를 배포해보자. 컨테이너를 만드는데 들어가는 설정들은 모두 docker run 시에 추가되는 옵션이라고 보면.. 2023. 1. 2.
docker - Docker Compose, utility container Docker Compose 지금까지 하나의 컨테이너 실행을 위해서 길고 긴 명령어를 사용해야 했다. 명령어가 길어지면 오류가 생길 가능성이 높다. 또한 배포 환경에서는 적합하지 않다. Docker Compose란? - docker build와 docker run 등의 명령을 대체할 수 있는 일종의 자동화 도구, 설정파일로 다중 컨테이너 애플리케이션을 시작하거나 중단할 수 있다. - Dockerfile나 Image, Container 대체하는 개념이 아니다. - 단일 호스트에서 멀티 컨테이너 환경을 구축하고자 할 때 적합하다 version: '3.8' services: mongodb: image: 'mongo' # 몽고DB 이미지 이름 지정 volumes: - data:/data/db # 명명된 볼륨 co.. 2022. 11. 13.
docker - 멀티 컨테이너 어플리케이션 지난번 포스팅에서 두 가지의 컨테이너를 띄우고 둘 사이의 네트워킹 방법에 대해 알아봤는다. 보통 도커는 각각의 어플리케이션마다 컨테이너를 띄우는 다중 컨테이너로 구성한다. 그게 도커에서 권장하는 방법이다. 개발 환경에서 해당 요구사항을 반영해서 어플리케이션을 각각 컨테이너화 해보자 주의해야 할 점 1. 몽고DB의 데이터는 항상 볼륨에 저장되어야 하며 2. 접근은 ID와 비밀번호를 통해 접속할 수 있어야 한다. 백엔드 어플리케이션은 1. 데이터가 항상 유지되어야 하며 2. 개발 환경을 가정했으므로 코드 변동이 자동 적용되어야 한다. 프론트 어플리케이션은 1. 코드 변동이 자동으로 적용돼야 한다. 1. 몽고DB docker run --name mongodb --rm -d -p 27017:27017 mongo.. 2022. 10. 30.
docker - 네트워킹 컨테이너에서의 네트워킹에 대해 생각해보면 세 가지로 나눠 볼 수 있다. 1. 컨테이너와 외부 URL과의 통신 2. 호스트 머신과의 통신 3. 가상화된 DB 등과의 컨테이너간 통신 1. 컨테이너와 외부 URL과의 통신 첫번째는 당연하게도 그냥 url이나 ip주소 갖다 넣으면 된다. 2. 호스트 머신과의 통신 mongoose.connect( 'mongodb://localhost:27017/swfavorites', { useNewUrlParser: true }, (err) => { if (err) { console.log(err); } else { app.listen(3000); } } ); 코드에 위와 같은 부분이 있고 호스트 머신에 몽고 DB가 설치되어 있는 상황을 가정했을 때 위의 코드를 다른 node .. 2022. 10. 19.
docker - 데이터 관리(볼륨), .dockerignore, 환경변수, 매개변수 1. 익명볼륨과 명명된 볼륨 이미지가 빌드되면 내부의 코드는 변경될 수 없다. 모든 명령이 실행되면 이미지는 읽기 전용이기 때문에 무언가를 변경하려면 리빌드 해야한다. 컨테이너에서 데이터는 세가지 종류로 분류할 수 있다. 하나는 어플리케이션 데이터, 두번째는 임시 데이터, 마지막은 영구 데이터 어플리케이션 데이터는 우리가 만든 웹 어플리케이션이라고 할 수 있고 이미지에 의해 변경될 수 없다. 임시 데이터는 로그와 같은 데이터로 read와 write를 할 수 있지만 컨테이너 안에 저장된다. 마지막으로 영구 데이터는 DB에 저장되는 정보 같은것을 의미하며 볼륨이라는 곳에 저장된다. 데이터 구조는 다음과 같이 생각하면 된다. 파일을 생성하는 어플리케이션을 실행시켜서 실행버튼을 누르면 로컬 머신에는 뜨지 않고 .. 2022. 10. 6.
docker - 기본 명령어 기본명령어 docker ps 실행 중인 모든 컨테이너를 디폴트로 보여준다. docker ps -a 더이상 실행되지 않는 중지된 컨테이너를 포함해 과거에 있었던 모든 컨테이너가 표시된다. 참고로 ps는 process status라고 한다. docker ps --help docker ps에 사용 가능한 모든 구성 옵션이 표시된다. docker run을 이용하면 현재 이미지를 기반으로 컨테이너를 시작한다. 하지만 항상 새로운 이미지로 시작할 필요는 없다. 이미지가 변경되지 않은 경우 기존 컨테이너를 시작하면 되는데 바로 위에서 봤던 docker ps -a을 통해 히스토리를 보고 다시 실행할 컨테이너를 고른다. 여기서 docker start peaceful_kalam 를 입력하면 기존의 컨테이너를 재시작 할 수.. 2022. 10. 4.
docker - introduction docker란? docker는 컨테이너의 생성 및 관리 프로세스를 단순화하는 도구이다. 도커를 가장 최근에 프로젝트를 실행하는데 사용했는데 제공자분이 다음과 같은 docker-compose.yml 파일을 만들어서 주셨고 나는 로컬에서 docker run을 통해 동일한 mysql 환경을 구축해 코드로 구현된 직접 JDBC 접속을 해야하는 실습을 예외 없이 진행할 수 있었다. version: "3.9" services: db: image: mysql:8.0.30 platform: linux/x86_64 restart: always ports: - "3308:3306" environment: MYSQL_ROOT_PASSWORD: mypass1 MYSQL_DATABASE: springbook MYSQL_USER.. 2022. 9. 8.