Перейти к содержимому
Главная страница » Как создать и запустить Docker образ из Dockerfile на Github

Как создать и запустить Docker образ из Dockerfile на Github

Самый простой способ build docker image from github

docker build github.com/Balraj0017/Docker_CI

Если данный вариант не сработал пишите в наш Telegram чат.

Клонирование репозитория GitHub и сборка образа Docker

В нашем случае в GitHub находится приложение и Dockerfile для его сборки. Представим, что нам нужно доработать приложение и после собрать Docker образ и запустить его. Для этого сначала клонируем репозиторий на свой сервер или локальный компьютер командой:

git clone https://github.com/francescou/docker-compose-ui

Теперь пробуем собрать образ командой docker build:

docker build -t docker-compose-ui .

Получаем вывод:

[+] Building 1.8s (13/13) FINISHED                                                                                                                                                             docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                                     0.1s
 => => transferring dockerfile: 585B                                                                                                                                                                     0.0s
 => [internal] load metadata for docker.io/library/python:2.7-alpine                                                                                                                                     1.1s
 => [internal] load .dockerignore                                                                                                                                                                        0.1s
 => => transferring context: 71B                                                                                                                                                                         0.0s
 => [1/8] FROM docker.io/library/python:2.7-alpine@sha256:724d0540eb56ffaa6dd770aa13c3bc7dfc829dec561d87cb36b2f5b9ff8a760a                                                                               0.0s
 => [internal] load build context                                                                                                                                                                        0.1s
 => => transferring context: 6.62kB                                                                                                                                                                      0.0s
 => CACHED [2/8] RUN pip install virtualenv                                                                                                                                                              0.0s
 => CACHED [3/8] RUN apk add -U --no-cache git                                                                                                                                                           0.0s
 => CACHED [4/8] COPY ./requirements.txt /app/requirements.txt                                                                                                                                           0.0s
 => CACHED [5/8] RUN virtualenv /env && /env/bin/pip install --no-cache-dir -r /app/requirements.txt                                                                                                     0.0s
 => CACHED [6/8] COPY . /app                                                                                                                                                                             0.0s
 => CACHED [7/8] COPY demo-projects /opt/docker-compose-projects                                                                                                                                         0.0s
 => CACHED [8/8] WORKDIR /opt/docker-compose-projects/                                                                                                                                                   0.0s
 => exporting to image                                                                                                                                                                                   0.0s
 => => exporting layers                                                                                                                                                                                  0.0s
 => => writing image sha256:8cdc023c473b3da9824013a48aee76862de17b8b162987ddf154d15aa9fa7d88                                                                                                             0.0s
 => => naming to docker.io/library/docker-compose-ui   

Теперь запустим собранный образ:

docker run docker-compose-ui .

Еще один вариант инструкции.

Далее создадим пайплайн автосборки Dockerfile из GitHub в Dockerhub.

GitHub + DockerHub pipline

В этом мы напишем файл dockerfile, который присутствует на github, и с его помощью создадим образ docker. Образ Docker создается в вашем репозитории Dockerhub. Можно сказать , что мы настраиваем автоматические сборки, аналогично GitOPS.

GitOps — это операционная платформа, рекомендованная различными стандартами соответствия для внедрения инфраструктуры и общих методологий разработки.

Github

Github — это особая система контроля версий с открытым исходным кодом, созданная линусом торвальдсом в 2005 году. Это распределенная система контроля версий, которая означает, что вся история базы кода доступна на компьютере каждого разработчика. Это позволяет легко разветвлять и объединять. Для получения дополнительной информации вы также можете перейти на официальный сайт doc .

Docker

Это программная платформа для создания приложений на основе контейнеров. Docker container может работать где угодно — локально или в облаке. Контейнеры в docker легкие, с большей эффективностью использования ресурсов. Это повышает производительность разработчика, поскольку контейнеры в docker работают быстрее, чем виртуальная машина. Подробнее вы можете узнать на официальном Документация .

