Які команди використовують для створення та запуску контейнера в docker




Які команди використовують для створення та запуску контейнера в docker



Пам'ятка docker container commands

Docker надає безліч команд для керування контейнерами, образами, мережами та іншими ресурсами. Ось деякі з основних команд, пов'язаних із контейнерами:

# Docker Container Commands Docker - це інструмент, який дозволяє розробникам, системним адміністраторам і т.д. розгортати програми у контейнері. У цій пам'ятці ми розглянемо основні команди Docker, які використовують для роботи з контейнерами. ## Запуск контейнера Для запуску контейнера використовується команда `docker run`. Наприклад, щоб запустити контейнер з програмою Spring, ви можете використовувати наступну команду: ```bash docker run -d -p 8080:8080 my-spring-app ``` Тут: - `-d` означає, що контейнер буде запущений у фоновий режим. - `-p 8080:8080` означає, що порт 8080 на вашому локальному хості буде прокинутий на порт 8080 усередині контейнера. - `my-spring-app` – це ім'я образу Docker, який буде використаний для створення контейнера. ## Зупинка контейнера Щоб зупинити працюючий контейнер, використовуйте команду `docker stop`, вказавши ID або ім'я контейнера: ````bash docker stop my-spring-app``` ## Видалення контейнера Для видалення контейнера використовується команда `docker rm`.Наприклад: ````bash docker rm my-spring-app```` ## Перегляд списку контейнерів Щоб переглянути список усіх контейнерів, використовуйте команду `docker ps`. Додайте прапор `-a`, щоб побачити всі контейнери (включаючи зупинені): ```bash docker ps -a`` ## Перегляд логів контейнера Щоб переглянути логи контейнера, використовуйте команду `docker logs`. Наприклад: ```bash docker logs my-spring-app``` ## Виконання команд усередині контейнера Щоб виконати команду всередині працюючого контейнера, використовуйте команду `docker exec`.Наприклад, щоб відкрити оболонку bash всередині контейнера, ви можете використовувати наступну команду: "bash docker exec -it my-spring-app bash" Тут: - `-it' означає, що ви хочете відкрити інтерактивну сесію. - `bash` – це команда, яку ви хочете виконати всередині контейнера. ## Копіювання файлів із контейнера Щоб скопіювати файли з контейнера на хост, використовуйте команду `docker cp`. Наприклад: ```bash docker cp my-spring-app:/app/logs ./logs ``` Тут: - `my-spring-app:/app/logs` - це шлях до файлу або каталогу всередині контейнера. - `./logs` - це шлях на локальному хості, куди будуть скопійовані файли.

Відділ по роботі з
юридичними особами
Тел.: +7 (495) 151-61-27
+7(343)300-97-27
Email: [email protected]

2023 © Всі права захищені
Залишаючись на сайті Користувач підтверджує свою згоду на використання файлів cookie

Ціни та наявність уточнюйте у менеджерів, які не є публічною офертою

21 основна команда Docker [пояснюється на прикладах]

Docker має великий набір команд (точніше, підкоманд). Ви не зможете використовувати їх усі, і немає необхідності отримувати це досягнення.

Більшість часу ви будете використовувати певний набір команд для управління контейнерами та зображеннями.

Я збираюся перерахувати такі поширені, але важливі команди Docker, які надзвичайно корисні для повсякденного використання користувачами та адміністраторами Docker.

Я розділив ці команди Docker на дві категорії:

Звучить чудово? Давайте подивимося, які команди Docker потрібно знати, також практичні приклади.

Docker виконує команди [для запуску та керування контейнерами]

Ці команди Docker використовуються для керування контейнерами та створення образів. Вони виконують певне завдання, тому я назвав їх командами виконання Docker.

На цьому етапі я рекомендую вам оновити базову інформацію про життєвий цикл контейнера Docker за допомогою цього способу:

Крім цього, давайте подивимося на команди та їх приклади.

Якщо у вашій системі встановлено Docker, ви можете запустити приклади разом із посібником для практики.

1. Запуск докеру

Docker run використовується для створення контейнера та його негайного запуску.

Ця команда спочатку шукає існуючий образ контейнера, який потрібно запустити, і, якщо його не знайдено, витягує його з репозиторію, створює контейнер з образу, та був негайно запускає його.

Давайте запустимо контейнер Nginx із офіційного репозиторію.

avimanyu@localhost:~$ docker run --name nginx-root -p 80:80 -d nginx 8411c3df0fd7f57395b0732b1b1963c215040eed669dc8327200db197ff6~

За допомогою прапора --name ви налаштовуєте його локальне ім'я, а також зіставляєте порт хоста із портом контейнера. -d або --detach допомагає запустити контейнер у фоновому режимі у вимкненому режимі.

"Запуск докера" - це більш коротка версія "запуску докер-контейнера". Docker офіційно рекомендує більш довгу форму, але стара і коротка форма, як і раніше, популярна, оскільки введення команд займає менше часу.

2. Зупинка докеру

Ця команда використовується для зупинення вже запущених контейнерів. Синтаксис простий:

docker stop container-name-or-id

Давайте зупинимо контейнер, який ви запустили першою командою.

avimanyu@localhost:~$ docker stop nginx-root nginx-root avimanyu@localhost:~$

Якщо ви не налаштували ім'я під час запуску, можна перевірити випадково згенероване ім'я за допомогою команди docker ps (обговорюється пізніше).

Коли ви використовуєте команду docker stop, вона надсилає сигнал SIGTERM із запитом завершення, після чого в залежності від ситуації завершення подається сигнал SIGKILL.

3. Запуск докеру

Це використовується для запуску зупинених контейнерів. Синтаксис простий:

docker start container-name-or-id

Давайте запустимо контейнер Nginx, який ви щойно зупинили у попередньому прикладі.

avimanyu@localhost:~$ docker start nginx-root nginx-root avimanyu@localhost:~$

Зверніть увагу, що, на відміну від Docker Run, Docker Start не може створювати нові контейнери з образів. Він може «запускати» лише ті контейнери, які перебувають у зупиненому стані.

4. Докер-виконавець

docker exec, як випливає з назви, використовується для виконання нових команд усередині вже запущеного контейнера.

avimanyu@localhost:~$ docker exec nginx-root /bin/bash root@72acb924f667:/#

Тепер ви запускаєте оболонку bash усередині контейнера.

В -ti t означає «термінал», а i позначає «інтерактивний», щоб STDIN (стандартне введення) залишалося відкритим, навіть якщо він не підключений.

Щоб вийти з контейнера, просто використовуйте команду виходу, щоб повернутися в консоль хоста.

root@72acb924f667:/# exit exit avimanyu@localhost:~$

5. Перейменування Docker

Щоб перейменувати контейнер, використовуйте наступний синтаксис:

docker rename old_container_name new_container_name

Давайте перейменуємо кореневий контейнер nginx на nginx-toor. Зверніть увагу, що це можна зробити, навіть якщо контейнер запущено та працює!

avimanyu@localhost:~$ docker rename nginx-root nginx-toor

6. Пауза/відновлення докеру

За допомогою docker-pause можна призупинити всі процеси у зазначеному контейнері. Використовується сигнал SIGSTOP, який розпізнається зупиненим процесом.

avimanyu@localhost:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 72acb924f667 nginx "nginx -g' daemon of…" 4 години 0.0.0.0:80-8 wordpress:5.3 .0-php7.1-apache "docker-entrypoint.s…" 3 дні тому Up 3 дні 0.0.0.0:8088->80/tcp wp2_wordpress_1 016709c05add wordpress:5.3.0-php7.1-apache s…" 3 дні тому Up 3 дні 0.0.0.0:8080->80/tcp wp1_wordpress_1 656f6761ce0d mariadb:10.4.10-bionic "docker-entrypoint.s…" 8 днів тому Up 3 дні 3306/tcp wp2_mysql_1 ee953bb14483 mariadb:-18. Up 3 days 3306 /tcp wp1_mysql_1

Давайте припинимо роботу контейнера nginx-toor:

avimanyu@localhost:~$ docker pause nginx-toor nginx-toor

Тепер ви можете знову перевірити, чи дійсно він був припинений за допомогою команди docker ps :

avimanyu@localhost:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 72acb924f667 nginx "nginx -g' daemon of…" dd220 wordpress:5.3.0-php7.1-apache "docker-entrypoint.s…" 3 дні тому Up 3 дні 0.0.0.0:8088->80/tcp wp2_wordpress_1 016709c05add wordpress:5.3.0-ph -entrypoint.s…" 3 дні тому Up 3 дні 0.0.0.0:8080->80/tcp wp1_wordpress_1 656f6761ce0d mariadb:10.4.10-bionic "docker-entrypoint.s…" 8 днів 3 Up 3306/tcp wp2_9 Біонічний "докер-відповідь. s…" 8 днів тому Up 3 днів 3306/tcp wp1_mysql_1

Щоб повернутися, просто використовуйте unpause:

avimanyu@localhost:~$ docker unpause nginx-toor nginx-toor

7. Знищення докеру

docker kill використовується для надсилання сигналу KILL за замовчуванням у контейнер. На відміну від docker stop він безпосередньо відправляє сигнал SIGKILL, не запитуючи завершення за допомогою сигналу SIGTERM.

Це різкий спосіб примусового завершення типових екстрених ситуаціях, тому завжди рекомендується спочатку використовувати docker stop .

avimanyu@localhost:~$ docker kill nginx-root nginx-root avimanyu@localhost:~$

8. Складання Docker

Якщо ви змінюєте образ Docker, необхідно створити власний образ, перш ніж ви зможете використовувати його для розгортання нових контейнерів.

docker build – це команда для створення таких модифікованих образів.

Я рекомендую прочитати цей докладний посібник з використання Dockerfile для створення власних образів Docker. Тут просто покажу швидкий приклад.

Ось приклад Dockerfile:

FROM alpine:latest RUN apk update RUN apk add vim

Спочатку він завантажує образ Alpine Linux із офіційного репозиторію.Потім він оновлює кеш пакетів і додатково встановлює редактор Vim.

Це означає, що в контейнері, запущеному з цього образу, буде встановлено редактор Vim.

Створіть зображення так:

avimanyu@localhost:~/docker-build-test$ docker image build -t docker-build-test-image . 2.048kB Step 1/3 : FROM alpine:latest ---> 965ea09ff2eb Step 2/3 : RUN apk update ---> Using cache ---> ---> Using cache ---> b283eaf606c1 Successfully built b283eaf606c1 Successfully tagged docker-build-test-image:latest

Змінений образ називається docker-build-test-image , і команда шукає файл Dockerfile у поточному каталозі.

9. Докер-процесор

Команда cp вже добре відома досвідченим користувачам Linux і дозволяє копіювати файли та каталоги між різними місцями.

Аналогічно, dockerContainer cp або просто docker cp використовується для копіювання файлів та каталогів між контейнером та хостом.

avimanyu@localhost:~/nginx-root$ docker cp nginx-root:/etc/nginx/nginx.conf ./config

Наведена вище команда скопіює файл nginx.conf з контейнера nginx-root до каталогу з ім'ям config, який має перебувати в поточному робочому каталозі (також званому nginx-root). Зверніть увагу на аналогічну структуру файлової системи контейнера (/etc/nginx), як і у звичайній системі Linux.

10. Докер РМ

Подібно до видалення файлів і каталогів через термінал Linux, Docker також використовує аналогічний синтаксис для видалення зображень та контейнерів.

docker rm container_or_image_name_or_id

Спробуйте видалити кореневий контейнер nginx, який ви створили раніше в цьому посібнику:

avimanyu@localhost:~$ docker rm nginx-root nginx-root

У висновку не буде сказано, що контейнер видалений або щось таке, але він видалений.

Ви не можете видалити працюючий контейнер. Ви не можете видалити зображення, пов'язане з контейнером, навіть зупиненим.

Підіб'ємо підсумок усім наведеним вище командам:

Я знову створюю контейнер nginx-root, щоб використовувати його в деяких інших прикладах команд.

Інформаційні команди Docker [для отримання інформації про контейнери та образи]

Команди Docker, які надають вам інформацію, пов'язану з конкретними завданнями та наявними параметрами, можна назвати інформативними командами Docker.

Для цієї мети я залучаю 11 команд Docker:

11. Docker PS/контейнер ls

Скорочення від dockerContainer ls , docker ps можна використовувати для виведення списку всіх контейнерів, які зараз працюють у системі, а також для перевірки їх статусу за допомогою додаткової статистики.

avimanyu@localhost:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e2dd68fdd220 wordpress:5.3.0-php7.1-apache "docker-entrypoint.s…" 3 дні тому 30.08.08. /tcp wp2_wordpress_1 016709c05add wordpress:5.3.0-php7.1-apache "docker-entrypoint.s…" 3 дні тому Up 3 дні 0.0.0.0:8080->80/tcp daemon of… 3 дні тому Up 3 дні 0.0.0.0:80->80/tcp nginx-root 656f6761ce0d mariadb:10.4.10-bionic "docker-entrypoint.s…" 7 днів тому Up 3 днів 3306/tcp wp2_mysql31 . docker- entrypoint.s…" 7 днів тому Up 3 дні 3306/tcp wp1_mysql_1 avimanyu@localhost:~$

12. Docker images/image ls

Якщо ви є досвідченим користувачем Linux, можливо, ви вже знайомі з командою ls , яка використовується для перевірки вмісту каталогу за допомогою терміналу Linux.

Аналогічно, Docker Docker image ls або просто Docker Images використовується для перевірки списку всіх зображень Docker, що існують в системі. Ці зображення можуть бути офіційними або користувачами, залежно від того, як вони були створені.

avimanyu@localhost:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 4152a9608752 10 днів 126MB avimanyu786/flask-test latest test latest 5fe5e88b9eaa 2 weeks ago 23MB wordpress 5.3.0-php7. 1-apache f0985bcc2ffb 2 weeks ago 530MB mariadb 10.4.10-bionic c1c9e6fba07a 2 weeks ago 355MB avimanyu786/alpine-with-vim latest xy latest d1c0beda6804 3 weeks ago 161MB nginx alpine b6753551581f 5 weeks ago 21.4MB python alpine 204216b3821e 5 weeks ago 55 ago t c8ee894bd2bd 6 weeks ago 456MB hello-world latest fce289e99eb9 11 місяців 1.84kB avimanyu@localhost:~ $

Крім контейнерів та образів, ls також використовується в Docker для аналогічних цілей для управління мережами, томами, вузлами та роєвими сервісами.

13. Журнали Docker

Ця команда дуже корисна на робочих серверах при дослідженні та вирішенні проблем. Ви можете отримати журнали будь-якого контейнера за допомогою команди logs docker.

docker logs container_name_or_id
avimanyu@localhost:~$ docker logs nginx-toor 178.130.157.61 - - [30/Nov/2019:07:56:14 +0000] "GET / HTTP/1.1" 200612 "-" "Mozilla/5. 10.0; 1.1" 200612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, як Gecko) Chrome/52.0.2743.116 Safari/537.36" "-" . . . . x64|'|'|No|'|'|0.7d|'|'|..|'|'|AA==|'|'|112.inf|'|'|SGFjS2VkDQoxOTIuMTY4LjkyLjIyMjo1NTUyDQpEZXNrdG9wDQpjbKGm lDQpUcnVlDQpGYWxzZQ==12.act|' |'|AA==" 400 157 "-" "-" "-" 8.36.123.216 - - [30/Nov/2019:10:32:20 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "-" 202.142.105.74 - - [30/Nov/2019:12:03:39 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "-" " Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0" "-"

14. Докер-версія

Щоб отримати детальну інформацію про версію Docker, встановлену в системі, просто використовуйте:

Ось як виглядає ця інформація:

avimanyu@localhost:~$ docker version Client: Docker Engine - Community Version: 19.03.4 API version: 1.40 Go version: go1.12.10 Git commit: amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.4 API version: 1.40 (minimum version 1.12) Go version: go1.12.10 Git commit: 9013bf583a : linux/amd64 Experimental: false containerd: Version: 1.2.10 GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339 runc: Version: 1.0.0-rc8+dev GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa80 fec3683 avimanyu@localhost:~$

15. Інформація про докер

Наступна команда покаже вам загальносистемну інформацію про хост-систему, де встановлено Docker:

avimanyu@localhost:~$ docker info Client: Debug Mode: false Server: Containers: 9 Running: 5 Paused: 0 Stopped: 4 Images: 17 Server Version: 19.03.4 Storage Driver: overlay2 Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd runc Init Binary: docker-init containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339 runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657 init version: fec3683 Security Options: apparmor seccomp Profile: default Kernel Version: 4.15.0-50-generic Operating System: Uxu6 _64 CPUs: 1 Total Memory: 985.4MiB Name: localhost ID: MZTJ:L5UF:WMQ3:VOIO:NR3N:336Q:YX2T:MSOU:5Y2N:MA7V:F6BQ:6UDY Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1 / Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false WARNING: Відсутня обмеження підтримки avimanyu@localhost:~$

16. Перевірка докеру

Команда Docker Inspect використовується для відображення низькорівневої інформації як про контейнери, так і образи.

Ви можете отримати інформацію, як контрольна сума зображення, шарів, IP-адреса контейнера та іншу мережну інформацію, а також багато іншої інформації.

Розумно використовувати команду grep, щоб відфільтрувати висновок та отримати лише потрібну інформацію.

У наступному прикладі я перевіряю існуючий образ Docker з ім'ям avimanyu786/alpine-with-vim:latest.

avimanyu@localhost:~$ docker inspect avimanyu786/alpine-with-vim:latest [ < "Id": "sha256:b283eaf606c18a4d0cc461ffdf86d53ecb173db5271129090a7 yu786/alpine-with-vim:latest" ], "RepoDigests" : [], "Parent": "sha256:b16ea26b03aaf5d9bd84157fbef61670d2f318c1af854ae04f0dbc290afd4b04", "Comment": "", "Created": "2019-11-12T11:51:24.458552779Z", "Container": "5b759e6f98e354a78dfca588eb65316b35f0cfb88c9119844471c8fcba36 Domainname": "", "User": "", "AttachStdin" : false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr /local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/sh", "-c", "apk add vim"], "Image": "sha256:b16ea26b03aaf5d9bd84157fbef61670d2f318c1af854ae04f0dbc290afd4b04", . . . . "Metadata": < "LastTagTime": "2019-11-12T11:51:24.563369343Z" >> avimanyu@localhost:~$

17. Історія докеру

Дізнайтеся історію будь-якого образу, що існує у системі Docker, за допомогою імені образу історії Docker.

Історія образу розповість вам про зміни та коміти, зроблені у зворотному хронологічному порядку.

avimanyu@localhost:~$ docker history avimanyu786/alpine-with-vim:latest IMAGE CREATED CREATED BY SIZE COMMENT b283eaf606c1 2 weeks ago /bin/sh update 1.42MB 965ea09ff2eb 5 років тому /bin/sh -c #(nop) CMD ["/bin/sh"] 0B 5 років тому /bin/sh -c #(nop) ADD file:fe1f09249227e2da2… 5.55MB avimany ~$

18. Докер-порт

Ця команда може виявитися дуже корисною при керуванні кількома контейнерами, оскільки вона дуже легко показує зіставлення портів хоста та контейнера:

avimanyu@localhost:~$ docker port nginx-root 80/tcp -> 0.0.0.0:80

Тут можна побачити, що порт хоста 80 зіставлений з портом контейнера 80 для контейнера з ім'ям nginx-root.

19.Різниця у докері

За допомогою docker diff можна перевіряти зміни у файлах або каталогах у файловій системі контейнера. У ньому перелічені змінені файли та каталоги у файловій системі контейнера з його створення.

Відстежуються три різні типи змін (A/D/C):

  • A: Додавання файлу або каталогу
  • D: Видалення файлу чи каталогу.
  • C: Зміна файлу або каталогу

Давайте перевіримо те саме для нашого кореневого контейнера nginx:

avimanyu@localhost:~$ docker diff nginx-root C /run A /run/nginx.pid C /var C /var/cache C /var/cache/nginx A /var/cache/nginx/client_temp A /var/cache /nginx/fastcgi_temp A /var/cache/nginx/proxy_temp A /var/cache/nginx/scgi_temp A /var/cache/nginx/uwsgi_temp avimanyu@localhost:~$

20. Докер-топ

Ще раз: top – це команда Linux, з якою ви, можливо, вже знайомі. Він використовується для виведення списку запущених процесів у системі.

За допомогою docker top ви перераховуєте процеси, запущені у контейнері.

docker top container_ID_or_name

Якщо я зроблю це за допомогою nginx-root у нашому прикладі, він покаже наступне значення.

avimanyu@localhost:~$ docker top nginx-root UID PID PPID C STIME TTY TIME CMD root 10355 10330 0 07:54 ? 00:00:00 nginx: master process nginx -g daemon off; systemd+ 10401 10355 0 07:54 ? 00:00:00 nginx: worker process root 12054 10330 0 10:22 pts/0 00:00:00 /bin/bash avimanyu@localhost:~$

21. Статистика Docker

Команду docker stats можна використовувати як є, і навіть для конкретних контейнерів. Він показує деталі контейнера та використання системних ресурсів.

Спочатку давайте подивимося на його загальну форму:

avimanyu@localhost:~$ docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 72acb924f667 nginx-root 0.00% 2.621MiB / 985.4MiB 8. 0B 3 e2dd68fdd220 wp2_wordpress_1 0.00% 44.24MiB / 985.4MiB 4.49% 1.9MB / 1.62MB 53.3MB / 61.4kB 11 016709c05ad0 8 .4MiB 6.95% 12MB / 4.77MB 136MB / 61.4kB 11 656f6761ce0d wp2_mysql_1 0.05% 70.12MiB / 985.4MiB 7.12% 1.05MB / 1MB 14 _mysql_1 0.04% 31.73MiB / 985.4MiB 3.22% 1.16MB / 4.76MB 50.6MB / 91.8MB 31

Наведений вище висновок постійно генеруватиметься в режимі реального часу, поки ви не вийдете з нього, натиснувши Ctrl+C.

Тепер, якщо ви спробуєте це для конкретного контейнера, ви побачите той самий результат, але тільки для цього контейнера:

avimanyu@localhost:~$ docker stats nginx-root CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 72acb924f667 nginx-root 0.00% 2.621MiB / 9B. 6.8 MB / 0B 3

Дозвольте мені також підсумувати інформацію про команди Docker:

Для отримання вичерпного та всеосяжного ресурсу всіх команд Docker ви завжди можете звернутися до офіційної документації Docker.

Ви помітите схожість між звичайними командами Linux та деякими командами Docker. Я думаю, що це зроблено навмисно, щоб полегшити запам'ятовування команд Docker.

Сподіваюся, ця стаття виявиться для вас корисною у повсякденному використанні Docker. Якщо у вас є ще такі корисні команди, якими ви можете поділитися, поділіться нижче. Зворотній зв'язок та пропозиції завжди вітаються.

Статті з цієї тематики:

  • 5 основних термінів Linux, які має знати кожен новий користувач
  • Debfoster — зберігайте лише необхідні пакети в Debian та Ubuntu
  • Автоматизований спосіб встановлення основних програм в Ubuntu
  • Встановіть основні програми в Ubuntu за допомогою SimpleSH
  • 15 основних команд Linux для початківців
  • Новий користувач Linux? Спробуйте ці 8 відмінних незамінних програм для Linux
  • 7 основних програм Linux для гітаристів
  • 10 найкращих гітарних інструментів Linux: необхідний набір інструментів гітариста
  • 10 необхідних навичок DevOps-інженерам для успішної кар'єри
  • 50 основних поєднань клавіш Windows Найкраща шпаргалка
  • Найкраще програмне забезпечення для Linux: наш редакційний список основних програм для Linux
  • 10+ важливих хитрощів диспетчера завдань Windows, про які ви не знали
  • 10 основних функцій Google Таблиць, які потрібно знати
  • 30 основних клавіш клавіш Chromebook | Повне керівництво
  • 20 важливих речей, які потрібно знати, якщо ви використовуєте веб-сервер Nginx

Посібник з Docker. Частина 1: образ, контейнер, зіставлення портів та основні команди

Docker — це платформа з відкритим вихідним кодом для створення, розгортання та керування контейнеризованими додатками.

Уявіть, як ви інсталюєте програмне забезпечення, яке потребує встановлення всіх його залежностей. Прийде зіткнутися з безліччю помилок, вручну з'ясувати і усунути всі їхні причини. Щоразу — спроби запустити всю систему заново, щоб правильно завершити установку. Саме в цей момент на допомогу приходить Docker, намагаючись полегшити життя.

Зміст:

  1. Образи та контейнери.
  2. Запуск першої програми в Docker.
  3. Основні команди контейнерів Docker.
  4. Командний рядок Docker-контейнер.
  5. Образи користувача Docker.
  6. Запуск веб-програми в Docker.
  7. Docker та зіставлення портів.
  8. Висновки.

1.Образи та контейнери

Найважливіші концепції Docker!

Образ — це файл, який зберігає всю конфігурацію запуску програми у контейнері Docker. Подивитися на список образів, створених у системі, можна за допомогою наступної команди:

Контейнер - Це екземпляр образу. Docker-контейнер діє як віртуальна машина, але не має окремої операційної системи. Кожен контейнер встановлює програми або програмне забезпечення, дотримуючись інструкцій, записаних у файлах образу.

Кількість контейнерів не обмежена, всі вони працюють на загальній інфраструктурі хоста та загальній операційній системі. Подивитися на список контейнерів можна за допомогою команди:

2. Запуск першої програми в Docker

Насамперед потрібно вивести на екран фразу "Hello, world!".

У Docker кожному контейнеру потрібен образ, тому, щоб запустити hello-world, введіть у консоль або термінал команду:

docker run hello-world

Спроба створення та запуску контейнера. Згідно з документацією API-клієнта Docker, в установленому порядку виконуються такі дії.

  1. Консоль: виконує команду docker run hello-world
  2. Docker client (CLI): отримує команду та виконує дії на її основі.
  3. Сервер Docker: зв'язується з CLI, щоб видати клієнту з кешу образів (Image Cache) потрібний образ з назвою hello-world. Якщо такого образу немає, сервер Docker зв'язується з хабом Docker, де завантажує образ із зазначеним ім'ям.
  4. Docker Hub: хаб Docker отримує запит від сервера Docker на завантаження конкретного файлу образу загальнодоступного сховища.
  5. Сервер Docker: знову шукає образ у розділі “Image Cache”, Потім створює контейнер – екземпляр образу hello-world.
  6. Контейнер Docker: згідно з початковими установками з образу, в контейнері запускається проста програма hello-world.
  7. Консоль: в результаті успішного виконання всіх вищевикладених етапів відобразить інформацію зі скріншота.

3. Основні команди контейнерів Docker

Прочитайте список команд управління поведінкою контейнерів без зміни образів.

  • Вивести на екран stderr та stdout від запущених у контейнері програм, логування контейнера Docker:

4. Командний рядок Docker-контейнера

Розглянемо набір найчастіших питань про введення команд з клавіатури безпосередньо в контейнери Docker.

Тут exec дозволяє виконувати команди в контейнері, а прапор -it дозволяє прийом введення від користувача до процесу, а також виведення в термінал результату виконання процесу, так і повідомлень про помилки.

Іноді зручно безпосередньо взаємодіяти з командним рядком контейнера. Для пошуку помилок та налагодження, або ви можете запустити там усі команди Linux одночасно. Переконайтеся, що контейнер запущено, а потім введіть наступну команду:

sh видасть дозвіл на введення підказок (prompt), і ви зможете виконувати всередині контейнера різні завдання, наприклад:

Припустимо, що ви хочете відразу після завантаження з хаба Docker запустити образ під назвою busybox. Що ви зробите?

Тепер, щоб відповісти на вищезазначене запитання, виконайте наступну команду:

docker run -it busybox sh

Тепер усі знання про корисні команди з двох пунктів посібника допоможуть вам підготуватися до наступного кроку.

5. Образи користувача Docker

Як додати файли до контейнера та яку операційну систему вибрати для образу?

Основний файл, який зберігає всі інструкції. Кожен dockerfile однаково структурований. Щоб створити dockerfile для користувача образу необхідно вказати:

  1. Базовий образ.
  2. Усі залежності та умови запуску програми.
  3. Команду для запуску програми під час старту контейнера.
  • Docker Client

Після створення dockerfile ви одразу спробуєте зібрати образ. Отже, Dockerfile надсилається клієнту Docker.

Далі клієнт Docker передає всі інструкції серверу Docker, який, у свою чергу, виконує всю брудну роботу, а саме всі команди всередині dockerfile і створює образ. Потім образ запускається, у результаті створюється контейнер, екземпляр образу.

  • Як створити образ Docker?
  1. Спочатку напишіть dockerfile.
  2. Потім виконайте команду docker build.
  3. Тепер запустіть образ командою docker run.

Розглянемо простий dockerfile, в якому встановлений сервер бази даних Redis:

Тепер, дивлячись на Dockerfile, у вас, напевно, виникли питання! Відповімо на них зараз:

У жодного контейнера немає власної операційної системи. Якщо ви хочете створити контейнер, йому потрібна відправна точка або базовий образ, з якого він може почати роботу.

Alpine Linux це як Windows і macOS, де можна встановити майже все, що вам потрібно. Alpine займає мало пам'яті, що добре підходить для встановлення Redis. Базовий образ завантажується через інструкцію FROM.

Подивіться, що в dockerfile написано інструкцію 'RUN', яка виконує команди всередині контейнера. APK означає менеджер пакетів Alpine Linux. Команди apk застосовуються в будь-якій працюючій системі на базі Alpine Linux для видалення, встановлення, оновлення програмного забезпечення.

Інструкцією CMD задається команда за замовчуванням, яка виконуватиметься лише при запуску контейнера без вказівки команди. Наведений вище приклад запустить сервер Redis.

Тепер поговоримо детальніше про команду docker build Що відбувається перед тим, як результат її виконання з'являється на екрані?

  1. Завантажується контейнер із образом alpine.
  2. Файлова система з образу alpine переноситься в тимчасовий контейнер, в ньому і виконуються інструкції з встановлення бази даних Redis.
  3. За аналогією створюється ще один тимчасовий контейнер для установки команди запуску сервера Redis при кожному запуску образу в контейнері.
  4. Нарешті, для запуску контейнера за шаблоном образа користувача виконується команда docker run .

Примітка: якщо ви оновите dockerfile образу і спробуєте перезбирати його, то Docker отримає кеш з попереднього образу, щоб пропустити той самий процес.

6. Запуск веб-програми в Docker

У цьому розділі створимо і докеризуємо простий додаток на Node.js на основі користувача образу.

  • Крок 1
    Напишіть файл package.json , адже Express.js — це бекенд-фреймворк для веб-додатків на Node.js. .js – це основний веб-файл.
  • Крок 2
    Напишіть простий файл index.json .Щоб отримати запит та відповідь, необхідно встановити порт для прослуховування.
  • Крок 3
    Напишіть dockerfile. Пам'ятаєте усі ключові кроки? Якщо забули, то підніміться вгору розділами і освіжіть знання. Проте цілком очевидно, що для запуску програми знадобляться встановлені, готові до роботи Node.js та NPM.
  • Крок 5
    Запустіть контейнер з програмою, запам'ятайте порт, що прослуховується.
  • Крок 5
    Перевірте, чи можна отримати доступ до програми з браузера, чи дійсно вона працює?
    О ні! Щось пішло не так? Настав час з'ясувати.

Можливо, у вас зараз на увазі одне питання: навіщо в dockerfile написана команда WORKDIR /usr/app ?

Основна мета - поділ робочих файлів, щоб строго необхідні роботи програми файли не змішувалися з іншими директоріями, а легко відокремлювалися від інших за необхідності, якщо виникнуть проблеми. Отже, всередині контейнера файли веб-застосунку зберігаються в каталозі /usr/app .

7. Docker та зіставлення портів

Розглянемо, як розібратися в налаштуваннях та правильно встановити зіставлення портів!

При надсиланні запиту на порт 8080 вашої локальної машини він не перенаправляється автоматично на контейнер, так як у контейнера власне мережне відображення.

Зіставлення портів дозволить запиту на порт 8080 з локальної машини перенаправити запит на порт 8080 Docker-контейнера лише для вхідних запитів.

Проте за промовчанням Docker також дозволяє вихідні запити. Цікаво, як це зробити? Перевірте залежність у dockerfile , де NPM з контейнера безпосередньо звертається до Інтернету.

  • У команді запуску контейнера перший порт це порт хост-машини або локальної машини, а другий порт це порт контейнера:
docker run -p 8080:8080 mahedi/simpleweb

Висновки

Веб-програма запущена та доступна при зверненні до порту 8080 локальної машини.

Незважаючи на успіх, варто згадати три поширені помилки, які допускаються в процесі роботи з Docker Server та Docker Client.

  1. Вибір базового образу неправильний.
  2. Відсутність у dockerfile команд ADD або COPY для перенесення файлів хост-машини у контейнер.
  3. Неправильне зіставлення портів під час створення контейнера.

Далі додаються скріншоти правильно запущеного в Docker веб-застосунку Node.js, щоб ви могли з ними звіритися.

Самостійно ознайомтеся з файлом dockerfile для побудови образа користувача і запуску веб-програми на Node.js.

Проаналізуйте зображений на скріншоті файл index.js із простим прикладом веб-програми на Node.js. Цей файл запускається в контейнері Docker за допомогою відповідної команди з dockerfile .

На сьогодні все! У наступній частині керівництва йтиметься про послідовне створення кількох контейнерів та докеризацію складних веб-систем з безліччю залежностей.

Схожі статті

  • Які відеокарти не використовують для майнінгу
  • Які дошки використовують для кроквяної системи
  • Які матеріали використовуються для виготовлення напівпровідникових діодів
  • Які кольори використовують для олімпійських кілець
  • Які рослини використовуються як харчові культури для людини
  • Які мінерали використовують для отримання фарб
  • Які методи використовуються для дослідження проблемної ситуації
  • Які документи потрібні для створення паспорта
  • Недавні статті

  • Як бродить зернова брага
  • Що робити якщо не засмагаєш на сонці чому засмага погано лягає на шкіру або перестає прилипати
  • Як швидко зняти гель лак без апарату
  • Як робиться Каті голови
  • Яка гребінець краще для об'єму
  • Чим роблять м'яку покрівлю
  • Чи можна залишати крем для обличчя на ніч
  • Де знаходиться датчик селектора
  • географія нашої діяльності
    вулиця Драгоманова, 27
    вул. Курчатова 1Б
    вул. Міцкевича 130
    вул. Лабунського, 1
    вул. Макарова-Пржевальського
    вул. Толстого 10
    вул. Грушевського 28
    вул. Перший промінь (Черняхівського)
    напишіть нам

    сообщение успешно отправлено
    x