본문 바로가기

Docker

도커(docker)와 Github action(깃헙 액션)으로 CI/CD 구현하기 1. CI/CD란? 1) 정의 CI(Continuous Integration, 지속적 통합) 여러 개발자들이 함께 개발하는 과정에서 코드가 잘 작동하는지 확인하는 것 CD(Continuous Deployment, 지속적 배포) 소스코드가 실제 서비스에 자동으로 반영되도록 배포하는 것 2) 필요성 - 개발은 혼자하지 않고 여러명의 개발자가 함께 하기 때문에 서로의 작업 영역이 충돌이 발생할 가능성이 존재함 - 정상적인 자동 배포(CD)를 하기 위해서 필요한 과정(CI) 3) 방법 테스트 코드를 작성하여 자동화된 테스트 실행하여 통합하고 테스트가 정상 완료되면 배포 자동화 툴 종류로는 github action, Travis, Circle CI, Jenkins 등이 있고 github action을 이용한 CI.. 더보기
도커(docker) 사용 🍯꿀 팁! 1. Docker layer caching을 활용하여 빌드 속도 빠르게 하기 1) Docker image가 빌드되는 방법 명령어 하나가 실행될 때마다 layer가 생성되는 방식으로 빌드 2) layer caching을 활용하여 속도 높이기 - 자주 변경되는 부분이 dockerfile의 위쪽에 있게 된다면 layer caching을 활용하지 못함 - 자주 변경되는 파일은 app.py와 index.html인 경우가 많음 - 자주 변경되는 파일을 아래로 작성하여 layer caching을 활용하자 // 좋은 예 FROM python:3.8 ADD requirements.txt . RUN pip install -r requirements.txt ADD app.py . ADD templates ./template.. 더보기
[Docker] 도커의 데이터 공유 - named volume, bind mount 컨테이너와 호스트 간 데이터를 공유하는데 사용하는 두 가지 방법인 named volume과 bind mount 1. Named Volume 도커에서 지원하는 데이터 저장 및 공유를 위한 메커니즘 중 하나 도커가 데이터를 저장하는 별도의 볼륨을 생성하며, 이 볼륨의 이름은 사용자가 정의함 볼륨은 도커 엔진에 의해 관리되며, 컨테이너와 볼륨 사이에는 경로가 있지만 호스트 파일 시스템과는 직접적으로 연결되지 않음 도커 엔진이 데이터를 보다 안전하게 관리할 수 있고 여러 컨테이너 간에 데이터를 쉽게 공유할 수 있음 1) named volume 생성 docker volume create {볼륨명} // 예시 docker volume create myvolume 2) named volume 정보 보기 docker .. 더보기
AWS EC2 서버에서 도커(docker)로 서비스 배포하기 1. EC2서버 접속 ssh -i {~/.ssh/sparta-docker.pem} ec2-user@{public_ip} 2. yum: Amazon linux에서 패키지를 관리하는 CLI 툴, 업데이트 확인 sudo yum update -y 3. amazon-linux-extras를 사용하여 docker 설치 sudo amazon-linux-extras install docker -y 4. docker 실행 sudo service docker start 5. docker 상태 확인 service docker status 6. ec2-user에게 docker 실행 권한 부여 - 바로 적용되지 않고 재 접속해야 적용됨 exit로 종료 후 재 접속 필요 sudo usermod -a -G docker ec2-us.. 더보기
도커(docker) 사용하지 않는 docker 리소스 정리하기 1. 현재 리소스 확인하기 // container 확인 docker ps // image 확인 docker images // network 확인 docker network ls // volume 확인 docker volume ls 2. 리소스 삭제하기 // container 삭제 docker rm container_id // image 삭제 docker rmi image_id // network 삭제 docker network rm network_id // volume 삭제 docker volume rm volume_id // 정지된 컨테이너, 사용되지 않는 네트워크, 이미지, 빌드 캐시를 일괄 삭제 docker system prune // -a옵션으로 더 강력한 일괄 삭제, 사용되지 않는 로컬 이미지도.. 더보기
도커(docker) 컨테이너 리소스 사용량 제한하기 1. 리소스 사용량을 제한해야하는 이유 도커는 호스트의 디스크와 메모리를 같이 사용하기 때문에 최악의 경우 다른 프로세스에도 영향을 줄 수 있음 1) 메모리 부족 호스트의 커널에서 OOME(Out Of Memory Exception)을 일으켜서 여유 memory를 생성하기 위해 프로세스 삭제 2) 한 컨테이너에 cpu 독점 다른 컨테이너에 cpu가 할당되지 않아 정상 작동하지 못함 3) 디스크 부족 데이터를 디스크에 저장하지 못하거나 새로운 프로세스를 정상 사용하지 못하는 경우 발생 2. 리소스 제한하는 방법 1) 메모리 제한 docker run -it -m 10m python:3.8 2) cpu 제한 docker run -it --cpus=0.5 python:3.8 cf. 사용하고 있는 리소스 확인 d.. 더보기
[Docker] 도커(docker) 편리하게 실행하기 - Docker-compose 1. Docker-compose란?- 여러 컨테이너를 편리하게 실행하기 위해서 만들어진 도구- YAML 파일을 통해 컨테이너를 실행하는데 필요한 옵션(실행 방법, 버전 관리 등) 정의   2. Docker-compose 사용을 위해 필요한 것1) Docker-compose.YAML 파일 👈🏻 직접 만들어야함 큰 틀에서 구성요소는 services, network, volume, config, secret(version은 deprecated 되어 설정하지 않아도 됨) 2) Docker-compose 실행 파일 👈🏻 mac/window 용 도커에 기본으로 되어있음 *YAML(Ain't Markup Language): 데이터를 저장하는 파일 포맷으로 비슷한 형식으로 XML과 JSON이 있지만 사람이 읽기.. 더보기
[Docker] 여러개의 컨테이너 연결하기 - Docker network 1. Docker network란?- 도커 컨테이너는 분리된 파일 시스템과 네트워크를 갖고있어서 설정하지 않으면 파일 시스템과 네트워크 통신이 불가능함- network를 통해서 도커 컨테이너끼리 통신할 수 있게 만들 수 있음  2. network 확인 1) 도커 네트워크 확인docker network ls 2) 도커 네트워크 상세 정보 확인docker network inspect bridge    3. 사용자 정의 network 설정하기 1) 네트워크 생성 docker network create {생성할 네트워크 이름}  2) 네트워크 연결과 컨테이너 실행docker run -d -p 24017:24017 --network {네트워크명} --networ.. 더보기