Docker와 Docker Compose로 범선 개발

Docker는 개발 환경의 설정과 실행을 간단하게 하고 응용 프로그램의 배치를 간소화합니다.본고에서 Docker와 Docker Compose를 사용하여 Sails 개발 작업 흐름을 설정하는 방법을 볼 수 있습니다.

Docker & Docker Compose


이 문서의 목표는 가능한 한 간단히 Sails에 Docker 작업 흐름을 설정하는 것입니다.Docker는 개발 환경의 설정과 운행을 더욱 쉽게 하고 배치를 간소화시켰다.
우선, 우리는 Docker와 Docker가 어떻게 조합 작업을 하는지, 그리고 그 장점을 이해할 것이다.그 다음은 사랑하는 돛이 Docker 컨테이너 안에서 운행하도록 하는 차근차근 안내서입니다.우리 시작합시다!

컨테이너화


Docker와 Sails에 대해 이야기하기 전에 우리는 컨테이너 운송이 무엇인지, 그리고 우리가 왜 컨테이너 운송을 원하는지 알아야 한다.
용기화는 가상화의 한 형식으로 응용 프로그램이 용기라고 불리는 고립된 사용자 공간에서 실행될 수 있다.우리는 용기를 경량급 가상 기기로 볼 수 있지만, 사실은 그렇지 않다.

컨테이너와 가상 머신 비교[1]
그런데, 우리는 왜 그것을 원합니까?
용기화를 통해 프로그램이 실행해야 하는 모든 것들, 예를 들어 바이너리 파일, 라이브러리, 프로필, 의존항은 용기에 봉인되어 격리된다.이렇게 하면 개발 환경을 더욱 쉽게 설정하고 실행할 수 있으며, 라이브러리, 파일, 의존 항목의 분실이나 서로 다른 버전 오류를 줄일 수 있는 기회를 통해 배치를 간소화할 수 있다.
용기 자체는 호스트 운영체제에서 추상화되어 밑바닥 자원에 대한 접근이 제한되어 있다.격리는 이식 가능성, 안정성, 안전성 등 장점이 있다.
그래서 표준적이고 경량급이고 안전한... 네, 개발자로서 용기화를 원합니다!

Docker와 Docker 조합


'Docker' 라는 단어는 소스 프로젝트, 도구, 회사 (Docker Inc., 이 프로젝트와 도구를 주로 지원하는 회사) 를 포함하는 것들을 가리킨다.
이러한 도구에 대해 말하자면, Docker는 용기를 사용하여 프로그램을 더욱 쉽게 만들고, 배치하고, 실행하기 위한 도구이다.
용기 편성은 용기의 배치, 관리, 확장과 네트워크를 자동화시켰다.재설계할 필요 없이 서로 다른 환경에 같은 응용 프로그램을 배치할 수 있습니다.예를 들어 용기 속의 마이크로 서비스는 저장, 네트워크와 안전을 포함하여 편리하게 서비스를 조율할 수 있다.Docker Compose는 Docker 컨테이너의 편집 도구입니다.[2]

Docker 설치


마이크: https://docs.docker.com/docker-for-mac/install/
창: https://docs.docker.com/docker-for-windows/install/
Ubuntu:https://docs.docker.com/engine/install/ubuntu/
기타: https://docs.docker.com/engine/install/

범선 컨테이너화


현재, 우리가 가장 좋아하는 노드 프레임워크인 Sails를 용기에서 어떻게 실행합니까?

범선 CLI 이미지


우리의 용기는 이미지가 있어야만 실행할 수 있다.만들어봅시다.
이렇게 하려면 docker sails cli 디렉토리에 다음과 같은 내용을 포함하는 Dockerfile 파일을 만듭니다.
FROM node:lts

