configurations/program/src/docker.md

5.7 KiB
Raw Blame History

Docker

Работа с image, container, volume и network

Удаление всех image, container, volume, network:

docker system prune -a

image

Список загруженных image:

docker images -a

или

docker image ls -a

Удаление выбранных image:

docker rmi image image

Удаление всех image:

docker rmi $(docker images -a -q)

Выгрузка image в файл:

docker save repository:tag | gzip > image.tar.gz

или

docker save -o image.tar repository:tag

или

docker save image > image.tar

где

  • repository:tag - образ выгружаемого image

Например:

docker save nginx:alpine | gzip > nginx_alpine.tar.gz

Загрузка image из файла:

docker load < image.tar.gz

или

docker load --input image.tar

container

Список контейнеров:

docker ps -a

или

docker container ls -a

Удаление выбранных контейнеров:

docker rm ID_or_Name ID_or_Name

Удаление всех контейнеров:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

Запуск контейнера:

docker run --restart always --name mynginx -p 8080:80 -d nginx:alpine

где

  • run - запуск контейнера
  • --restart - всегда (always) стартовать автоматически контейнер после запуска docker
  • --name - установить имя (mynginx) контейнера
  • -p - пробросить порт 80 из контейнера в хост порт 8080
  • -d - запустить контейнер в фоновом режиме (detached mode)
  • nginx:alpine - имя образа image, на основе которого запускается контейнер

volume

Список volume:

docker volume ls

Удаление выбранных volume:

docker volume rm volume_name volume_name

Удаление всех volume:

docker volume prune

Монтирование volume

Использование nfs

При монтировании сетевого volume типа nfs необходимо убедиться, что права (uid и gid) расшариваемого каталога, установленные на сервере, совпадают с правами пользователя, от которого выполняется запуск контейнера, а также выставлены правильные права на расшариваемый каталог в файле /etc/exports на сервере nfs.

Т.е., необходимо, чтобы на сервере, где поднят nfs-server в файле /etc/exports были правильно указаны права (uid и gid) каталогу, который будет расшариваться и использоваться в качестве volume, и сам расшариваемый каталог обладал соответствующими правами (uid и gid).

Например:

Необходимо поднять контейнер gitea с использованием nfs тома. Т.к. gitea запускается с правами 1000:1000 - то и производит запись в volume от этих же прав.

К примеру, на nfs сервере необходимо использовать каталог /volumes/gitea в качестве расшариваемого ресурса для использования в качестве volume для gitea.

В файле /etc/exports внести запись:

/volumes/gitea <ip-address>(rw,sync,insecure,all_squash,anonuid=1000,anongid=1000,no_subtree_check,nohide,fsid=1)

где <ip-address> необходимо указать IP-адрес или подсеть

Установить права 1000:1000 на расшариваемый каталог:

chown 1000:1000 /volumes/gitea

Для проверки можно произвести монтирование каталога в host системе, где установлен docker. К примеру, каталог для монтирования указан в /mnt/volumes/gitea:

mount -t nfs <ip-address>:/volumes/gitea /mnt/volumes/gitea

Каталог в host системе будет смонтирован с правами 1000:1000.

Создание volume вручную

Создание volume с использованием nfs тома:

docker volume create --driver local --opt type=nfs --opt o=addr=192.168.1.1,nfsvers=4,rw,async,rw --opt device=:/volumes/gitea gitea_data
Создание volume в compose

Для использования nfs тома в docker-compose необходимо указать в секции volume свой том и в сервисе указать используемый volume:

...

services:
 gitea:
    ...
    volumes:
      - type: volume
        source: gitea
        target: /data
      - /etc/timezone:/etc/timezone:ro
    ...

...

volumes:
  gitea:
    driver: local
    driver_opts:
      type: nfs
      o: addr=192.168.1.1,nfsvers=4,rw,async
      device: ":/volumes/gitea"

...