Docker Compose vs. Dockerfile - który lepszy?
Czytam i uczę się o Docker i próbuję poprawnie wybrać konfigurację Django do użycia. Na razie jest albo:
Rozumiem, że {[1] } są używane w Docker Compose
, ale nie jestem pewien, czy jest dobrą praktyką umieszczanie wszystkiego w jednym dużym pliku Dokerowym z wieloma poleceniami FROM
dla różnych obrazów?
Chcę użyć kilku różnych obrazów, które obejmują:
uwsgi
nginx
postgres
redis
rabbitmq
celery with cron
Proszę doradzić, jakie są najlepsze praktyki w tworzeniu tego typu środowiska przy użyciu Docker .
Jeśli to pomoże, jestem na komputerze Mac, więc używam boot2docker .
Niektóre problemy miałem:
-
Docker Compose nie jest kompatybilny z Python3]}
- chcę konteneryzować mój projekt, więc jeśli jeden duży plik Dockerfile nie jest to idealne rozwiązanie, więc czuję, że muszę to przerwać używając Docker Compose]}
- jestem w porządku, aby projekt Py2 i Py3 były kompatybilne, więc skłaniam się ku django-compose
6 answers
Odpowiedź nie jest żadna.
Docker Compose (dalej jako compose) użyje pliku Dockerfile, jeśli dodasz polecenie build do docker-compose.yml
twojego projektu.
Obieg pracy Dockera powinien polegać na zbudowaniu odpowiedniego Dockerfile
dla każdego obrazu, który chcesz utworzyć, a następnie użyciu compose do złożenia obrazów za pomocą polecenia build
.
Możesz określić ścieżkę do poszczególnych plików Dockerfiles używając build /path/to/dockerfiles/blah
Gdzie /path/to/dockerfiles/blah
jest miejscem, w którym mieszka Dockerfile
bla.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-07 08:28:57
Dockerfile
Plik Dockerfile to prosty plik tekstowy, który zawiera polecenia, które użytkownik może wywołać w celu złożenia obrazu.
Przykład, Dockerfile
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 Compose
Docker Compose
Jest narzędziem do definiowania i uruchamiania aplikacji Docker dla wielu kontenerów.
Zdefiniuj usługi, które składają się na Twoją aplikację w
docker-compose.yml
, aby mogły być prowadzone razem w odizolowanym środowisku.Pobierz aplikację działającą jednym poleceniem, uruchamiając ją
docker-compose up
Przykład, docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-07 14:28:16
Plik Compose opisuje kontener w stanie uruchomionym , pozostawiając szczegóły jak zbudować kontenera do Dockerfiles . http://deninet.com/blog/1587/docker-scratch-part-4-compose-and-volumes
Kiedy zdefiniujesz swoją aplikację z Compose w rozwoju, możesz użyć tego definicja uruchamiania aplikacji w różnych środowiskach, takich jak CI, inscenizacji i produkcji . https://docs.docker.com/compose/production/
Wydaje się również, że komponowanie jest uważane za produkcję bezpieczną od 1.11, ponieważ https://docs.docker.com/v1.11/compose/production/ nie ma już ostrzeżenia, aby nie używać go w produkcji jak https://docs.docker.com/v1.10/compose/production / robi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-29 08:36:56
W moim obiegu pracy dodaję plik Dockerfile dla każdej części systemu i konfiguruję go tak, aby każda część mogła działać indywidualnie. Następnie dodaję docker-compose.yml, aby je połączyć i połączyć.
Największa zaleta( moim zdaniem): Kiedy połączysz kontenery, możesz zdefiniować nazwę i pingować swoje kontenery o tej nazwie. Dlatego Twoja baza danych może być dostępna pod nazwą db
, a nie pod jej adresem IP.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-29 08:49:06
Pliki Dockerfiles mają na celu zbudowanie obrazu na przykład z gołej kości ubuntu, możesz dodać mysql o nazwie "mySQL" na jednym obrazie i mywordpress na drugim obrazie o nazwie "mywordpress".
Komponowanie plików YML ma na celu zrobienie tych obrazów i ich spójną analizę. na przykład, jeśli masz w docker-compose.YML file a service call " db" : usługi: db: image: mySQL - - - image that you built.
Oraz serwis o nazwie worpress taki jak:
Wordpress: obraz: mywordpress
Następnie wewnątrz kontenera mywordpress możesz użyć "db", aby połączyć się z kontenerem mySQL. ta magia jest możliwa, ponieważ host Dockera tworzy most netowrk (network overly).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 22:29:59
"lepszy" jest względny. Wszystko zależy od twoich potrzeb. Docker compose służy do aranżacji wielu kontenerów. Jeśli te obrazy już istnieją w rejestrze dokera, lepiej jest wymienić je w pliku compose. Jeśli te lub inne obrazy muszą być zbudowane z plików na komputerze, możesz opisać procesy tworzenia tych obrazów w pliku Dockerfile.
Rozumiem, że pliki Dockerfiles są używane w Docker Compose, ale nie jestem pewien, czy jest dobra praktyka, aby umieścić wszystko w jednym dużym pliku Dokerowym z wieloma poleceniami FROM dla różnych obrazów?
Używanie multiple FROM w jednym pliku dokerowym nie jest zbyt dobrym pomysłem, ponieważ istnieje propozycja usunięcia tej funkcji. 13026
Jeśli na przykład chcesz dokerować aplikację, która używa bazy danych i ma pliki aplikacji na twoim komputerze, możesz użyć pliku compose razem z plikiem dockerfile jako follows
Docker-compose.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
Dockerfile
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-25 11:20:38