# Docker ## Работа с `image`, `container`, `volume` и `network` Удаление всех `image`, `container`, `volume`, `network`: ```sh docker system prune -a ``` ## image Список загруженных `image`: ```sh docker images -a ``` или ```sh docker image ls -a ``` Удаление выбранных `image`: ```sh docker rmi image image ``` Удаление всех `image`: ```sh docker rmi $(docker images -a -q) ``` Выгрузка `image` в файл: ```sh docker save repository:tag | gzip > image.tar.gz ``` или ```sh docker save -o image.tar repository:tag ``` или ```sh docker save image > image.tar ``` где - `repository:tag` - образ выгружаемого `image` Например: ```sh docker save nginx:alpine | gzip > nginx_alpine.tar.gz ``` Загрузка `image` из файла: ```sh docker load < image.tar.gz ``` или ```sh docker load --input image.tar ``` ## container Список контейнеров: ```sh docker ps -a ``` или ```sh docker container ls -a ``` Удаление выбранных контейнеров: ```sh docker rm ID_or_Name ID_or_Name ``` Удаление всех контейнеров: ```sh docker stop $(docker ps -a -q) docker rm $(docker ps -a -q) ``` Запуск контейнера: ```sh docker run --restart always --name mynginx -p 8080:80 -d nginx:alpine ``` где - `run` - [запуск контейнера](https://docs.docker.com/engine/reference/commandline/container_run/) - `--restart` - **всегда** (`always`) [стартовать автоматически](https://docs.docker.com/config/containers/start-containers-automatically/) контейнер после запуска `docker` - `--name` - установить имя (`mynginx`) контейнера - `-p` - [пробросить](https://docs.docker.com/config/containers/container-networking/) порт `80` из контейнера в хост порт `8080` - `-d` - запустить контейнер в фоновом режиме (*detached mode*) - `nginx:alpine` - имя образа `image`, на основе которого запускается контейнер ## volume Список `volume`: ```sh docker volume ls ``` Удаление выбранных `volume`: ```sh docker volume rm volume_name volume_name ``` Удаление всех `volume`: ```sh 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` внести запись: ```sh /volumes/gitea (rw,sync,insecure,all_squash,anonuid=1000,anongid=1000,no_subtree_check,nohide,fsid=1) ``` где `` необходимо указать IP-адрес или подсеть Установить права `1000:1000` на расшариваемый каталог: ```sh chown 1000:1000 /volumes/gitea ``` **Для проверки** можно произвести монтирование каталога в `host` системе, где установлен `docker`. К примеру, каталог для монтирования указан в `/mnt/volumes/gitea`: ```sh mount -t nfs :/volumes/gitea /mnt/volumes/gitea ``` Каталог в `host` системе будет смонтирован с правами `1000:1000`. ##### Создание `volume` вручную Создание `volume` с использованием `nfs` тома: ```sh 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`: ```sh ... 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" ... ```