Docker Compose: 완벽한 개발 환경

7191 단어 devopsdockerwebdev

현지 환경이 복잡하다


전면적인 프로젝트에 주력하고 우리 현지의 발전 환경을 최신으로 유지하는 것은 결코 간단한 임무가 아니다!오늘날, 마이크로 서비스는 어디에나 있고, 우리가 작성한 코드는 더욱 적지만, 환경은 더욱 복잡해진다.모든 서비스는 최소한 하나의 데이터베이스에 연결해야 한다. (더 많지 않으면)그것은 정상적으로 일할 수 있도록 다른 서비스가 필요할 수도 있다.어떤 사람들은 무대에 오르는 환경이 우리의 모든 문제의 해결 방안이라고 말할 수 있지만, 나는 이런 견해에 동의하지 않는다.개발자마다 주어진 서비스의 버전이 다르거나 데이터베이스에 다른 값을 채워야 하기 때문이다.
우리는 어떻게 이런 의존 관계를 추적합니까?우리는 어떻게 정확한 설정에서 팀원들과 합작합니까?아니면 우리 일을 나눠서 환경을 만들면 다른 사람들이 이러지 않아도 된다고요?
Docker, 빨리 구출해!🦸‍♂️

Docker는 도대체 뭘 쓰고 있는 거야?


창작을 시작하기 전에 우리는 용기혁명을 이해해야 한다.용기는 소프트웨어 포장의 표준화 부품이다.같은 용기는 개발, 테스트와 생산에 사용할 수 있다.네가 어떤 언어나 프레임을 사용하든지 간에 용기는 모든 물건을 포장할 수 있다.이것은 이미 오랫동안 존재해 온 기술이지만, Docker는 개발자로 하여금 그것들을 매우 쉽게 구축하고 사용할 수 있게 한다.
따라서 Docker는 실행 시, 운영체제 의존 항목, 라이브러리를 설치하지 않은 상태에서 모든 서비스를 발표하고 실행할 수 있는 통일된 방식이다.Compose는 적절한 구성과 인프라를 통해 많은 용기를 연결하는 접착제입니다.이것은 다중 컨테이너 Docker 응용 프로그램을 정의하고 실행하는 도구입니다.
Compose는 YAML 파일로 귀결될 수 있습니다. 우리는 그것을 우리의 저장소에 추가할 수 있습니다. 그러면 다른 사람들은 심지어 미래의 우리 스스로도 로컬 환경을 쉽게 구축하고 실행하는 것처럼 간단하게 실행할 수 있습니다. docker-compose up -d

Docker Compose 설치


Mac 사용자, Docker Desktop For Mac를 설치하면 Compose와 함께 묶입니다.
그렇지 않으면 official guide에 따라 Docker Compose를 설치합니다.

간단한 용례


세부 사항을 토론합시다!예를 들어, 우리는 데이터를 저장하기 위해 PostgreSQL 실례를 필요로 하는 NodeJS 서비스를 가지고 있다.이렇게 의존 관계는 하나뿐이다.
version: "3.1"

volumes:
  db_vol:

services:
  db:
    image: postgres:11.6-alpine
    environment:
      - POSTGRES_DB=app
      - POSTGRES_PASSWORD=12345
    volumes:
      - db_vol:/var/lib/postgresql/data
    ports:
      - "5432:5432"
