Інструкція виконання робіт з Docker

Розглянемо дії, які необхідно виконати в Ubuntu по встановленню та управлінню 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_USERNAMEuser
  • WORDPRESS_PASSWORD: bitnami
Step 4: Адмінпанель бази даних
docker run --network wordpress-network -d -p 8085:8080 adminer  
server mariadb
MARIADB_USER=bn_wordpress
MARIADB_PASSWORD=bitnami

Остання зміна: Thursday 17 February 2022 21:46 PM