Качаем docker и устанавливаем
Ссылка на скачивание для windows: https://hub.docker.com/editions/community/docker-ce-desktop-windows
На сайте: https://hub.docker.com/ можно скачать официальные и неофициальные images, которые можно устанавливать
Проверить установку и запуск docker можно командой:
docker info
Которая выводит информацию и по клиенту и по серверу, если все нормально установилось и запустилось, примерно так:
C:\Users\user>docker info
Client:
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc., v0.7.1)
compose: Docker Compose (Docker Inc., v2.2.3)
scan: Docker Scan (Docker Inc., v0.17.0)
Server:
Containers: 1
Running: 1
Paused: 0
Stopped: 0
Images: 1
Server Version: 20.10.12
Основные команды Docker
Информация о контейнерах, обо всех
docker ps -a
Запуск контейнера
docker run --name nginx1 -d -p 80:80 nginx
Эта команда скачивает image nginx, если его нет с docker hub, создает контейнер и запускает его
параметр –name nginx1 – задает ему имя nginx1
параметр -d указывает, что запустить нужно как daemon
параметр -p 80:80 указывает на проброску портов, первый порт – это хостовой машины, второй контейнера docker
Удаление контейнера
docker rm <имя контейнера или ид>
Для того чтобы удалить и запущенные контейнеры, можно добавить ключик -f
docker rm -f <имя контейнера или ид>
Остановка контейнера
docker stop <название контейнера или ид>
Запуск контейнера
docker start <название контейнера или ид>
Заморозка
docker pause <название контейнера или ид>
Разморозка
docker unpause <название контейнера или ид>
Информация о контейнере
docker inspect <название контейнера или ид>
Процессы внутри контейнера
docker tor <название контейнера или ид>
Мониторинг контейнеров
docker stats
Запуск контейнера с ограничением по памяти:
docker container run -d -p 80:80 --name proxy -m 10485760 nginx
Приатачиться к контейнеру
docker container attach <имя контейнера или ид>
Переименовать контейнер
docker container rename proxy proxy2
Информация о портах контейнера
docker container port <название контейнера или ид>
Получить логи контейнера
docker container logs <название контейнера или ид>
Как зайти в контейнер docker и что-нибудь там изменить
Для этого можно воспользоваться командой:
docker container exec -it <название контейнера или ид> bash
или
dockeer container exec -it <название контейнера или ид> /bin/sh
После этого можно, что-нибудь установить, например curl:
apt-get update && apt-get install curl -y
И запустить контейнер с проверкой, что он живой:
docker container run -d -p 80:80 --name proxy --health-cmd 'curl http://localhost:80/' --health-retries 3 --health-interval '1s' nginx
Скопировать данные внутрь контейнера
docker container cp ./data/*.html proxy:/usr/share/nginx/html
docker container cp ./data/css proxy:/usr/share/nginx/html/css
Работа с образами (images)
Вывести список образов
docker images
Скачать образ
docker pull <имя образа>
docker pull nginx:latest
docker pull nginx:1.21.6-alpine
Получить подробную информацию про образ
docker image inspect <название образа>
Получить информацию про слои
docker image history <name>
docker image history --no-trunc <name>
Для установки tag
docker image tag nginx test/nginx
docker image tag nginx test/nginx:0.0.1
Пуш образов в репозиторий
docker image push test/nginx
docker image push test/nginx:0.0.1
Создание образа из репозитория
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Удаление образа
docker image rm <название образа>
Работа с сетями в docker
Создание сети
docker network create frontend
Показать список сетей
docker network ls
Присоединить контейнер к сети
docker network connect frontend proxy
Отключить контейнер от сети
docker network disconnect frontend proxy
Информация о сети
docker network inspect frontend
Создать контейнер в определенной сети
docker container run -d -p 80:80 --name proxy --net frontend nginx
Удалить все неиспользуемые сети
docker network prune
Удалить сеть
docker network rm frontend
Запуск контейнеров как alias
# Создаём сеть
docker network create frontend
# Запустить контейне с nginx.
docker container run -d --net frontend --net-alias search elasticsearch:2
docker container run -d --net frontend --net-alias search elasticsearch:2
# nslookup
docker container run --rm --net frontend alpine nslookup search
Работа с Volumes в docker
Создание Volume
docker volume create pgdata
Информация о Volume
docker volume inspect <название>
Вывести список Volume
docker volume ls
Удалить volume
docker volume rm <название>
Сборка образа при помощи Dockerfile
Пример Dockerfile
# Базовый образ с которого мы начнем создание своего собственного образа
FROM postgres
# Копируем файл
COPY db-backup.sh db-backup.sh
COPY cron-file.txt cron-file.txt
RUN apt-get update && apt-get install -y cron
RUN crontab cron-file.txt
RUN service cron start
Создание образа на основе Dockerfile
docker build . -t localhost:5000/postgres:0.0.1 -t localhost:5000/postgres:latest
Запуск при помощи docker compose
Запуск скрипта в файлике yml
docker-compose up -d
файлик по умолчанию называется: docker-compose.yml
Остановка
docker-compose down
Пример запуска Postgre через docker compose
Файл docker-compose.yml
version: '3.1'
services:
db:
image: postgres
restart: always
environment:
POSTGRES_PASSWORD: pass
volumes:
- 'pgdata:/var/lib/postgresql/data'
adminer:
image: adminer
restart: always
ports:
- 8080:8080
volumes:
pgdata:
external: true
Запуск:
docker volume create pgdata
docker-compose up -d