Краткая справка по работе с docker

Основано на видеоуроках с youtube.

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

docker run -d -p 80:80 docker/getting-started
  • -d — работа в фоне (не блокируется terminal)
  • -p 80:80 привязка портов (проброс)

Просмотр образов

docket images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
docker/getting-started   latest    3e4394f6b72f   2 months ago   47MB

Просмотр контейнеров

docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS         PORTS                NAMES
1d58b01e8210   docker/getting-started   "/docker-entrypoint.…"   11 minutes ago   Up 3 minutes   0.0.0.0:80->80/tcp   strange_kirch

Остановка контейнера

docker stop 1d58b01e8210

Где 1d58b01e8210 — идентификатор контейнера полученный из команды docker ps

Аналогичны команды:

  • docker start — запуск
  • docker pause — пауза
  • docker unpause — запуск после паузы
  • docker restart — перезапуск

Запуск и остановка по имени

docker run -it --name MyJava openjdk
docker stop MyJava

Создание образа Ubuntu

docker pull ubuntu
docker run -it --name MyUbuntu ubuntu

Создание контейнера Ubuntu с именем MyUbuntu

Сборка контейнера

#Dockerfile

FROM openjdk:11
COPY . /java
WORKDIR /java
RUN javac Main.java
CMD [ "java", "Main" ]
#Main.java

package com.itproger;

class Main {
    public static void main(String[] args) {
        System.out.println("Hello World!!!"); // Показываем строку
    }
}

Выполняем команду: docker build .

Где символ точка — это каталог откуда должны быть получены данные

# с указанием имени
docker build -t my-php-app ./php

Удаление образа

docker images

REPOSITORY               TAG       IMAGE ID       CREATED          SIZE
<none>                   <none>    90389505100b   24 seconds ago   654MB
ubuntu                   latest    08d22c0ceb15   2 weeks ago      77.8MB
openjdk                  latest    71260f256d19   6 weeks ago      470MB
docker/getting-started   latest    3e4394f6b72f   3 months ago     47MB

docker image rm 90389505100b

Deleted: sha256:90389505100b8a62cd0a8aab3c8e92eb0c7fccda068563cd41cd6611cccf3b6f

Удаление контейнера

#check container
docker ps -a

#remove container
docker rm containerID

Если образ не удаляется

docker image rm 935492793c47
Error response from daemon: conflict: unable to delete 935492793c47 (must be forced) - image is being used by stopped container 0f632ed0d1b5
# можно запустить так
docker image rm -f 935492793c47
Deleted: sha256:935492793c475e0d0f3208ef3a193a7b5ba26c246a65fe8e16716c41e4aee16d

Ещё один пример создания и запуска контейнера

# ./php/Dockerfile
FROM php:7.2-apache
COPY . /var/www/html
WORKDIR /var/www/html
EXPOSE 80

# ./php/index.php
<?php
    echo "Hello";

# создаём образ с именем my-php-app
docker build -t my-php-app ./php

# запускаем образ
docker run -p 8001:80 -d my-php-app

Docker compose

# docker-compose.yml
version: '3.1'

services:
  db:
    image: mariadb:10.6
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: notSecureChangeMe

  phpmyadmin:
    image: phpmyadmin
    restart: always
    ports:
      - 8080:80
    environment:
      - PMA_ARBITRARY=1
docker-compose build
# сборка
docker-compose up  

Подключение собственного образа

# docker-compose.yml
version: '3.1'

services:
    php:
        build: ./php
        ports:
            - 8081:80
...

Публикация образа в dockerhub

Создание тома

docker volume create test
docker volume inspect test

На WSL эта информация хранится в папке:

\\wsl$\docker-desktop-data\data\docker\volumes

Привязка тома налету

docker run -it --rm -v newdata:/data busybox

Аргумент -v имеет собственный синтаксис, что видно по двоеточию, которое ставится сразу же после имени тома (мы выбрали для него очень оригинальное название newdata). А далее через слэш указывается путь монтирования тома в контейнере. Теперь можно записывать туда данные, например: 

echo "Timeweb" > /data/timeweb

Работа с файлами и папками

Для монтирования данных используются следующие параметры:

  • -v или —volume
  • —mount

Их различие в том, что mount более явно заставляет указывать источник и цель монтирования папки. Вы можете использовать эти параметры совместно, отдельно, повторяя несколько раз — ограничений нет

Для примера — у меня есть следующая папка на хосте:

/home/alex/docker_data

В случае параметра «-v» указывается два пути «откуда:куда». В случае «—mount» это именованные параметры разделенные запятыми. Пример работы обоих:

-v /home/alex/docker_data:/usr/share/nginx/html
# или
--mount type=bind,source=/home/alex/docker_data,destination=/usr/share/nginx/html

В mount мы используем следующие параметры:

  • type — со значением ‘bind’ говорит, что мы монтируем папку или файл;
  • source — источник т.е. папка или файл, который мы хотим подключить к контейнеру;
  • destination — папка или файл внутри контейнера.

В обоих случаях мы можем монтировать данный доступные только для чтения (read-only) добавив «ro» в конце:

-v /home/alex/docker_data:/usr/share/nginx/html:ro
--mount type=bind,source=/home/alex/docker_data,destination=/usr/share/nginx/html,ro

Так выглядит запуск контейнера с проброшенной папкой:

docker run -d --name nginx_vol1 -v /home/alex/docker_data:/usr/share/nginx/html:ro nginx
# или
docker run -d --name nginx_vol2 --mount type=bind,source=/home/alex/docker_data,destination=/usr/share/nginx/html,ro nginx
Print Friendly, PDF & Email

Добавить комментарий