docker+docker compose를 사용하여 개발 및 배포 간소화
12238 단어 intermediatedevelopmentdockerdevops
개발자는 보통 로컬 기기에서 이 서비스들을 동시에 운행해야 한다.
기존의 방법은 단독 단말기에서 모든 서비스를 수동으로 시작하는 것이다.그러나 이것은 네가 이미 겪었을 수도 있는 것처럼 곧 번거로워질 것이다.
concurrently
나 npm-run-all
같은 유행하는 도구들은 의존항을 늘리는 대가로 이것을 더욱 쉽게 한다.게다가 yarn workspaces
또는lerna
까지 개발자들이 매우 유창한 체험을 할 수 있다.이러한 도구가 있으면 개발자는 유일한 명령, 예를 들어
yarn dev
을 입력하고 모든 서비스의 전체 창고를 자동으로 시작할 수 있다.터미널의 단일CTRL+c
은 한 번의 이동에서 모든 서비스를 종료할 수 있습니다.정말 좋아요, 그렇죠?그러나 이런 방법은 약간의 단점이 있다.
package.json
yarn-workspaces
: 현재 모든 서비스는 반드시 실을 사용해야 합니다.당신은 어떤 공급업체를 확보해서 당신의 서비스를 결합시킬 수 있다.만약 우리가 모든 서비스가 다른 언어를 사용하기를 희망한다면?docker와 docker compose의 더 좋은 방법
내 모든 프로젝트에서
yarn-workspaces
와 npm-run-all
를 한동안 사용한 후에 나는 최근에 docker
과docker-compose
만 사용하기로 전환했다.제가 발견한 바와 같이
docker-compose
이러한 모든 기능을 사용할 수 있고 더 많은 기능을 사용할 수 있습니다.✔️ 모든 서비스를 동시에 실행
✔️ 추가 npm 의존항과 그 증가의 복잡성 없음: No
concurrently
, Nonpm-run-all
, Noyarn workspaces
등✔️ 100% 독립형 서비스, 표준 어플리케이션
✔️ 서비스, 노드 버전 또는 패키지 관리자마다 다른 언어를 사용할 수 있습니다
✔️ 더 간단한 심지 모형
이 밖에도 각 서비스에 대해
docker-compose
뿐만 아니라 단독Dockerfile
을 사용한 다음에 개발에 사용docker-compose
을 편성함으로써 우리는 큰 장점을 얻었다.docker
와 docker-compose
만 있으면 일을 시작할 수 있다.개발 환경을 재구성하는 것은 더 이상 시간을 낭비하지 않습니다!docker-compose build
이고, 그 다음은 일일 명령 docker-compose up
이다.예.
만약 우리가 전단과 후단으로 구성된 창고가 있다면, 모두javascript이다.
다음은 프로젝트 구조입니다.
my-app
- Readme.md
- backend
- Dockerfile
- package.json
- ...
- frontend
- Dockerfile
- package.json
- ...
- dev
- docker-compose.yml
노트:docker-compose.yml
프로젝트의 루트 폴더에 완전히 넣을 수 있습니다.나는 개발과 관련된 모든 도구를 그룹으로 나누는 새로운 dev
폴더를 만들고 싶다.이것 또한 모든 개발자(심지어 나 자신)에게 이 docker-compose.yml
문서는 개발용으로만 제공된다는 것을 밝히는 데 도움이 된다.백엔드/Dockerfile
우리의
backend/Dockerfile
는 생산 환경을 고려한 상황에서 작성된 것이다. 예를 들어 설명RUN yarn --prod --frozen-lockfile
과 CMD [ "yarn", "start" ]
은 생산에 사용되지만 docker-compose
는 우리가 앞으로 현지에서 일부 부품을 덮어써서 우리의 개발 수요를 만족시킬 수 있도록 허락할 것이다.# backend/Dockerfile =================
# (production-friendly)
FROM node:14-alpine
WORKDIR /usr/src/app
# Copy these files from your host into the image
COPY yarn.lock .
COPY package.json .
# Run the command inside the image filesystem
RUN yarn --prod --frozen-lockfile
# Copy the rest of your app's source code from your host to the image filesystem:
COPY . .
# Which port is the container listening on at runtime?
# This should be the same port your server is listening to:
EXPOSE 8080
# Start the server within the container:
CMD [ "yarn", "start" ]
프런트엔드/Dockerfile
우리의 백엔드
Dockerfile
와 거의 같고 생산을 위해 쓴 것이다.docker-compose
일부 명령을 로컬에서 덮어쓸 수 있도록 해 줍니다. 개발에만 사용됩니다.# frontend/Dockerfile =================
# (production-friendly)
FROM node:14-alpine
WORKDIR /usr/src/app
COPY yarn.lock .
COPY package.json .
RUN yarn --prod --frozen-lockfile
COPY . .
EXPOSE 3000
CMD [ "yarn", "start" ]
/docker 작성 개발yml
version: "3"
services:
backend:
build: "../backend"
ports:
- 8080:8080
command: sh -c "yarn && yarn dev"
volumes:
- ../backend:/usr/src/app
frontend:
build: "../frontend"
ports:
- 3000:3000
command: sh -c "yarn && yarn dev"
volumes:
- ../frontend:/usr/src/app
여기에서 이전에 정의한 2 Dockerfile
를 다시 사용할 때, 우리는 일부 명령과 파라미터를 덮어쓸 수 있습니다.이 경우
ports
및 command
덮어쓰기EXPOSE
및 CMD
값은 입니다.volumes
기계의 전단과 후단 폴더를 용기에 비추는 것을 허용합니다.즉, 이제 IDE에서 프로젝트 파일을 정상적으로 편집할 수 있으며 모든 변경 사항이 컨테이너에 즉시 반영됩니다.전체 프로젝트 시작
처음 실행의 경우 터미널에서 다음을 입력하기만 하면 됩니다.
$ cd dev
$ docker-compose build
이것은 Dockerfile
snode:14-alpine
에서 정의한 이미지를 다운로드하고 전단과 후단을 위한 전체 환경을 준비합니다.최초 또는 수정
Dockerfile
후에는 이 명령을 한 번만 실행하면 됩니다.전체 스택을 실행하고 인코딩을 시작하려면:
$ cd dev
$ docker-compose up
이제 http://localhost:3000 에서 백엔드를 액세스하고 http://localhost:8080 에서 백엔드를 액세스할 수 있습니다.일상적인 사용
지금부터 모든 npm 스크립트와 명령은 호스트가 아닌 용기에서 실행되어야 합니다.
예를 들어, 소프트웨어 패키지
classnames
를 프런트엔드에 추가하는 경우:# in a new terminal:
$ cd dev
$ docker-compose exec frontend yarn add classnames
걱정하지 마십시오. 다음 섹션에서는 개선 방안을 살펴보겠습니다.
이제 우리는 아름다운 것을 가질 수 있다!
1) bash 별명으로 키 입력 감소
누가 지루하고 번거로운 타자를 좋아합니까?아무도 없어요.
여기에는 간단한 솔루션이 있습니다.
aliases.sh
아래에 dev
파일을 추가합니다.my-app
- dev
- aliases.sh
다음을 포함합니다.# my-app/dev/aliases.sh
alias be="docker-compose exec backend"
alias fe="docker-compose exec frontend"
현재 터미널에서 찾을 수 있습니다:$ . dev/aliases.sh
지금부터:# we can type this:
$ fe yarn add classnames
$ be yarn add -D nodemon
# instead of:
# $ docker-compose exec frontend yarn add classnames
# $ docker-compose exec backend yarn add -D nodemon
또한 각 터미널의 수동 구매를 방지하기 위해 .bashrc
에서 다음을 한 번에 수행할 수 있습니다.# in /home/<USER>/.bashrc
# at the very end, just add this line:
. /<PATH_TO_MY_APP>/dev/aliases.sh
프로젝트를 계속 진행할 때만 이렇게 하고, 이 새 선이 더 이상 필요하지 않을 때 삭제하는 것을 권장합니다.2) 더 안정적으로 임시 저장, 생산에 배치한다...
감사
Dockerfile
s(제작을 위해 썼던 거 기억나요?),우리는 모든 환경에서 완전히 같은 운영체제와 상하문에서 우리의 서비스를 운행할 수 있다. 개발, 테스트, 등장, 생산...예를 들어 Google Cloud Run를 사용하면 현재 모든 서비스에
Dockerfile
를 제공할 수 있고 코드가 로컬에서 잘 작동하면 배치 후에도 잘 작동하는지 확인할 수 있습니다.3) docker compose의 이점
예를 들어, 현재 항목에 따라 추가 용기를 추가하기 쉽습니다.
만약 우리가 11.1판에서
postgres
데이터베이스를 개발해야 한다고 가정한다면.다음과 같이 추가할 수 있습니다docker-compose.yml
.version: "3"
services:
backend:
build: "../backend"
ports:
- 8080:8080
command: sh -c "yarn && yarn dev"
volumes:
- ../backend:/usr/src/app
frontend:
build: "../frontend"
ports:
- 3000:3000
command: sh -c "yarn && yarn dev"
volumes:
- ../frontend:/usr/src/app
db:
image: postgres:11.1
command: "-c logging_collector=on"
restart: always
ports:
- 5432:5432
environment:
POSTGRES_PASSWORD: changeme
POSTGRES_USER: changeme
POSTGRES_DB: changeme
# Let's also provide an admin UI for the postgres
# database, often useful during development:
adminer:
image: adminer
restart: always
ports:
- 5000:8080
결론
우리는 호스트에 이러한 서비스를 설치하지 않고 모든 기기에서 여러 개의 동시 운행 서비스를 개발하는 방법을 이해했다. 모든 서비스는 언어, 유형의 데이터베이스를 사용하며, 호스트에 이러한 서비스를 설치할 필요가 없다.
우리는 단지 설치
docker
와 docker-compose
(그리고 IDE) 하나만 있으면 된다!이런 방식을 통해 모든 서비스는 완벽한 일반적인 응용 프로그램일 뿐이다.
또한 Dell은 현재 모든 환경과 모든 개발자의 시스템에서 동일한 시스템(OS)에서 모든 서비스를 실행할 수 있습니다.
신입 개발자의 입사와 개발 환경의 구축은 보통 며칠이 걸린다.이런 방법을 사용하는 데는 단지 몇 분밖에 걸리지 않는다.
다른 언어나 언어 버전의 다른 항목 사이를 전환할 수도 있습니다.
Reference
이 문제에 관하여(docker+docker compose를 사용하여 개발 및 배포 간소화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/danielres/simplify-development-deployments-with-docker-docker-compose-9ji텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)