도커 컨테이너 안티 패턴

이 블로그에서는 지난 몇 달 동안 제가 본 10가지 컨테이너 안티 패턴에 대해 설명합니다:

  1. 컨테이너의 데이터 또는 로그 - 컨테이너는 상태 비저장 애플리케이션에 이상적이며 일시적인 용도로 사용됩니다. 즉, 컨테이너에 데이터나 로그를 저장하지 않으면 컨테이너가 종료될 때 손실됩니다. 대신 볼륨 매핑 를 사용하여 컨테이너 외부에 유지합니다. ELK 스택 를 사용하여 로그를 저장하고 처리할 수 있습니다. 초기 테스트 과정에서 관리 볼륨을 사용하는 경우 다음을 사용하여 제거합니다. -v 스위치로 도커 RM 명령을 사용합니다.
  2.  컨테이너의 IP 주소 - 각 컨테이너에는 IP 주소가 할당됩니다. 예를 들어 애플리케이션 서버에 배포된 애플리케이션은 데이터베이스와 통신해야 하는 등 여러 컨테이너가 서로 통신하여 애플리케이션을 생성합니다. 기존 컨테이너는 종료되고 새 컨테이너가 항상 시작됩니다. 컨테이너의 IP 주소에 의존하면 애플리케이션 구성을 지속적으로 업데이트해야 합니다. 이렇게 하면 애플리케이션이 취약해집니다. 대신 서비스를 생성하세요. 이렇게 하면 컨테이너의 수 증가 및 감소에 관계없이 참조할 수 있는 논리적 이름이 제공됩니다. 또한 기본적인 로드 밸런싱도 제공합니다.
  3. 컨테이너에서 단일 프로세스 실행 - A 도커파일 하나를 사용했습니다. CMD 그리고 엔트리포인트. 종종 CMD는 이미지의 일부 구성을 수행한 다음 컨테이너를 시작하는 스크립트를 사용합니다. 해당 스크립트를 사용하여 여러 프로세스를 시작하려고 하지 마세요. 다음을 따르는 것이 중요합니다. 우려 사항 분리 패턴을 사용해야 합니다. 이렇게 하면 컨테이너 관리, 로그 수집, 각 개별 프로세스 업데이트가 훨씬 더 어려워집니다. 애플리케이션을 여러 개의 컨테이너로 분할하여 독립적으로 관리하는 것을 고려할 수 있습니다.
  4. 사용하지 마십시오. 도커 실행 - 그리고 도커 실행 명령은 실행 중인 컨테이너에서 새 명령을 시작합니다. 이 명령은 docker exec -it {cid} bash를 사용하여 셸을 연결할 때 유용합니다. 그러나 컨테이너가 이미 실행되어야 하는 프로세스를 실행하고 있다는 점 외에는 문제가 없습니다.
  5. 간결한 이미지 유지 - 새 디렉터리를 만들고 해당 디렉터리에 Docker파일 및 기타 관련 파일을 포함합니다. 또한 이미지를 만들기 전에 .dockerignore를 사용하여 로그, 소스 코드, 로그 등을 모두 제거하는 것도 고려해 보세요. 다운로드한 아티팩트의 압축을 푼 후에는 반드시 제거하세요.
  6. 실행 중인 컨테이너에서 이미지 만들기 - 새 이미지는 다음을 사용하여 만들 수 있습니다. 도커 커밋 명령을 사용합니다. 이 명령은 컨테이너에 변경 사항이 있을 때 유용합니다. 그러나 이 방법으로 생성된 이미지는 재생산할 수 없습니다. 대신 Docker파일을 변경하고 기존 컨테이너를 종료한 후 업데이트된 이미지로 새 컨테이너를 시작하세요.
  7. Docker 이미지의 보안 자격 증명 - 보안 자격 증명을 Docker파일에 저장하지 마세요. 보안 자격 증명은 일반 텍스트로 저장되며 리포지토리에 체크인됩니다. 이렇게 하면 완전히 취약해집니다. 사용 -e 를 사용하여 암호를 런타임 환경 변수로 지정할 수 있습니다. 또는 --env-file 를 사용하여 파일에서 환경 변수를 읽을 수 있습니다. 또 다른 접근 방식은 CMD 또는 엔트리포인트 를 클릭하여 스크립트를 지정합니다. 이 스크립트는 타사에서 자격 증명을 가져온 다음 애플리케이션을 구성합니다.
  8. 최신 태그: 다음과 같은 이미지로 시작 카우치베이스 가 유혹적입니다. 태그를 지정하지 않으면 이미지를 사용하여 컨테이너가 시작됩니다. 카우치베이스:최신. 이 이미지는 실제로 최신 버전이 아니며 이전 버전을 참조할 수 있습니다. 애플리케이션을 프로덕션 환경에 적용하려면 정확한 버전의 이미지가 있는 완전한 컨트롤러 환경이 필요합니다. 다음 내용을 읽어보세요. Docker: 최근의 혼란 동료 도커 캡틴의 게시물 @adrianmouat. 컨테이너를 실행할 때는 항상 태그를 사용해야 합니다. 예를 들어 카우치베이스:엔터프라이즈-4.5.1 대신 카우치베이스.
  9. 임피던스 불일치 - 개발, 테스트, 스테이징 및 프로덕션 환경에서 다른 이미지나 다른 태그를 사용하지 마세요. '진실의 소스'가 되는 이미지는 한 번만 만들어서 리포지토리에 푸시해야 합니다. 이 이미지는 앞으로 다른 환경에서 사용해야 합니다. 경우에 따라서는 maven 빌드의 일부로 WAR 파일에서 단위 테스트를 실행한 다음 이미지를 만드는 것을 고려할 수 있습니다. 그러나 모든 시스템 통합 테스트는 프로덕션에 푸시될 이미지에서 수행해야 합니다.
  10. 게시 포트 - 사용하지 마십시오. -P 를 사용하여 노출된 모든 포트를 게시합니다. 이렇게 하면 여러 컨테이너를 실행하고 노출된 포트를 게시할 수 있습니다. 그러나 이는 모든 포트가 게시된다는 의미이기도 합니다. 대신 -p 를 사용하여 특정 포트를 게시할 수 있습니다.

트위터에서의 토론을 바탕으로 더 추가 ...

  1. 루트 사용자 - 컨테이너를 루트 사용자로 실행하지 마세요. 호스트와 컨테이너는 동일한 커널을 공유합니다. 컨테이너가 손상되면 루트 사용자가 기본 호스트에 더 많은 피해를 줄 수 있습니다. 사용 RUN 그룹 추가 -r couchbase && 사용자 추가 -r -g couchbase 카우치베이스 을 클릭하여 그룹과 그 안에 사용자를 만듭니다. 그룹을 만들려면 USER 명령어를 사용하여 해당 사용자로 전환합니다. 각 USER 를 클릭하면 이미지에 새 레이어가 만들어집니다. 레이어 수를 줄이기 위해 사용자를 앞뒤로 전환하지 마세요. 덕분에 알렉산다르_78 이 팁에 감사드립니다!
  2. 컨테이너 간 종속성 - 애플리케이션은 종종 컨테이너를 특정 순서대로 시작해야 하는 경우가 많습니다. 예를 들어, 애플리케이션이 데이터베이스 컨테이너에 연결하려면 먼저 데이터베이스 컨테이너가 가동되어야 합니다. 컨테이너는 언제든지 종료되거나 시작될 수 있으므로 애플리케이션은 이러한 변경에 탄력적으로 대응해야 합니다. 이 경우 계속 진행하기 전에 애플리케이션 컨테이너가 데이터베이스 연결이 성공할 때까지 기다리도록 하세요. 컨테이너가 특정 순서로 시작되도록 Docker파일에서 대기 스크립트를 사용하지 마세요. 특히 특정 컨테이너가 시작될 때까지 특정 시간(초)을 기다리는 것은 매우 취약합니다. 덕분에 @ratnopam 이 팁에 감사드립니다!

다른 어떤 안티 패턴을 따르고 있나요? Java 개발자를 위한 Docker 는 Java 개발자를 위한 Docker를 시작하는 방법을 설명하는 자기 주도형 실습 워크샵입니다. 더 심층적인 튜토리얼에 관심이 있으신가요? JavaOne에서 제공하는 2시간짜리 튜토리얼을 시청하세요! couchbase.com/containers 는 다양한 프레임워크에서 Couchbase를 실행하는 방법을 보여줍니다.

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 Arun Gupta, 개발자 지원 부문 부사장, Couchbase

아룬 굽타는 Couchbase의 개발자 지원 담당 부사장입니다. 그는 Sun, Oracle, Red Hat에서 10년 이상 개발자 커뮤니티를 구축하고 이끌었습니다. 그는 콘텐츠, 마케팅 캠페인 및 프로그램의 전략, 계획 및 실행을 개발 및 실행하는 교차 기능 팀을 이끄는 데 있어 깊은 전문성을 보유하고 있습니다. 그 전에는 Sun에서 엔지니어링 팀을 이끌었으며 Java EE 팀의 창립 멤버입니다. Gupta는 기술에 관한 블로그 게시물을 2,000개 이상 작성했습니다. 40여 개국에서 수많은 주제에 대해 광범위한 강연 경험을 가지고 있으며, 3년 연속 JavaOne Rock Star로 선정되었습니다. 또한 미국에서 Devoxx4Kids 지부를 설립하여 어린이를 대상으로 한 기술 교육을 지속적으로 장려하고 있습니다. 기술에 관한 여러 권의 책을 저술했으며, 열렬한 마라토너이자 지구를 횡단하는 사람, Java 챔피언, JUG 리더, NetBeans 드림팀 멤버, Docker 캡틴이기도 한 그는 @arungupta에서 쉽게 만나볼 수 있습니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.