
Докер останнім часом дуже багато галасує, і з поважної причини. Служба контейнеризації робить розгортання мікросервісів простим і стабільним, оскільки кожна служба може запускати ОС у своєму власному віртуальному середовищі. Це означає повну сумісність ... більше не турбуватися про версії ОС, залежності та відмінності між вашими розробницькими та виробничими машинами! До того ж він легкий, тому ви можете запускати кілька контейнерів Docker в одній машині (екземпляр EC2). Сьогодні ми дізнаємося, як встановити та розгорнути Docker на Amazon EC2 за 3 простих кроки!
Перш ніж ми почнемо, погляньте на цю діаграму високого рівня (люб'язно надано infoworld.com).

Зліва - ваша традиційна установка віртуальної машини за допомогою гіпервізора. Гіпервізор - це просто ваш менеджер віртуальних машин, відповідальний за розподіл апаратних ресурсів для кожної віртуальної ОС. Якщо кожна гостьова ОС потребує 1 Гб пам’яті, а хост використовує 1 Гб пам’яті, то для налаштування ліворуч потрібно всього 4 Гб.
Праворуч розташована установка контейнера, яка запускала б контейнерну машину, таку як Docker. Найбільш суттєвою відмінністю є те, що механізм контейнерів є більш легким, оскільки він може спільно використовувати певні апаратні ресурси зі своєю основною ОС, на відміну від традиційних віртуальних машин, які вимагають власного окремого розподілу. Для цього налаштування потрібно 1 Гб для хост-ОС і, можливо, 600 Мб на контейнер (оскільки 300 Мб гіпотетично ділиться з хост-ОС), загалом потрібно 2,8 Гб. Бачите ці переваги? Класно, тепер ми можемо розпочати!
Починаємо
Введіть свій екземпляр EC2 і клонуйте Kangzeroos-ES6-React-Redux-Boilerplate від Github. Ви бачите код для налаштування цієї веб-програми, але кроки однакові для будь-якого проекту. Після завантаження перейдіть до папки та знайдіть файли нижче. Ці файли ми будемо використовувати з Docker.
Dockerfile build.sh run.sh
Перш ніж ми зможемо використовувати Docker, спочатку ми повинні встановити його. Нижче наведено швидкий і простий спосіб встановлення Docker, але якщо ви хочете отримати повну конфігурацію, перевірте офіційні документи.
$ sudo apt-get update $ sudo apt-get install docker-engine $ sudo service docker start $ sudo docker run hello-world
Остання команда перевіряє, чи успішно працює Docker, а потім виходить. Якщо все це спрацює, ви готові розпочати докеризацію!
Крок 1: Створення файлу Docker
Першим кроком є налаштування файлів, необхідних для Docker, щоб створити собі образ. Зображення Docker - це просто креслення середовищ, які ви хочете створити, тоді як контейнери - це фактичні запущені та функціональні середовища, в яких буде виконуватися ваш додаток. У кореневій частині нашого каталогу додатків є папка з назвою App
. Сама веб-програма знаходиться в цій App
папці, тоді як усі матеріали, пов’язані з Docker, знаходяться зовні. Це необхідно, оскільки Docker буде контейнеризувати все всередині App
. Отже, давайте створимо перший файл Docker з назвою Dockerfile
(без розширення файлу Dockerfile.sh
, просто Dockerfile
) і пройдемося по ньому по черзі.
FROM ubuntu # ubuntu setup RUN apt-get update -y RUN apt-get upgrade -y RUN apt-get install nodejs -y && apt-get install npm -y # install curl for n RUN apt-get install curl -y RUN apt-get install vim -y # obtain latest stable version of node RUN npm cache clean -f RUN npm install -g n RUN n stable # setup working directory # ADD /App /App WORKDIR /App RUN npm install # expose port EXPOSE 8080
Перший рядок є FROM ubuntu
. Метою Dockerfile
є налаштування ОС та програм всередині ОС, тому має сенс, що в першому рядку вказано, яку версію ОС використовувати. ubuntu
тут йдеться про конкретне зображення, розміщене на Docker Hub, зокрема про офіційний образ ОС Ubuntu.
# ubuntu setup RUN apt-get update -y RUN apt-get upgrade -y RUN apt-get install curl -y RUN apt-get install vim -y
Наступний набір рядків - це налаштування в Ubuntu. Ми хочемо перевірити наявність оновлень Ubuntu RUN apt-get update -y
та оновлення за допомогою RUN apt-get upgrade -y
… досить стандартних матеріалів для налаштування вашого середовища. Також встановіть curl RUN apt-get install curl -y
і vim RUN apt-get install vim -y
, які приємно мати для загальних цілей.
# obtain latest stable version of node RUN apt-get install nodejs -y && apt-get install npm -y RUN npm cache clean -f RUN npm install -g n RUN n stable
Наступний набір рядків - це налаштування, специфічні для NodeJS. Оскільки ми хочемо використовувати функції ES6, нам знадобиться остання версія NodeJS, отримана за допомогою модуля node n
. Встановіть NodeJS та NPM за допомогою RUN apt-get install nodejs -y && apt-get install npm -y
. Потім очистіть npm, щоб звільнити місце для n
використання RUN npm cache clean -f
. Встановити за n
допомогою RUN npm install -g n
. І нарешті, ми можемо запустити n
(останню версію NodeJS) за допомогою RUN n stable
.
NodeJS призначений для Javascript, але якби ви працювали з іншими мовами, такими як Python, ви б встановили будь-які програми, необхідні для запуску програми Python.
# setup working directory ADD /App /App WORKDIR /App RUN npm install # expose port EXPOSE 8080
Остання частина - Dockerfile
це налаштування робочого каталогу самого додатка. ADD /App /App
бере App
папку з нашої машини та копіює її в контейнер Docker. Далі WORKDIR /App
встановлює робочий каталог Docker /App
таким чином, щоб будь-які команди, які ви запускаєте всередині Docker, виконувались /App
. Це потрібно для npm install
встановлення у правильному місці (він же /App
контейнер Docker).
Нарешті, ми, RUN npm install
хто встановлює наші залежності NodeJS в нашій машині. Нарешті, ми чітко покажемо порт 8080 нашого образу Docker, EXPOSE 8080
щоб зовнішній світ мав доступ до нашого додатку. Зовнішній світ включає Інтернет, а також інші контейнери Docker, що працюють на тій самій машині.
Крок 2: Сценарій побудови
docker build -t kangzeroo .
Створіть новий файл у кореневому каталозі програми, який називається build.sh
. Це файл оболонки для побудови нашого контейнера Docker. Цей build.sh
файл насправді не потрібен, оскільки ми можемо безпосередньо запустити цю команду в терміналі. Однак справді приємно спростити процес.
Ось розподіл цього рядка: docker build
це команда, яка говорить Docker створити образ. -t kangzeroo
встановлює ім’я тегу зображення Docker kangzeroo
, на яке ми можемо посилатися пізніше. Зверніть увагу, що для того, щоб мати дійсне ім’я тегу, воно повинно бути в нижньому регістрі та не мати пробілів (використовуйте імені змейки). Нарешті, .
повідомляє Docker, де шукати те, Dockerfile
що потрібно для збірки ( .
означає тут).
Якщо ви перебуваєте в екземплярі EC2, ми можемо запустити bash build.sh
з кореневого каталогу нашого проекту. Це розпочне процес збірки Docker, коли він пройде кроки в Dockerfile
створеному нами. Це може зайняти деякий час ... в кінці це має виглядати так: (Не турбуйтеся про некритичні помилки, такі як необов’язкова залежність, пропущена на знімку екрана нижче).

А тепер перевіримо, чи створено наш образ. Введіть, docker images
щоб побачити зображення, які зараз працюють у нашій машині. Ви повинні побачити такий результат:

Якщо ми хочемо видалити це зображення, просто введіть docker rmi kangzeroo
. Якщо ви введете docker images
ще раз після видалення, ви побачите, що зображення більше немає. Наразі залишмо зображення, оскільки ми його використаємо для створення контейнера Docker для запуску нашого додатка.
Крок 3: Сценарій запуску
Now that our image has been created, let’s make run.sh
. Recall that Docker Images are simply blueprints of environments that you want to create. Containers are the actual running and functional environments that your app will be executed in. So run.sh
will turn our images into containers. Here is what run.sh
looks like:
docker run -d -it -p 80:8080 --name=kz kangzeroo npm run ec2 -- --host=0.0.0.0
Let’s walkthrough this short script. docker run
is the command to run a container from an image. -d -it
is the command for daemon
(running tasks in the background) and interactive terminal
(giving us a way to interact with the container). If you omit -d
then the docker container will not run in the background and you will see log output from the app. -p 80:8080
maps port 80 of our machine to port 8080 of the container. Recall that earlier we specified EXPOSE 8080
in our Dockerfile
. So now we take incoming connections on our machine’s port 80 (port 80 is the default for http) and redirect them to our container’s port 8080. If your app is not a webpage, then you can exclude this port mapping.--name=kz
gives our container the name kz
. Finally, kangzeroo npm run ec2
refers to our image called kangzeroo
and npm run ec2
is a command specific to this boilerplate app (for starting up the app). The last part — — host=0.0.0.0
sets the boilerplate to run on 0.0.0.0 instead of localhost (This too is specific to the boilerplate). If you were running a Python backend app, it would look like docker run -d -it --name=kz kangzeroo python app.py
.
Great! Save this file and run it with bash run.sh
. Then check if the container is running by typing docker ps -a
. This is what it should look like:

Your app is now online and running inside a Docker container! Check if it works… for this boilerplate you can check from a web browser.

And it’s working! Great, now let’s turn off our Docker container. Type docker ps -a
to see all the containers again. Type docker stop kz
and it stops the container. If you type docker ps
you will not see the container anymore, but you will see it if you type docker ps -a
( -a
means all, inclusive of running and not running container. omit -a
if you only want to see running containers). To remove the container, type docker rm kz
. If you type docker ps -a
you won’t see the container anymore.
Conclusion
Це був Докер! Враховуючи все, Docker набагато простіший, ніж налаштування віртуальної машини на основі гіпервізора, і ви можете бачити, як архітектурою мікросервісу стає набагато простіше керувати, коли ви приймаєте контейнери. З нашими Dockerfile
, build.sh
і run.sh
файлами , створеними в EC2, ми можемо підвести підсумок 3 кроки до Docker працює від нашого застосування кореневого каталогу:
$ bash build.sh $ bash run.sh $ exit
Це воно! Docker: просто як побудувати, запустити, зробити!
Бонусна шпаргалка
Оскільки цей посібник використовував поетапний підхід до навчання Docker, я вважаю за доцільне залишити вас оглядом усіх команд Docker, які вам знадобляться для загального використання.
$ docker images // To view install images $ docker rmi // To remove an installed image $ docker ps -a // To view all docker containers $ docker stop // To stop a docker container $ docker rm // To remove a docker container $ docker exec -it bash // Execute into container and run bash * If you want to see the log output from a docker container, omit the -d from run.sh
Ці методи частково використовувались при розгортанні renthero.ca