도커 컴포지트와 다른 점은 무엇입니까?도커 파일
저는 도커에 대해 읽고 배웠고, 사용할 장고 설정을 올바르게 선택하려고 노력하고 있습니다.지금까지 다음 중 하나가 있습니다.
도커 파일이 도커 컴포지트에서 사용되는 것은 이해하지만 모든 것을 하나의 큰 도커 파일에 여러 개로 넣는 것이 좋은 관행인지는 모르겠습니다.FROM
다른 이미지에 대한 명령?
다음을 포함하는 여러 다른 이미지를 사용하려고 합니다.
uwsgi
nginx
postgres
redis
rabbitmq
celery with cron
Docker를 사용하여 이러한 유형의 환경을 설정할 때 가장 좋은 방법은 무엇인지 알려주십시오.
도움이 된다면, 저는 Mac에 있기 때문에 boot2docker를 사용합니다.
몇 가지 문제가 있었습니다.
- Docker Compose는 Python3과 호환되지 않습니다.
- 프로젝트를 컨테이너화하고 싶기 때문에 하나의 큰 도커 파일이 이상적이지 않다면 도커 합성을 사용하여 해체해야 할 것 같습니다.
- 저는 프로젝트 Py2 & Py3를 호환 가능하게 하는 것이 괜찮기 때문에 장고 작곡 쪽으로 기울고 있습니다.
도커 파일
도커 파일은 사용자가 이미지를 조립하기 위해 호출할 수 있는 명령이 포함된 간단한 텍스트 파일입니다.
예제, 도커 파일
FROM ubuntu:latest
MAINTAINER john doe
RUN apt-get update
RUN apt-get install -y python python-pip wget
RUN pip install Flask
ADD hello.py /home/hello.py
WORKDIR /home
도커 작성
도커 작성
는 다중 컨테이너 Docker 응용 프로그램을 정의하고 실행하기 위한 도구입니다.
의 앱을 를 앱을구정에서 하세요.
docker-compose.yml
격리된 환경에서 함께 실행할 수 있습니다.실행만으로 하나의 명령으로 실행되는 앱 가져오기
docker-compose up
예: docker-compose.yml
version: "3"
services:
web:
build: .
ports:
- '5000:5000'
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
답은 둘 다 아닙니다.
Compose는 프로젝트의 Docker Compose(구성)에 명령을 합니다.docker-compose.yml
.
한 Docker 워크플로우를 .Dockerfile
각 를 조립합니다.build
명령어
는 Docker 파일의 Docker를 사용하여 할 수 .build /path/to/dockerfiles/blah
/path/to/dockerfiles/blah
blah's 있는곳니다입가▁bl▁where다곳니입▁isah는.Dockerfile
생명. 생명.
docker-cli는 docker-cli를 사용하여 수많은 명령을 작성해야 할 수 있도록 하기 위해 존재합니다.
또한 도커 어댑터를 사용하면 여러 개의 컨테이너를 동시에 쉽게 시작할 수 있으며 어떤 형태의 네트워킹과 함께 컨테이너를 자동으로 연결할 수 있습니다.
도커 합성의 목적은 도커 클리프 역할을 하지만 여러 명령을 훨씬 더 빨리 실행하는 것입니다.
하기 위해서는 에 실행하던 을 컴트를사이면실전명행인에합던니다로 .docker-compose.yml
java.
단순히 yaml 파일에 붙여넣기만 하는 것이 아니라 특별한 구문이 있습니다.
생성되면 도커 합성 CLI에 공급해야 하며 파일을 구문 분석하고 지정한 올바른 구성으로 모든 다른 컨테이너를 생성하는 것은 CLI에 달려 있습니다.
은 용기가 있을 그서당신별용갖될게다것니입를기들하어, 예는나를래은도의▁soers,▁is하▁contain는,나▁lets▁one'▁say▁separate,▁have▁will들어▁you그래예.redis-server
두 는 그고두번째는리번는입니다.node-app
그리고 당신은 그것을 사용하여 만들기를 원합니다.Dockerfile
현재 디렉토리에 있습니다.
또한 해당 컨테이너를 만든 후 일부 포트를 컨테이너에서 로컬 시스템으로 매핑하여 내부에서 실행 중인 모든 항목에 액세스할 수 있습니다.
그래서 당신을 위해docker-compose.yml
다음과 같이 첫 번째 줄을 시작할 파일:
version: '3'
에게 도커의 을 알려줍니다.docker-compose
사용할 수 있습니다.그런 다음 다음을 추가해야 합니다.
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
들여쓰기는 매우 중요합니다.또한 하나의 서비스에 대한 알림 이미지를 캡처하고 있지만 다른 서비스에 대해 알려드립니다.docker-compose
두 번째 컨테이너에 사용될 이미지를 빌드하기 위해 현재 디렉터리 내부를 살펴봅니다.
그런 다음 이 컨테이너에서 열려는 모든 다른 포트를 지정합니다.
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
ports:
-
입니다. dash는 yaml dash입니다.예에서 는 이예서매중다니입핑을 매핑하고 .8081
하기 위해 나의 지역 기계에.8081
용기에 다음과 같이 표시됩니다.
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
ports:
- "8081:8081"
따라서 첫 번째 포트는 로컬 시스템이고 다른 포트는 컨테이너의 포트입니다. 이러한 혼동을 방지하기 위해 두 포트를 구분할 수도 있습니다.
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
ports:
- "4001:8081"
의 개을통을 으로써.docker-compose.yml
이와 같은 파일은 기본적으로 동일한 네트워크에 이러한 컨테이너를 생성하고 원하는 방식으로 서로 통신하고 원하는 만큼의 정보를 교환할 수 있는 자유로운 액세스를 제공합니다.
가 음을사여두컨만때들를너테이를 사용하여 됩니다.docker-compose
포트 선언이 필요하지 않습니다.
제 예에서는 Nodejs 앱에서 다음과 같은 코드 구성을 수행해야 합니다.
const express = require('express');
const redis = require('redis');
const app = express();
const client = redis.createClient({
host: 'redis-server'
});
위의 예를 사용하여 사용자가 수행해야 할 특정 구성이 있을 수 있음을 알립니다.docker-compose.yml
프로젝트에 특정한 파일일 수 있습니다.
Nodejs 앱과 redis를 사용하는 경우 Nodejs가 사용하는 기본 포트를 알고 있어야 하므로 다음을 추가합니다.
const express = require('express');
const redis = require('redis');
const app = express();
const client = redis.createClient({
host: 'redis-server',
port: 6379
});
▁for▁is▁the▁looking▁so다▁that▁app를 찾는 것을 볼 것입니다.redis-server
연결을 이 실행 중인 컨테이너로 리디렉션합니다.
계속해서,Dockerfile
다음 항목만 포함됩니다.
FROM node:alpine
WORKDIR '/app'
COPY /package.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
그서래, 에반도, 당이기전을 실행해야 하는 에, 신가망, 면에도▁so.docker run myimage
의 모든 "" "" "" "" "" "" "" " "" "를 실행할 수 .docker-compose up
그리고 도커가 현재 작업 디렉토리를 찾고 다음을 찾을 것이기 때문에 이미지를 지정할 필요가 없습니다.docker-compose.yml
줄을 지어 안으로 들어가다
docker-compose.yml
는 우는두개분명처했다습니야리해령을의 두 .docker build .
그리고.docker run myimage
하지만 지금은docker-compose
세상, 만약 당신이 당신의 이미지를 다시 만들고 싶다면, 당신은 씁니다.docker-compose up --build
그러면 도커가 컨테이너를 다시 시작하지만 최신 변경 사항을 얻으려면 컨테이너를 다시 빌드하라는 메시지가 표시됩니다.
그렇게docker-compose
여러 용기로 작업하는 것이 더 쉬워집니다.다음에 이 컨테이너 그룹을 백그라운드에서 시작해야 하는 경우 다음을 수행할 수 있습니다.docker-compose up -d
그리고 그들을 막기 위해, 당신은 할 수 있습니다.docker-compose down
.
Docker compose 파일은 각 Docker 파일을 bash 스크립트로 개별적으로 실행하는 대신 여러 컨테이너의 시작을 선언적으로 조정할 수 있는 방법입니다. 이 경우 쓰기가 훨씬 느리고 디버깅하기가 어렵습니다.
도커 파일과 도커 컴포지트는 도커랜드에서 두 가지 다른 개념입니다.Docker에 대해 이야기할 때 가장 먼저 떠오르는 것은 조정, OS 수준 가상화, 이미지, 컨테이너 등입니다.다음과 같이 각각 설명하겠습니다.
이미지: 이미지는 Docker가 신뢰하는 레지스트리에 저장되는 불변의 공유 가능한 파일입니다.도커 이미지는 일련의 읽기 전용 계층으로 구성됩니다.각 계층은 이미지의 도커 파일에 제공되는 명령을 나타냅니다.이미지에는 실행에 필요한 모든 이진 파일이 저장됩니다.
컨테이너:이미지의 인스턴스를 컨테이너라고 합니다.컨테이너는 호스트 OS에서 실행할 실행 가능한 이미지 바이너리일 뿐입니다.실행 중인 이미지는 컨테이너입니다.
도커 파일: 도커 파일은 사용자가 이미지를 조립하기 위해 명령줄을 호출할 수 있는 모든 명령 / 빌드 지침이 포함된 텍스트 문서입니다.이 파일은 다음 파일로 저장됩니다.Dockerfile
'를 하세요.)
도커-구성:Compose는 다중 컨테이너 Docker 응용 프로그램을 정의하고 실행하기 위한 도구입니다.Compose(합성)를 사용하면 YAML 파일을 사용하여 응용 프로그램의 서비스(컨테이너)를 구성할 수 있습니다.그런 다음 명령 하나로 구성에서 모든 서비스를 생성하고 시작합니다.Compose(합성) 파일이 다음과 같이 저장됩니다.docker-compose.yml
.
"better"는 상대적입니다.모든 것은 당신의 요구가 무엇인지에 달려 있습니다.도커 합성은 여러 컨테이너를 오케스트레이션하기 위한 것입니다.이러한 이미지가 이미 도커 레지스트리에 있는 경우 합성 파일에 나열하는 것이 좋습니다.이러한 이미지 또는 일부 다른 이미지를 컴퓨터의 파일에서 빌드해야 하는 경우 이러한 이미지를 Docker 파일로 빌드하는 프로세스를 설명할 수 있습니다.
도커 파일이 도커 합성에 사용되는 것은 이해하지만 서로 다른 이미지에 대해 여러 FROM 명령을 사용하여 모든 것을 하나의 대형 도커 파일에 넣는 것이 좋은 방법인지 잘 모르겠습니다.
기능을 제거하는 제안이 있기 때문에 단일 도커 파일에서 여러 FROM을 사용하는 것은 그다지 좋은 생각이 아닙니다.13026
예를 들어 데이터베이스를 사용하고 응용 프로그램 파일이 컴퓨터에 있는 응용 프로그램을 도커화하려면 다음과 같이 작성 파일을 도커 파일과 함께 사용할 수 있습니다.
도커-docker.yml
mysql:
image: mysql:5.7
volumes:
- ./db-data:/var/lib/mysql
environment:
- "MYSQL_ROOT_PASSWORD=secret"
- "MYSQL_DATABASE=homestead"
- "MYSQL_USER=homestead"
ports:
- "3307:3306"
app:
build:
context: ./path/to/Dockerfile
dockerfile: Dockerfile
volumes:
- ./:/app
working_dir: /app
도커 파일
FROM php:7.1-fpm
RUN apt-get update && apt-get install -y libmcrypt-dev \
mysql-client libmagickwand-dev --no-install-recommends \
&& pecl install imagick \
&& docker-php-ext-enable imagick \
&& docker-php-ext-install pdo_mysql \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
워크플로우에서 시스템의 각 부분에 대한 도커 파일을 추가하고 각 부분이 개별적으로 실행될 수 있도록 구성합니다.그런 다음 docker-compose.yml을 추가하여 함께 연결합니다.
가장 큰 장점(제 생각에는): 컨테이너를 연결할 때 이름을 정의하고 이 이름으로 컨테이너를 ping할 수 있습니다.따라서 이름을 사용하여 데이터베이스에 액세스할 수 있습니다.db
그리고 더 이상 그 IP에 의해서가 아닙니다.
당신이 소프트웨어 회사의 관리자이고 당신이 방금 새 서버를 샀다고 상상해 보세요.그냥 하드웨어.
을 생각하다Dockerfile
일련의 지침으로 시스템 관리자에게 이 새 서버에 설치할 항목을 알려줍니다.예:
- 우리는 데비안 리눅스가 필요합니다.
- Apache 웹 서버 추가
- 우리는 postgresql도 필요합니다.
- 심야 사령관을 배치합니다.
- dll, *.웹(*.dll, *.jpg 파일)에 복사합니다.
/var/www
)
대로해, 생각보세요를 해 보세요.docker-compose.yml
일련의 지침으로 시스템 관리자에게 서버가 다른 국가와 상호 작용하는 방법을 알려줍니다.예를들면,
- 다른 컴퓨터에서 공유 폴더에 액세스할 수 있습니다.
- 포트 80은 호스트 컴퓨터의 포트 8000과 동일합니다.
- 등등.
(이것은 정확한 설명은 아니지만 시작하기에 충분합니다.
를 들어 Ubuntu에서 으로, Ubuntu 파일을 추가할 수 있습니다. 추가할 수 있습니다.mysql
라고 하는mySQL
에 그리고 의이에지미하나▁one▁and.mywordpress
라고불두번서이에미지째는리▁는 두 mywordpress
.
YAML 파일 작성은 이러한 이미지를 가져와 통합적으로 실행하는 것입니다.예를 들어, 당신이 가지고 있는 경우docker-compose.yml
라는서를제다라는 합니다.db
:
services:
db:
image: mySQL --- image that you built.
다음과 같은 워드프레스라는 서비스가 있습니다.
wordpress:
image: mywordpress
에서 mywordpress를 할 수 .db
container.mySQL에 합니다.이 마법은 도커 호스트가 네트워크 브리지(네트워크 오버레이)를 만들기 때문에 가능합니다.
세계 코드베이스에서 각 는 " " " " " " " (" " " " " " " " " " " " ( " " " " ( " " " " " " " " " " " " " " " 을 입니다.Dockerfile
수준으로 모든 및상주하는 곳에서는 반면루일레벨트이에외(POM)서당신다것곳니정입은의할는)를 합니다.docker-compose.yml
모든 마이크로 서비스를 완전한 앱으로 그룹화합니다.
당신의 경우 "Docker Composite"가 "Docker file"보다 선호됩니다."앱"을 "구성"이라고 생각합니다.
도커 파일은 이미지를 조립하기 위한 텍스트 명령이 포함된 파일입니다.
도커 합성은 다중 컨테이너 환경을 실행하는 데 사용됩니다.
특정 시나리오에서 언급한 각 기술(reddis를 사용하는 서비스 1, rabbit mq를 사용하는 서비스 2 등)에 대해 여러 서비스가 있는 경우 각 서비스에 대한 Docker 파일과 모든 "Docker 파일"을 컨테이너로 실행하기 위한 공통 Docker-compose.yml을 가질 수 있습니다.
이 모든 것을 단일 서비스로 원하는 경우 도커 합성이 가능한 옵션이 될 것입니다.
제가 도커를 처음 배우기 시작했을 때, 다음 예시는 제가 도커를 이해하는 데 도움이 되었습니다.
당신이 가지고 있다고 가정합니다.web-app + database
구성은 상당히 일반적인 설정입니다.
그
web-app
부품은 일반적으로 도커 파일로 제작됩니다.실제로 코드를 실행하고 종속성을 설치하는 프레임워크(Python/Django, NodeJS, DotNet 등)가 필요하기 때문입니다.그래서 그framework + web-app
하나의 컨테이너에 단단히 연결되어 있고, 함께 있지 않으면 작동하지 않을 것입니다.그이바로것입니다.Dockerfile's
직업. 직업.하만지그, 그▁however.
database
데이터베이스가 앱에서 분리되어 있기 때문에 부품은 일반적으로 별도의 컨테이너에 저장됩니다.되며, , NodeJS, NodeJS, Node/Restore와는 됩니다.web-app
데이터베이스 서버는 별도로 업그레이드/업그레이드할 수 있습니다.그렇기 때문에 일반적으로 해당 컨테이너를 개별적으로 생성합니다.데이터베이스 엔진 공용 이미지(예: Postgres, SQL Server, MySQL, Mongo 등)를 만들고, 일부 포트를 열고, 일부 볼륨을 마운트하여 데이터를 유지합니다.
그리고 마지막으로 두 부분을 연결합니다.docker-compose
두 개의 "하위 컨테이너"가 들어 있는 컨테이너를 제공합니다.
언급URL : https://stackoverflow.com/questions/29480099/whats-the-difference-between-docker-compose-vs-dockerfile
'itsource' 카테고리의 다른 글
C는 포인터가 참조되지 않은 상태에서 포인터가 경계를 벗어났는지 확인합니까? (0) | 2023.08.05 |
---|---|
스프링 부트 - "[java.util] 인스턴스화에 실패했습니다.List]: HTTP 컨트롤러 핸들러에서 지정된 클래스가 "인터페이스"입니까? (0) | 2023.08.05 |
제한 없이 MySQL 오프셋 (0) | 2023.07.31 |
DEBUG로 Oracle 패키지를 컴파일하면 어떤 영향을 받습니까? (0) | 2023.07.31 |
판다 데이터 프레임의 타임스탬프 열에서 표준시를 제거하는 방법 (0) | 2023.07.31 |