Предварительные требования

  • Знание как git, так и docker
  • Учетная запись на github и dockerhub
  • Учетная запись Dockerhub должна быть профессиональной, командной или бизнес -подписки .

Напишите код на github

На первом шаге мы создадим репозиторий с любым именем. Затем напишите код или, можно сказать, напишите dockerfile и разместите его на github.

В это репозиторий нам также нужно добавить файл the index.html и в нем записать любое сообщение, которое мы хотим распечатать как веб-страницу nginx. На этом наша работа с github завершена. Теперь приступайте к работе с dockerhub .

Создайте репозиторий на dockerhub

Сначала мы должны создать репозиторий на dockerhub. После этого мы должны открыть это репозиторий и нажать на раздел сборки, как показано на рисунке.

Для этого у вашей учетной записи должна быть подписка pro, team или business. Когда вы нажимаете на раздел сборки, появляются 2 варианта: ссылка на github и ссылка на bitbucket. 

Выберите любой вариант, в котором присутствует ваш файл dockerfile. После подключения к вашему репозиторию git выполните шаг, указанный на изображении ниже.

Я отключил автоматическое тестирование. Если мы включим этот тест, он автоматически внесет изменения в образ, когда вы что-либо нажмете в репозитории github. Нажмите «Сохранить» и «Создать» . Создание образа займет некоторое время. Когда ваша сборка будет успешной, вы увидите, что действие по сборке выполнено успешно (указано ниже).

Теперь мы создадим образ docker на вашем сервере с помощью команд docker

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

Вы увидите , что ваше изображение извлечено , а затем запустите контейнер с этим изображением .

docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

Теперь узнайте IP-адрес этого контейнера с помощью команды

 docker container inspect [OPTIONS] CONTAINER [CONTAINER...]

В последнем случае просто выполните curl с этим IP-адресом, и мы получим результат, который мы определили в этом файле. index.html файл в репозитории github. Мы также можем сказать , что это настроило автоматическую сборку в docker .

Ссылки :-

  • Для сборки автоматизации вы также можете перейти по ссылке official doc .
  • У меня есть этот файл dockerfile на моем компьютере github .

Источник
Дополнительные материалы:

Еще один вариант развертки Docker из Git

Запустите Docker, чтобы опробовать его

Ниже приведен работающий пример этого, это простой веб-сервер Node “Hello World”, работающий на порту 3000. Просто запустите эту команду.:

docker run -p 3000:3000 -e github='https://github.com/pmcdowell-okta/dockertest.git' -it oktaadmin/dockertest

Затем подключитесь к http://localhost:3000. Вы должны увидеть веб-страницу с изображением Hello World.

Как Docker работает с GitHub

Вы запустили образ Docker с переменной окружения, указывающей репозиторий Git, из которого клонируется исходный код. (Переключатель -e указывает URL репозитория GitHub.) В приведенном мной примере используется репозиторий GitHub, на котором создается веб-сервер, написанный с помощью Node.js. Этот пример очень прост, но вы получите представление о том, как это работает.

Вот схема, на случай, если вам больше подходит визуальное обучение:

Шаги для достижения нирваны в Docker + GitHub

  1. Запустите Docker Image – Запускает Docker с переменной окружения в репозитории GitHub
  2. Тянуть Образ Docker автоматически клонирует репозиторий GitHub
  3. Настройка – Удаляет все зависимости
  4. Сборки – Создает полный проект
  5. Выполнить – Запускает проект

Для этого вам понадобятся только Makefile и образ Docker. Давайте узнаем больше о каждом из них.:

Makefile

Это пример Makefile, который я использую, Makefile очень прост, вы, безусловно, можете сделать это по-своему. Makefile удалит все необходимые пакеты или зависимости, затем он клонирует репозиторий GitHub, соберет и запустит приложение.

Вот пример узла, который я использовал:

#Sample from https://github.com/pmcdowell-okta/Simple-node-webserver
setup:
   npm install http

build:
   echo "nothing to build, this Node, but thank you for thinking of me"

