Файл Docker-compose
version: "3"
services:
db:
image: postgres
environment:
POSTGRES_USER: zuri
POSTGRES_DB: zuri
POSTGRES_PASS: zuri1234
volumes:
- pgdata:/var/lib/posgresql/data
zuri:
build:
context: .
ports:
- "8000:8000"
volumes:
- ./zuri:/zuri
command: python manage.py runserver 0.0.0.0:8000
depends_on:
- db
volumes:
pgdata:
Файл docker-compose состоит из различных компонентов.
Я не буду говорить обо всех из них, но затрону некоторые важные.
По сути, файл compose определяет сервисы, которые контролируют контейнеры.
Из приведенного выше примера видно, что у меня есть две службы: db и zuri.
Служба db – это мой контейнер базы данных, а служба zuri – мой проект.
Эти две сущности общаются через свойство depends_on, что говорит docker-compose создать сервис, если он не существует при запуске сервиса zuri.
Под каждой службой вы можете определить множество свойств, таких как порты, тома для использования, сеть и т. д.
Конечно, каждый контейнер использует образ, и поэтому вы можете напрямую определить образ в файле docker-compose или указать используемый Dockerfile.
В этом примере вы можете увидеть в сервисе zuri, что я определил контекст сборки с помощью . что говорит docker-compose искать файл docker file в том же каталоге, чтобы создать образ для сервиса.
Но у службы базы данных есть образ, определенный Postgres.
Вот docker file службы zuri:
#base image
FROM python:3
#maintainer
LABEL Author="CodeGenes"
# The enviroment variable ensures that the python output is set straight
# to the terminal with out buffering it first
ENV PYTHONBUFFERED 1
#directory to store app source code
RUN mkdir /zuri
#switch to /app directory so that everything runs from here
WORKDIR /zuri
#copy the app code to image working directory
COPY ./zuri /zuri
#let pip install required packages
RUN pip install -r requirements.txt
Жизненный цикл Docker контейнера
$ docker create –name <container-name> <image-name>
$ docker run -it -d –name <container-name> <image-name>
$ docker pause <container-id/name>
$ docker unpause <container-id/name>
$ docker start <container-id/name>
$ docker stop <container-id/name>
$ docker restart <container-id/name>
$docker kill <container-id/name>
$docker rm <container-id/name>
Разница между Docker run и Docker start
Команда: Docker run IMAGE_ID, а не Docker run CONTAINER_ID
Команды Docker-compose
$ docker-compose --help
Define and run multi-container applications with Docker.
Usage:
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help
Options:
-f, --file FILE Specify an alternate compose file (default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name (default: directory name)
--verbose Show more output
--no-ansi Do not print ANSI control characters
-v, --version Print version and exit
-H, --host HOST Daemon socket to connect to
--tls Use TLS; implied by --tlsverify
--tlscacert CA_PATH Trust certs signed only by this CA
--tlscert CLIENT_CERT_PATH Path to TLS certificate file
--tlskey TLS_KEY_PATH Path to TLS key file
--tlsverify Use TLS and verify the remote
--skip-hostname-check Don't check the daemon's hostname against the name specified
in the client certificate (for example if your docker host
is an IP address)
--project-directory PATH Specify an alternate working directory
(default: the path of the Compose file)
Commands:
build Build or rebuild services
bundle Generate a Docker bundle from the Compose file
config Validate and view the Compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
images List images
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information
Docker-compose run, up, exec – какая разница?
Что ж, когда я начал использовать docker, я заметил, что в руководствах часто использовались docker-compose up, docker-compose run и docker-compose exec, в основном без объяснений.
Я знаю, что вы можете просто прочитать разницу в документах командной справки, но иногда полезно полностью оценить разницу, копая немного глубже.
Docker Compose Up
$ docker-compose up
Для просмотра запущенных контейнеров:
$ docker-compose ps
$ docker-compose up zuri
Docker Compose Run
Эта команда раскрутит новый контейнер.
Он используется в основном тогда, когда вы хотите, чтобы новый контейнер и просто контейнер не работал, и являлся одноразовым процессом, который позволяет избежать конфликтов с другими сервисами в вашем docker-compose.yml, которые могут быть запущены.
$ docker-compose run zuri python manage.py migrate
Docker Compose Exec
Эта команда используется, когда вы хотите взаимодействовать с уже запущенным контейнером.
Поэтому его необходимо запускать с аргументом.
Перед выполнением контейнер должен быть в рабочем состоянии!
Вот и все пока.
Как всегда, комментарии привествуются!