Контейнеры vs образы
docker login
docker logout
docker run -d -p 80:80 docker/getting-started
docker info
docker images = > все образы
docker ps = > все контейнеры
docker stop df9bdf039014
docker start df9bdf039014
docker pause df9bdf039014
docker unpause df9bdf039014
docker restart df9bdf039014
(container id)
docker pull opendjk = > скачивание образа
docker pull openjdk:11 = > определенный образ
Образ без контейнера создать нельзя = > он создается сам. Работает контейнер, а не образ. Каждый раз создается новый контейнер.
docker run -it --name MyJava openjdk = > ( -it = > interactive mode)
ctrl+d = > leave interactive mode
docker start MyJava = > запуск контейнера
docker stop MyJava = > stop
docker kill MyJava = > kill
.
FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install -r requirements.txt
.
version: '3'
services:
django:
build: .
container_name: django
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/usr/src/app
ports:
- "8000:8000"
depends_on:
- pgdb
pgdb:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
container_name: pgdb
volumes:
- pgdbdata:/var/lib/postgresql/data
volumes:
pgdbdata: null
.
FROM openjdk
COPY . /java
WORKDIR /java
RUN javac Main.java
CMD ["java", "Main"]
docker build .
docker rm myapp = > delete container
docker image rm e46e2acfed5d = > delete image
docker build -t my-php-app .
docker run -p 8001:80 -d my-php-app
docker-compose build
docker-compose up
docker-compose down
docker-compose run
docker-compose run django django-admin startproject tutorial .
docker build -t gmashtalyar/myphp ./php
docker push gmashtalyar/myphp:latest
docker image rm gmashtalyar/myphp
docker pull gmashtalyar/myphp
docker run -p 3001:80 --name myapp gmashtalyar/myphp
.
docker logs container_id
docker compose up —build
docker compose up —build -d
docker compose down
docker compose down —remove-orphans = > deletes containers as well (сиротсике контейнеры)
docker system prune -a = > delete all containers and images
docker-compose --profile dev up = > запуск профилей
docker exec container_id pytest api/tests.py
При docker compose down - удаляются контейнеры, в тч база данных. Чтобы это не происходило есть volumes. В тч global.
volumes:
- pg_data:/var/lib/postgresql/data
Docker-compose scale celery-beat=2 = > масштабирование контейнеров
Запуск контейнеров
* docker inspect - запускает все сервисы и контейнеры на основе вашего docker-compose.yml файла
* docker-compose up -d - запускает все контейнеры в фоновом режиме (не блокирует консоль)
* docker-compose up postgres> - запускает определенный сервис (вместо postgres подставьте нужный)
* docker-compose --profile dev up - запускает только те контейнеры, которые относятся к профилю dev
* docker-compose start - запускает остановленные контейнеры
* docker-compose build - собирает образы
* docker-compose up --build - запускает и одновременно пересобирает образы, если они были изменены с момента последнего запуска или если они еще не были созданы
* docker-compose restart - перезапустить контейнеры
Остановка контейнеров
* docker-compose down - останавливает и удаляет все контейнеры и сети, созданные с помощью docker-compose up
* docker-compose down --remove-orphans - если какие-либо контейнеры остаются после остановки всех сервисов, которые изначально их создали, то эти оставшиеся контейнеры также будут удалены
* docker-compose down --volumes - останавливает контейнеры и удаляет связанные с ними volumes
* docker-compose stop - останавливает контейнеры, созданные с помощью docker-compose up, без их удаления
Состояние контейнеров
* docker-compose logs - просмотреть логи
* docker logs <container_name> - посмотреть логи конкретного контейнера
* docker-compose ps - просмотреть статус запущенных контейнеров
* docker-compose top - отображает информцию о процессах внутри контейнеров
* docker inspect <container_id> - показывает json с настройками контейнера и его состоянием
Масштабирование
* docker-compose up -d --scale <service_name>=<num_instances> - масштабирует количество запущенных контейнеров для указанного сервиса
Выполнение команд внутри контейнера
* docker-compose exec <container_id> <command> - позволяет выполнять команды внутри контейнера, например docker exec 7cbde5a06bbb pytest api/tests.py
* docker exec -it <container_id> /bin/sh - открыть консоль контейнера
.
version: '3.8'
x-environment-defaults: &environment-defaults
DEBUG: "False"
DB_NAME: "some secret value"
DB_USER: "some secret value"
DB_PASSWORD: "some secret value"
DB_HOST: "some secret value"
DB_PORT: 5432
CELERY_BROKER_URL: "redis://redis:6379/0"
CELERY_RESULT_BACKEND: "redis://redis:6379/0"
SECRET_KEY: "some secret value"
services:
postgres:
image: postgres:latest
container_name: postgres
environment:
POSTGRES_USER: some secret value
POSTGRES_PASSWORD: some secret value
POSTGRES_DB: some secret value
ports:
- "5432:5432"
volumes:
- pg_data:/var/lib/postgresql/data
networks:
- prediction-network
# profiles:
# - dev
# - all
prediction:
build:
context: ./prediction
ports:
- "8000:8000"
networks:
- prediction-network
depends_on:
- postgres
environment:
<<: *environment-defaults
volumes:
- static_volume:/app/static
restart: on-failure:5
healthcheck:
test: curl -f http://localhost:8000/api/health || exit 1
interval: 10s
timeout: 10s
retries: 3
start_period: 10s
nginx:
image: nginx:latest
volumes:
- ./conf/nginx.conf:/etc/nginx/nginx.conf
- static_volume:/static
ports:
- "80:80"
networks:
- prediction-network
depends_on:
- prediction-app
- prediction
prediction-app:
build:
context: ./prediction-app
ports:
- "3000:3000"
networks:
- prediction-network
redis:
image: redis:latest
ports:
- "6379:6379"
networks:
- prediction-network
# profiles:
# - dev
# - all
celery:
build:
context: ./prediction
command: celery -A prediction worker --loglevel=info
depends_on:
- redis
- postgres
networks:
- prediction-network
environment:
<<: *environment-defaults
celery-beat:
build:
context: ./prediction
command: celery -A prediction beat --loglevel=info
depends_on:
- redis
- postgres
- celery
networks:
- prediction-network
environment:
<<: *environment-defaults
volumes:
pg_data:
static_volume:
networks:
prediction-network:
driver: bridge
.
FROM python:3.11-slim
WORKDIR /app
RUN apt-get update && apt-get install -y curl && apt-get clean
COPY . /app/
RUN pip3 install -r requirements.txt
CMD python3 manage.py migrate \
&& python3 manage.py shell -c "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.filter(username='admin').exists() or User.objects.create_superuser('admin', '', 'admin')" \
&& python3 manage.py loaddata data.json \
&& python3 manage.py collectstatic --no-input \
&& gunicorn gm_app.wsgi:application --bind 0.0.0.0:8000
.
docker ps --size
docker system df