Рубрики
Uncategorized

Разработка внутри контейнера Docker

Теперь мы начнем попасть в сорняки использования докера. Я думаю, простой способ начать … Tagged with Docker, Go, Tulciory, DevOps.

Docker Training (6 серии деталей)

Теперь мы начнем попасть в сорняки использования докера. Я думаю, что простой способ начать это было бы с пользовательской историей. Итак, вот и мы.

Как разработчик, я хотел бы иметь среду для развития, которая облегчает проблему «работы на моем ящике». Это должно работать так же на моей коробке, что и в производстве. Я не должен быть в состоянии установить что -то в моей среде, что не существует, когда я развернут свое приложение для производства. Любой другой разработчик должен иметь возможность забрать мое приложение и развиваться точно так же, без огромного времени, потраченного на то, чтобы получить окружающую среду, как и мое.

Трубные мечты, я прав?

Посмотрим, как мы можем справиться с Docker.

Большинство языков в наши дни поддерживают какую -то живую перезагрузку, позволяющую разработчикам мгновенно внести изменения и заставляют их работать вживую для них. Итак, давайте начнем с добавления этой функции в наш маленький API.

Запуск контейнера

Запуск этого контейнера, чтобы мы могли действительно работать в нем с нашим редактором, займет немного больше, чем мы делали раньше. На самом деле мы собираемся использовать изображение, которое мы не создали на этот раз. Давайте посмотрим на изображение, которое мы собираемся использовать. Cosmtrek/Air . Пожалуйста, уделите минуту, чтобы исследовать ссылку на изображение, если вы раньше не изучали Dockerhub. Обзор Вкладка даст вам краткое изложение того, как использовать изображение. Теги Вкладка покажет вам разные теги, которые вы можете потреблять. Так что, если мы прокручиваем вниз по обзору, вы увидите, как его запустить Docker Way . Итак, давайте сделаем это.

Сначала нам нужно вытащить изображение.

docker pull cosmtrek/air

Если бы мы хотели употреблять конкретный тег, то мы могли бы сделать это. Просто убедитесь, что вы также используете этот тег в следующей команде Docker Run.

Давайте добавим небольшую конфигурацию для воздуха, чтобы он очистился для нас, когда он будет сделан. В $ projectroot/go-rest-api/ , давайте добавим .air.conf и заполните его следующим образом, сохранить.

# .air.conf
# Config file for [Air](https://github.com/cosmtrek/air) in TOML format

# Working directory
# . or absolute path, please note that the directories following must be under root.
root = "." 
tmp_dir = "tmp"
[build]
# It's not necessary to trigger build each time file changes if it's too frequent.
delay = 1000 # ms
# Stop to run old binary when build errors occur.
stop_on_error = true
[color]
# Customize each part's color. If no color found, use the raw app log.
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"

[misc]
# Delete tmp directory on exit
clean_on_exit = true

Теперь давайте запустим это изображение и загрузите наш код в лету

docker run -it --rm\
    -w /app/ \
    -v `pwd`/go-rest-api:/app/ \
    -p 8080:10000 \
    cosmtrek/air \
    -c .air.conf

Там много всего происходит. Итак, давайте разберемся.

Docker Run : Мы видели это раньше. Просто базовая команда для запуска контейнера

-it : Это сокращенная способ объявить -НТЕРЕКАТИКА -tty что мы обсуждали ранее

--RM : Это очистит файловую систему, которую создает наш контейнер. Обычно это сохраняется. Но мы действительно не хотим, чтобы это происходило. Всякий раз, когда мы начинаем это, мы хотим убедиться, что это свежее только с кодом, с которым мы работаем.

-W : Точно так же, как в нашем Dockerfile. Это позволит нам объявить Workdir

-v : Это короткое для --объем Это установит наше $ projectroot/go-rest-api в /приложение внутри контейнера. pwd \ Это лишь небольшой стенография, чтобы получить наш настоящий рабочий каталог. В противном случае мы должны были бы объявить полный путь того, что мы хотим установить внутри контейнера.

-p 8080: 10000 Порт -картирование, как и раньше.

Cosmtrek/Air Объявление изображения, которое мы хотим использовать.

-c .air.conf Потому что мы объявили -Это Мы можем передать параметры в Intrypoint контейнера. Мы используем это для прохождения в созданном нами файле конфигурации.

Вы должны были получить такой вывод.

$ docker run -it --rm\
    -w /app/ \
    -v `pwd`/go-rest-api:/app/ \
    -p 8080:10000 \
    cosmtrek/air \
    -c .air.conf

  __    _   ___  
 / /\  | | | |_) 
/_/--\ |_| |_| \_ // live reload for Go apps [v1.11.1]

mkdir /app/tmp
watching .
!exclude tmp
building...
running...
Starting Web Server
Preparing to handle requests
Ready for requests

Так что, глядя на это сразу с летучей мыши. Мы видим, что это развернуто v1.11.1 . Это старое. Давайте сделаем это снова, используя тег версии, чтобы запустить более новую версию. (Если вы делаете это позже. Возможно, вы получили другую версию. Но на момент написания. Похоже, что новые изображения раздвигаются, но Последний не обновляется)

docker run -it --rm\
    -e GO111MODULE=off
    -w /app/ \
    -v `pwd`/go-rest-api:/app/ \
    -p 8080:10000 \
    cosmtrek/air:v1.15.1 \
    -c .air.conf

Вы заметите на этот раз. Мы пропустили шаг потяжкой. Ура ярлыки. Была еще одна мелочь, которую мы добавили. -e : GO111Module в его самых простых терминах говорит, что искать и требовать модулей GO. Впадение во все это действительно не имеет смысла. Но если вам любопытно, это блог было отличным чтением.

Но мы снова бегаем. И посмотри. Наша версия Go более поздняя

$ docker run -it --rm\
    -e GO111MODULE=off \
    -w /app/ \
    -v `pwd`/go-rest-api:/app/ \
    -p 8080:10000 \
    cosmtrek/air:v1.15.1 \
    -c .air.conf

  __    _   ___  
 / /\  | | | |_) 
/_/--\ |_| |_| \_ v1.15.1 // live reload for Go apps, with Go 1.15.5

mkdir /app/tmp
watching .
!exclude tmp
building...
running...
Starting Web Server
Preparing to handle requests
Ready for requests

Итак, давайте посмотрим, работает ли наше завиток.

curl localhost:8080

Выход:

$ curl localhost:8080
Hello From integratnio

Отличное приложение все еще работает. Теперь давайте сделаем смену кода и посмотрим, как Live Reload делает свое дело.

Внесение изменений

Откройте $ projectroot/go-rest-api/main.go Анкет В строке 11 вы увидите Сообщение объявлен. Давайте изменим значение этой строки и сохраните файл. Не стесняйтесь изменить это на все, что вы хотите. Но я собираюсь изменить это на Ура, мы сделали это

Посмотрите, как терминал запускает ваш Dev Container, когда вы нажимаете сохранение.

main.go has changed
building...
running...
Starting Web Server
Preparing to handle requests
Ready for requests

Магия

Давайте снова проверим этот запрос скручивания. Выход:

$ curl localhost:8080
Yay We Did It

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

Docker Training (6 серии деталей)

Оригинал: «https://dev.to/jamesatintegratnio/developing-inside-a-docker-container-3ofd»