Інструкція виконання робіт з Docker
Для роботи використовуйте віртуальну машину, яку ви створили в Cloud. Наш приклад буде на базі AWS. Встановіть Ubuntu та отримайте надійне з'єднання з машиною, наприклад через Putty.
Install Docker on Ubuntu 18.04
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Оновлюємо систему, встановлюємо програми, ключ, репозитарій, які необхідні для інсталяції та коректної роботи докера.
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
#Встановлюємо докер, перевіряємо статус, добавляємо поточного юзера в групу докер (щоб не вводити кожного разу sudo), виходимо та знову входимо в систему
sudo apt install docker-ce docker-ce-cli containerd.io
sudo systemctl status docker
sudo usermod -aG docker ім'я_поточного_юзера
>>>logout/login<<<
#Запускаємо докер. Щоб просто скачати команда pull, а можна скачати і запустити командою run
docker run hello-world
#буде вивід роботи докера
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Перегляд запущених контейнерів
docker ps
#Перегляд всіх існуючих контейнерів в системі
docker ps -a
#Перегляд існуючих образів
docker images
#пошук образів докера в dockerhub
docker search tomcat
#Скачати докер
docker pull tomcat
#Запуск докера в інтерактивному режимі роботи докера та вказуванням порту через який ми можемо зайти в докер. 1234:8080 - переадресація портів з зовнішньої системи в середину докера.
docker run -it -p 1234:8080 tomcat
docker run -it -p 8888:80 nginx
#Запустимо контейнер з сервером nginx як демона (процесу в памяті), в не інтерактивному режимі з ім'ям nginxserver. В іншому випадку кожного разу при створенні контейнера буде генеруватися випадкове нове ім'я.
docker run --name nginxserver -d -p 8888:80 nginx
Кожний образ можна запустити як новий контейнер, який буде працювати окремо. Ідентифікувати кожен контейнер треба по id.
#Зупинка докера
docker stop nginx
# Якщо запустили docker run і зупинили його, то наступного разу його вже потрібно запускати через docker start, інакше запускаючи команду docker run кожен раз, ви будете створювати окремі однакові контейнери
docker start id-контейнера
#Видалення контейнера та образа докера
docker rm nginx # delete container
docker rmi nginx # delete image
#Робота всередині докера
Створюємо каталог (mydocker) де будемо створювати свій докер.
mkdir mydocker
cd mydocker/
Створюємо Dockerfile
nano Dockerfile
#---------------------------------------------------------------------------
# Dockefile to build Docker Image of Apache WebServer running on Ubuntu
# Made by ADV-IT 13-March-2019
#---------------------------------------------------------------------------
FROM ubuntu:16.04
RUN apt-get -y update
RUN apt-get -y install apache2
RUN echo 'Hello World from Docker!' > /var/www/html/index.html
CMD ["/usr/sbin/apache2ctl", "-D","FOREGROUND"]
EXPOSE 80
#Створюємо докер (oleg) версії образа (:v1).
Точка в кінці вказує створити в локальному каталозі. Після виконання команди, скачається образ, проінсталюються оновлення і встановиться апачі. Пропишеться текст в index.html
docker build -t oleg:v1 .
#Перевіримо командою docker images чи створився наш образ.
...#Запускаємо докер (oleg:v1)
docker run -d -p 7777:80 oleg:v1
#Заходимо всередину докера по id контейнера oleg:v1
docker exec -it 5267e21d140 /bin/bash
#Добавляємо слова в файл
echo "V2" >> /var/www/html/index.html
або можемо наприклад інсталювати мс і працювати в зручнішому форматі
apt-get -y install mc
#Виходимо з контейнера
exit
#Створюємо з робочого контейнера по його id новий образ докера
docker commit 5267e21d140 oleg:v1:latest
#Можемо запустити новий образ на іншому порту
docker run -d -p 1234:80 oleg:v1:latest
#Зробити копію образа
docker tag oleg:v1:latest oleg:new
# Завантаження образу на DockerHub
#Реєструємося і входимо в DockerHub в ОС, де запущені докери
docker login
вводимо логін та пароль
#Задаємо тег для образу, який плануємо завантажити. Маємо змінити ім'я тегу під репозиторій, щоб мати змогу завантажити.
docker tag oleg:new bedrik/tac:oleg
# Завантажуємо в репозиторій
docker push bedrik/tac:oleg
Для виявлення проблем при запуску або роботі контейнера дуже корисна опція для перегляду логів:
docker logs <ім'я або ідентифікатор контейнера>
Export/Import Docker Image to file
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
docker save image:tag > arch_name.tar
docker load -i arch_name.tar
Kill and Delete Containers and Images
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
docker rm -f $(docker ps -aq) # Delete all Containers
docker rmi -f $(docker images -q) # Delete all Images
docker inspect імя контейнера перевірка налаштувань контейнера
docker diff імя контейнера
#Docker з'єднання контейнерів між собою
Покажемо як запустити декілька контейнерів зв'язавши їх між собою
#запустимо контейнер з базою даних mariadb (ім'я контейнера mysqlserver) з користувачем example-user (пароль my_cool_secret) та root (пароль my-secret-pw)
docker run --detach --name mysqlserver --env MARIADB_USER=example-user --env MARIADB_PASSWORD=my_cool_secret --env MARIADB_ROOT_PASSWORD=my-secret-pw mariadb
# запустимо контейнер з адмінпанелю баз даних adminer з підключенням до контейнера mysqlserver та роботою на порту 8080 (mysqlserver:db - аналог для підключення ір:порт)
docker run --link mysqlserver:db -d -p 8080:8080 adminer
Коли запускаємо контейнер з командою --link, то створюється докер-мережа типу bridge, до якої підключаються обидва контейнери - той який створюємо і той, який вказали як значення опції --link (до якого підключаємося).
Цю мережу можна побачити, якщо виконати docker network ls (майте на увазі, що за замовчуванням вже буде кілька мереж у списку, який ви побачите). Подивитися яка мережа створена саме для ваших контейнерів можна так:
виконуємо docker inspect <container_name> і шукаємо в самому кінці NetworkSettings -> Networks -> bridge ключ NetworkID.
Це ж значення можна побачити в docker network ls в колонці NETWORK ID до цієї мережі можна підключити інші контейнери, відключити підключені або видалити цю мережу.
#Запустимо контейнер з wordpress та базою даною! Using the Docker Command Line
Можна просто скопіювати команди і отримаємо робочу систему.
Step 1: Create a network$ docker network create wordpress-network
Step 2: Create a volume for MariaDB persistence and create a MariaDB container$ docker volume create --name mariadb_data
$ docker run -d --name mariadb \
--env ALLOW_EMPTY_PASSWORD=yes \
--env MARIADB_USER=bn_wordpress \
--env MARIADB_PASSWORD=bitnami \
--env MARIADB_DATABASE=bitnami_wordpress \
--network wordpress-network \
--volume mariadb_data:/bitnami/mariadb \
bitnami/mariadb:latest
Step 3: Create volumes for WordPress persistence and launch the container$ docker volume create --name wordpress_data
$ docker run -d --name wordpress \
-p 8080:8080 -p 8443:8443 \
--env ALLOW_EMPTY_PASSWORD=yes \
--env WORDPRESS_DATABASE_USER=bn_wordpress \
--env WORDPRESS_DATABASE_PASSWORD=bitnami \
--env WORDPRESS_DATABASE_NAME=bitnami_wordpress \
--network wordpress-network \
--volume wordpress_data:/bitnami/wordpress \
bitnami/wordpress-nginx:latest
Access your application at http://your-ip:8080/wp-admin
WORDPRESS_USERNAME
: userWORDPRESS_PASSWORD
: bitnami
docker run --network wordpress-network -d -p 8085:8080 adminer
server mariadb
MARIADB_USER=bn_wordpress
MARIADB_PASSWORD=bitnami