Docker: Легко як побудувати, запустити, зробити!

Докер останнім часом дуже багато галасує, і з поважної причини. Служба контейнеризації робить розгортання мікросервісів простим і стабільним, оскільки кожна служба може запускати ОС у своєму власному віртуальному середовищі. Це означає повну сумісність ... більше не турбуватися про версії ОС, залежності та відмінності між вашими розробницькими та виробничими машинами! До того ж він легкий, тому ви можете запускати кілька контейнерів 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