RUN npm install -g [email protected]
FROM 문구는 노드의 최신lts 버전을 기본 이미지로 사용하고 있음을 설명합니다.사용하는 구문은 imageName:tag입니다. 태그가 지정되지 않은 경우 기본값이 사용됩니다.[3]
동시에 노드 lts 이미지는 Debian Streatch를 기반으로 합니다.이것이 바로 저희 프로젝트 환경입니다. Sails 1.4.2, 노드 14.15.4(본문을 작성할 때), Debian Streatch에서 실행됩니다.
지금 우리는 우리의 이미지를 세워야 한다.
docker build . -t sails-cli:1.4.2
아주 간단하죠?
우리가 뭘 했는지 보여줘.docker build [context] -t [tag]언어 환경: 우리가 구축하고 있는 언어 환경.사용하는 Dockerfile.과 같은 디렉토리에 있기 때문입니다.Dockerfile이 기본 파일 이름이므로 파일 이름을 지정할 필요가 없습니다.
태그: 이것은 선택할 수 있지만, 우리가 방금 구축한 그림을 표시하려고 합니다. 왜냐하면 우리는 많은 다른 이미지가 있을 수 있고, 항목마다 다른 버전이 있을 수 있기 때문입니다.

새 Sails 프로젝트 만들기


Sails CLI 이미지를 구축한 후에는 이를 사용하여 새 Sails 프로젝트를 만듭니다.
docker run --rm -v `pwd`:/app -w /app sails-cli:1.4.0 sails new sails-docker-example --no-frontend
docker run: 새 컨테이너를 만들고 실행
--rm: 프로세스가 끝난 후에 용기를 제거합니다. 왜냐하면 그 후에 용기가 필요하지 않기 때문입니다.
- v: 현재 작업 디렉터리 (호스트에 있는) 를 용기 내의/app 경로에 불러옵니다.따라서 현재 디렉터리를 용기와 공유합니다
-w: 컨테이너의 현재 작업 디렉토리를/app로 설정
sails cli: 1.4.0: 우리가 이전에 구축한sails 이미지
sails new sails docker 예 - 프런트엔드가 없습니다: sails CLI 명령, 컨테이너에서 실행하기를 원합니다.
따라서 컨테이너에서 sails new를 실행하면 새 Sails 프로젝트로 만든 새 디렉터리를 찾을 수 있습니다.
이제 프로젝트를 실행해 보겠습니다.
cd sails-docker-example
docker run --rm -it -v `pwd`:/app -w /app -p 1337:1337 sails-cli:1.4.0 sails lift
-i: 연결되지 않은 경우에도 표준 DIN 열기 유지
-t: 위조 TTY 할당
-p: 용기 1337을 호스트에 비추면localhost:1337을 통해 프로그램에 접근할 수 있습니다
얘는 아직 살아있어!

실행 및 디버깅