이것이 바로 우리 Compose YAML 파일의 모습입니다.약정은 프로젝트의 루트 폴더에 저장하는 것입니다. 이름은 docker-compose.yml입니다.
먼저 Docker Compose YAML 모드의 모드 버전을 정의합니다.이런 방식을 통해Compose는 구 모델과 이전 모델의 호환성을 유지할 수 있다.
서비스 노드로 직접 이동합니다. (이따가 볼륨으로 돌아갑니다.) 우선 의존항을 명명해야 합니다.우리의 예에서, 우리는 그것을 db 라고 명명했다.그것은 로그 기록, 네트워크, 참고 목적에 큰 영향을 미치지 않는다.
현재, 우리는 우리의 서비스를 위해 그림을 선택해야 한다.다행히도, Docker 커뮤니티는 아주 좋아요. 당신이 필요로 하는 그림을 찾을 수 있어요.우리는 계속할 것이다official Postgres image.
그런 다음 데이터베이스를 구성하는 환경 변수를 설정합니다.변수의 전체 목록은 위의 링크를 참조하십시오.이 예에서 우리는 데이터베이스 이름과 기본 사용자 비밀번호를 설정했다.원하는 암호를 원하는 대로 변경할 수 있습니다. 아마도 더 안전한 암호일 것입니다.
다음에 우리는 데이터베이스의 데이터를 영구적으로 저장하기를 희망한다.명확한 정의가 없으면, 용기를 닫을 때마다 데이터가 삭제됩니다.PostgreSQL 데이터는 컨테이너 파일 시스템/var/lib/postgresql/data에 저장됩니다.volumes 속성을 사용하면 이 디렉터리를 우리가 이전에 정의한 영구 볼륨db_vol에 연결할 수 있습니다.우리가 건너뛴volumes 노드로 돌아가서 빈 대상을 정의했습니다. db_vol이것은 Docker Compose에 우리가 무엇을 연결하든지 db_vol 실행 사이를 유지해야 한다고 알려 줍니다.예를 들어 Postgres 데이터 폴더입니다.
마지막으로 NodeJS 응용 프로그램이 데이터베이스에 연결될 수 있도록 포트를 공개해야 합니다.기본적으로 Docker Compose는 서비스 통신을 위한 전용 네트워크 어댑터를 만듭니다.다른 네트워크에는 공개를 요청한 포트만 사용할 수 있습니다.전용 네트워크의 5432 포트 (Postgres 기본 포트) 를localhost의 5432 포트에 연결해 달라고 요청합니다.
문서가 준비되고 Docker Compose가 설치되면 프로젝트의 루트 폴더에서 실행할 수 있습니다docker-compose up.이렇게 하면 YAML 파일에 나열된 각 서비스에 대해 Docker 컨테이너를 제공하고 전용 네트워크를 만듭니다.백엔드에서 실행할 파라미터를 추가할 수 있습니다 docker-compose up -d.만일 우리가 완성한다면 docker-compose down만 실행하면 모든 서비스를 닫을 수 있습니다.
현재 PostgreSQL 실례가 로컬에서 개발할 수 있으며, 모든 관련 설정을 포함합니다.

고급 용례


version: "3.1"

volumes:
  db_vol:

services:
  db:
    image: postgres:11.6-alpine
    environment:
      - POSTGRES_DB=app
      - POSTGRES_PASSWORD=12345
    volumes:
      - db_vol:/var/lib/postgresql/data
    ports:
      - "5432:5432"
  api:
    image: gcr.io/daily-ops/daily-api
    depends_on:
      - db
    ports:
      - "3000:3000"
    environment:
      - DATABASE_HOST=db
      - PORT=3000
현실 생활에서 우리가 필요로 하는 것은 단지 하나의 데이터베이스만이 아니다.예를 들어 프로젝트 전단을 구축할 때 데이터베이스와 API 서버가 필요합니다.본 예에서 우리는 두 개의 서비스를 실례화하였다.이전과 같은 데이터베이스와 이 데이터베이스에 의존하는 API 서버.데이터베이스와 마찬가지로, 우리는 서비스에 이름을 붙이고 이미지, 포트, 환경 변수를 정의합니다.뿐만 아니라 Compose는 API가db 서비스에 의존한다는 것을 알고 싶습니다.그런 다음 Compose는 각 서비스의 시작 순서를 우선순위로 정렬할 수 있습니다.
저희가 전에 말씀드렸던 전용 네트워크 기억나세요?멋있는 점은 모든 서비스가 네트워크에서 그 이름을 사용해서 인용할 수 있다는 것이다.환경 변수에서 데이터베이스 호스트를 db로 설정했는데 이것은 데이터베이스 서비스의 정확한 이름입니다.IP 또는 복잡한 검색 시스템을 혼란시킬 필요는 없습니다.그것은 서비스 명칭과 같이 간단하다.
이렇게 하면 현재 docker-compose up를 실행하여 우리가 전방에서 개발한 모든 서비스를 확보할 수 있다.Postgres나 API 서버를 정확하게 설정하는 방법을 알 필요가 없습니다.Docker Compose에서 캡슐화하는 매우 복잡한 프로세스일 수 있습니다.
우리 망했어!이제 Docker Compose를 사용하여 팀 구성원이나 오픈 소스 기여자와 개발 환경을 쉽게 공유할 수 있습니다.🤘

유용한 링크

  • Installation guide
  • Compose file reference
  • Docker Hub
  • daily.dev 모든 새로운 꼬리표에 가장 좋은 프로그램 뉴스를 제공할 수 있다.우리는 당신이 미래를 해독할 수 있도록 수백 개의 합격 원천을 배열할 것입니다.

    좋은 웹페이지 즐겨찾기