Docker 101 (1) - 도커(Docker)란 무엇인가?

My_oyster_house·2024년 4월 8일

<2024년 백엔드 챌린지 4월 특강을 수강하면서 필기한 내용입니다>

도커란 무엇인가?

도커는 소프트웨어를 컨테이너라는 표준화된 단위로 패키징하여, 다양한 컴퓨팅 환경에서 일관되게 실행할 수 있도록 하는 기술이다.
각 컨테이너는 코드, 런타임, 시스템 도구, 라이브러리 등 애플리케이션 실행에 필요한 모든 것을 포함한다.

왜 도커가 필요한가?

프로덕션 환경과 테스트 서버를 일치시키기 위해.

모던 웹 개발에서는 애플리케이션의 일관된 실행 환경을 보장하고, 개발과 배포의 효율성을 높이는 것이 중요하다.

도커는 "작동하지 않음"의 문제를 크게 줄여주며, 애플리케이션의 이식성을 향상시킨다.

프로젝트의 생명주기는 개발자가 회사에 있는것보다 길다! 내 로컬환경에서 구동만 하다가 배포를 배우면 sw 기본적인 개발 사이클을 풀로 경험할 수 있다.

주요 개념

  • 이미지(Image): 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 불변의 템플릿.
  • 컨테이너(Container): 이미지를 실행한 인스턴스. 독립적으로 실행되며, 다른 컨테이너와 시스템 리소스를 공유하지 않는다.
  • 도커 파일(Dockerfile): 도커 이미지를 자동으로 빌드하기 위한 스크립트. 도커 이미지를 만들기 위한 레시피.
  • 도커 허브(Docker Hub): 이미지를 찾고, 공유할 수 있는 클라우드 기반의 서비스. 깃허브 같은 것.

도커 컨테이너 생명주기

도커 컨테이너의 생명주기에는 생성(create), 시작(start), 중지(stop), 삭제(remove) 등의 단계가 있다.

  • 컨테이너는 쓸모가 다하면 새로운 변경 사항을 적용하기 보다는 삭제하고 새로운 컨테이너를 생성하는 것이 일반적인 패턴이다.

도커의 주요 명령어

docker run: 새 컨테이너를 생성하고 실행.
docker ps: 실행 중인 컨테이너 목록을 보여줌.
docker stop: 실행 중인 컨테이너를 중지.
docker rm: 컨테이너를 삭제.

실습

  • 아파치 서버 실행: 아파치 웹 서버를 컨테이너로 실행해보고, 웹 페이지에 접속하여 확인.
    여러 개의 아파치 서버 동시 실행: 동일한 이미지를 사용하여 여러 컨테이너를 생성하고 실행, 각각 다른 포트에서 서비스를 제공.
  • nginx 서버 실행: nginx 웹 서버를 컨테이너로 실행하고 접속해보기.

CI/CD 와 배포 도구

  • CI/CD(Continuous Integration/Continuous Deployment)
    소프트웨어를 지속적으로 통합하고, 변경사항을 지속적으로 배포하는 것.
  • GitHub Actions와 Jenkins
    대표적인 CI/CD 도구인 GitHub Actions와 Jenkins. 소스 코드의 변경 사항을 감지하고 빌드, 테스트, 배포하는 과정을 자동화할 수 있다.

GitHub Actions는 GitHub에서 제공하는 CI/CD 도구로, CI/CD툴따로없이 GitHub와 연동이 되는 것이 장점임. 중앙저장소(깃허브 레포)에 끊임없이 변경사항을 merge하는것이 가능하다.

Jenkins는 전통적인 CI/CD 도구 강자이다. 최근에는 GitHub Actions와 같은 클라우드 기반 도구로의 이전 사례가 늘고 있긴 하지만, 이전부터 Jenkins를 잘 쓰고 있었다면 굳이 바꾸지 않는 회사들도 많다.
기술 스택을 선택할 때 새로운 기술이 제대로 동작하는지 확인하는 테스트 과정이 중요하며, 이는 비즈니스 가치에 직결되기 때문에.
(새 기술도 잘 돌아가냐가 곧 돈)
(배포속도가 다르다고하는데 앱 사용하는데 체감차가 크진 않다고 함)

알면 좋은 내용

컨테이너를 사용하면 좋은점

  • 컨테이너 == 독립된 개발 환경. 여러 서비스를 실행하는 것에 효율성을 제공한다.

isolation과 density

  • isolation : (메모리) 땅따먹기.
    리소스의 분리를 통해 비용 절감과 안정성을 높일 수 있다.

  • density: 컨테이너를 사용해서 하나의 서버에 여러 서비스들을 빽빽하게 올리는 걸 가능하게 한다.

서버를 빵빵한걸 써도 되지만 비용문제가 있음. 우리가 가진 리소스와 자원은 한정적이다.

  • 가상화 기술은 하이퍼바이저와 컨테이너가 있으며, 컨테이너는 효율성과 성능 면에서 가상머신에 비해 우수하다.

배포가 편리해야 하는 이유

  • 배포가 편리해야 하는 이유는 안정성과 개발 효율성을 높이기 위함이다.
  • 사용자 피드백을 받아들이고 적용하기 위해 빠르게 배포할 수 있는 환경이 필요하다.
profile
kwonhs.alice@gmail.com

0개의 댓글