보시다시피 저희 프로젝트가 실행 중이지만 파일을 수정하면 용기를 멈추고 다시 시작해서 변경 사항을 적용해야 합니다.
노드몬이 구해줘!
docker run --rm -v `pwd`:/app -w /app sails-cli:1.4.0 npm install nodemon --save-dev
이제 소포를 열어보세요.json, 스크립트 부분에 새, 디버깅을 추가합니다.
"scripts": {
    "debug": "nodemon --inspect=0.0.0.0 app.js",
    "start": "NODE_ENV=production node app.js",
...
다시 한 번 뛰지만 이번에는 돛을 올리는 것이 아니라 npm를 사용할 것입니다.
docker run --rm -v `pwd`:/app -w /app -p 1337:1337 -p 9229:9229 sails-cli:1.4.0 npm run debug
파일을 수정하고 저장하고 프로젝트를 자동으로 다시 시작하는지 확인합니다.
마지막으로, 우리가 용기에서 실행할 때, 디버거를 프로세스에 연결하는 방법이 필요합니다. 그래서 9559 포트를 비추고 있습니다.
VS 코드를 사용하는 경우
발사하다.json 파일:
{
    "version": "0.2.0",
    "configurations": [
        {
            "address": "localhost",
            "localRoot": "${workspaceFolder}",
            "name": "Attach to Remote",
            "port": 9229,
            "remoteRoot": "/app",
            "request": "attach",
            "skipFiles": [
                "<node_internals>/**"
            ],
            "type": "node",
            "restart": true
        }
    ]
}

Docker compose


앞서 언급한 바와 같이 Docker Compose는 편성 도구입니다.Compose는 YAML 파일에서 서비스, 네트워크, 볼륨 등 인프라를 정의할 수 있도록 합니다.
첫 번째 단계에서는 Sails 서비스를 정의하는 매우 간단한 파일을 만듭니다.이 서비스에 대해 우리는 Docker 명령행 도구를 사용하는 것처럼 이미지, 명령, 포트 맵, 볼륨 마운트, 작업 디렉터리 등을 설정할 것입니다.
우리 부두 일꾼.yml:
version: '3'

services:
    api:
        image: sails-cli:1.4.0 # same as with docker cli
        # Run npm install before starting sails to keep our dependencies installed and updated
        command: sh -c "npm install && npm run debug"
        working_dir: /app # same as -w with docker cli
        ports: # same as -p with docker cli
            - '1337:1337'
            - '9229:9229'
        volumes: # same as -v with docker cli
            - .:/app
그리고, 우리는 docker compose 명령을 사용하여 우리의 서비스를 향상시킬 것입니다.
docker-compose up
결과는 Docker CLI를 사용한 것과 같습니다.
작성된 인프라를 삭제하려는 경우 중지되면 다음을 실행하십시오.
docker-compose down
이렇게 하면 docker-compose up로 생성된 모든 컨테이너, 네트워크 및 볼륨이 제거됩니다.

데이터베이스 컨테이너화


대부분의 경우, 우리 프로젝트는 데이터베이스가 필요하다.이 예에서, 우리는 MongoDB를 사용하지만, Sails가 지원하는 다른db 엔진도 사용할 수 있습니다.[4]
모르는 사람들에게 몬goDB는 무료 소스 크로스플랫폼 문서를 위한 데이터베이스 프로그램이다.[5]
다행히도 MongoDB에는 공식 이미지가 있습니다. Google 프로젝트에 데이터베이스 서비스를 추가할 것입니다.
우선, 프로젝트에 Sails MongoDB 어댑터를 추가해야 합니다.앞서 설명한 대로 Docker를 사용하여 다음과 같이 프로젝트에 종속성을 추가하고 설치할 수 있습니다.
docker run --rm -v `pwd`:/app -w /app sails-cli:1.4.0 npm install sails-mongo
그리고 프로젝트 설정을 수정하고 mongo를 기본 어댑터로 설정합니다.
config/datastore에서js 파일:
.
.
.

default: {
    adapter: require('sails-mongo'),
    url: process.env.DB_URL
},

다음은 docker compose에 MongoDB 서비스를 추가해야 합니다.yml 및 필요한 설정의 항행 서비스를 제공합니다.
docker 작성.yml
version: '3'

services:
    api:
        image: sails-cli:1.4.0
        command: sh -c "npm install && npm run debug"
        working_dir: /app
        ports:
            - '1337:1337'
            - '9229:9229'
        volumes:
            - .:/app
        env_file:
          - ./sails.env # set env vars using a file

    db:
        container_name: mongodb # set name to the container
        image: mongo:4.4 # as of this writing, the latest version is 4.4.3
        volumes:
            - ./mongo:/data/db
compose 파일에 db 서비스를 추가하고 env 파일을 Sails 서비스로 설정합니다.우리는 이 파일을 사용하여 데이터베이스 연결을 설정할 것이다.
돛.컨디션
DB_URL=mongodb://root:@mongodb:27017/sails
Compose는 용기 이름을 네트워크 주소로db에 연결할 수 있도록 합니다. 이것은 연결 URL에서mongodb를 주소로 사용할 수 있는 이유입니다.
중요한 힌트: 본 예에서 우리는MongoDB 인증을 사용하지 않았지만 생산 환경에서 이렇게 하는 것은 좋은 생각이다.[6]
마지막으로 docker-compose up 를 사용하면 몬goDB 출력과 Sails를 볼 수 있습니다.
Docker에서 실행되는 전범 개발 환경을 완성했습니다!

저의 댓글을 읽어 주셔서 대단히 감사합니다. 댓글을 환영합니다!
이것은 작가의 트위터 링크입니다. 당신은 어떤 문제가 있을 수 있습니다. 
[1] https://www.docker.com/resources/what-container
[2] https://www.docker.com/why-docker
[3] https://hub.docker.com/_/node
[4] https://sailsjs.com/documentation/concepts/extending-sails/adapters/available-adapters
[5] https://www.mongodb.com
[6] https://hub.docker.com/_/mongo

좋은 웹페이지 즐겨찾기