run:
   node index.js

dockertest:
   make setup
   make build
   make run

А вот пример в Go:

#Simple Makefile from https://github.com/pmcdowell-okta/hackey-golang-build

GOPATH=$(shell pwd)
SHELL := /bin/bash
PATH := bin:$(PATH)

setup:
   @GOPATH=$(GOPATH) go get "github.com/gorilla/mux"
   @GOPATH=$(GOPATH) go get "github.com/elazarl/go-bindata-assetfs"
   @GOPATH=$(GOPATH) go get github.com/jteeuwen/go-bindata/...
   @GOPATH=$(GOPATH) go get github.com/elazarl/go-bindata-assetfs/...
  
build:
   @GOPATH=$(GOPATH) go build ./...
   @GOPATH=$(GOPATH) go install ./...

run:
   bin/main


#This runs setup, build, and launches the application
dockertest:
   make setup
   make build
   make run

Если вы не знакомы с Makefiles, Makefile — это то, что разработчики используют, чтобы помочь другим разработчикам компилировать и запускать свои проекты. Если вы хотите узнать больше о makefiles, возможно, стоит взглянуть на это руководство по использованию Makefile Руководство по Makefile на Youtube. Просто имейте в виду, что изображение Docker запускает правило под названием dockertest, в котором есть три правила установки, сборки и запуска. Эти правила будут выполняться по порядку.

Makefile (ы) чувствительны и требуют табуляции, поэтому, если ваш Makefile не работает, просто дважды проверьте и убедитесь, что вы не используете пробелы. Makefile также используют специальный синтаксис, называемый YAML.

Вы также можете протестировать свой код и выполнить сборку локально, прежде чем передавать его на GitHub, выполнив:

make dockertest

Если это работает в вашей среде, и вы добавили все зависимости в Makefile, это должно работать и для образа Docker.

Добавьте файл Dockerfile

Для файла Dockerfile я стараюсь сделать его как можно более компактным. Обычно я начинаю с базового образа Ubuntu. Я добавляю необходимые языки, такие как Go или Node.

Особый соус — это несколько команд, которые я помещаю в Dockerfile, который запускает Makefile из репозитория GitHub. Вот как выглядит один из моих Dockerfile.:

FROM ubuntu
#You can start with any base Docker Image that works for you

RUN echo "#!/bin/bash\n" > /startscript.sh
RUN echo "mkdir github\n" >> /startscript.sh
RUN echo "cd github\n" >> /startscript.sh
RUN echo "git clone \$github\n" >> /startscript.sh
RUN echo "cd *\n" >> /startscript.sh
RUN echo "make dockertest\n" >> /startscript.sh

RUN chmod +x /startscript.sh

CMD /startscript.sh

Если вы новичок в Docker и хотите создать свой собственный образ, вы можете скопировать мой код сверху и сохранить его в файл с именем Dockerfile, затем вы можете запустить приведенную ниже команду, которая создаст вашу собственную локальную версию моего образа Docker под названием dockertest.

docker build -t dockertest .

В этом руководстве я буду использовать свое изображение, но если вы уже опытный пользователь Docker, смело используйте свое собственное. Просто помните, что вам нужно добавить в свой образ Docker все, что требуется для компиляции и разрешения зависимостей.

Добавьте переменную окружения в Docker

Особенностью этого простого решения является передача переменной окружения в интерфейс командной строки Docker, которая предоставляет URL-адрес, по которому образ Docker будет удален из репозитория GitHub. Я решил вызвать переменную окружения github.

Для этого примера мне также нужно было разрешить порт 3000 для доступа к гостевому образу Docker:

Супер простое тестирование GitHub с помощью Docker – почему?

Что мне действительно нравится в этом подходе, так это то, что кому-то легко попробовать ваш код. Ниже приведен скриншот из одного из моих репозиториев GitHub, где я включаю команду для тестирования моего кода непосредственно из описания в файле readme.md .

Мне понравилось документировать этот метод, надеюсь, другие найдут его полезным!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *