Выполнение команд оболочки внутри контейнерного приложения Go.
В этом уроке я расскажу вам, как создать контейнерное приложение Go, способное выполнять команды оболочки. Как только вы привыкнете к рабочему процессу, вы сможете изменить приложение в соответствии со своими предпочтениями и получить соответствующий результат.
Введение
Я создам приложение Go, которое может выполнять в нем команды оболочки, а затем я контейнеризирую приложение с помощью Docker. Если вы не знакомы с Golang, вы можете использовать код, который я предоставил ниже, и вы не должны придерживаться того же процесса и кода, который я здесь описываю.
Давайте начнем.
Установите необходимое программное обеспечение
Прежде чем создавать приложение Go, давайте настроим среду для разработки.
В основном вам нужно установить Docker на свой компьютер, и если вы уже установили Docker на свой компьютер, вы можете сразу перейти к следующему шагу. Или же используйте ссылку ниже, чтобы загрузить его на свой компьютер.
Затем вам понадобится текстовый редактор для создания всех файлов конфигурации для этого проекта. Я предпочитаю VS Code, поэтому в этом уроке я буду использовать его. Но вы можете использовать любой из ваших любимых текстовых редакторов, а если вам нужно скачать VS Code, воспользуйтесь ссылкой ниже.
Создайте приложение Go
Если вы хорошо разбираетесь в языке программирования Golang, то написать программу на Go для вас не составит труда. В обычных сценариях перед написанием приложения Go вам необходимо установить Go на свой компьютер.
Но в этом руководстве мы должны создать приложение Go внутри контейнера Docker; чтобы мы могли использовать официальный образ докера Golang вместо ручной установки Golang.
Давайте создадим наше приложение Go, и для демонстрационных целей я создам базовое приложение Go, которое показывает ответ в браузере. Вы можете изменить это позже, чтобы получить другие результаты.
Здесь команда ls
выводит список доступных файлов и каталогов внутри нашего приложения и отображает их в браузере, когда мы запрашиваем через назначенный нами порт.
[Примечание: вы можете использовать разные команды оболочки, такие как pwd
, echo
, для получения разных выходных данных. Кроме того, вы можете попробовать различные переменные среды, такие как PATH, изменив этот файл Go.]
Создать Dockerfile
Чтобы создать Dockerfile, сначала вам нужно выбрать образ Golang Docker с тегом. Перейдите по ссылке ниже и попробуйте выбрать один из тегов, которые вы предпочитаете.
Используя образ докера Golang по приведенной выше ссылке, мы можем создать наш Dockerfile. В Dockerfile вы можете изменять команды в соответствии с вашим сценарием, и здесь я даю вам базовый файл конфигурации со всеми необходимыми командами для создания нашего конкретного образа Docker.
Теперь наше приложение Go и Dockerfile готовы. Давайте создадим наш образ и запустим контейнер, используя этот образ, чтобы проверить, видим ли мы ответ в браузере.
Обновление. Если у вас возникла ошибка при создании образа Docker с использованием вышеуказанного Dockerfile, попробуйте вместо этого приведенный ниже фрагмент кода.
FROM golang:alpine WORKDIR /go/src/app COPY . /go/src/app RUN go mod init RUN go build -o /go/usr/app . EXPOSE 8080 CMD ["/go/usr/app"]
Создайте образ докера
Когда все наши файлы будут готовы, мы можем приступить к созданию образа приложения Go. Откройте терминал, измените каталог на приложение Go и выполните приведенную ниже команду, чтобы создать образ докера.
$ docker build . -t go-app
docker build
— это команда, которую мы используем для создания образа докера, а флаги .
и -t
представляют текущий каталог и имя вашего образа. В моем случае go-app
— это имя образа докера, и, используя флаг -t
, вы даже можете добавить тег к своему образу докера, как показано ниже.
$ docker build . -t go-app:1.0
После успешного выполнения всех шагов, которые вы упомянули в Dockerfile, вы можете запустить docker images
на своем терминале, чтобы проверить, успешно ли создан ваш образ Docker. Если вы добавили тег для своего изображения при его создании, вы также увидите этот тег в выводе docker images
.
Если ваше приложение go-app:1.0 есть в списке, вы можете перейти к следующему шагу — созданию контейнера Docker с использованием этого образа.
Создайте контейнер Docker
Вы можете создать док-контейнер, используя приведенную ниже команду на своем терминале.
$ docker run -p 8080:8000 --name go-c1 go-app:1.0
docker run
— это команда, которую мы используем для создания контейнера из образа докера. В приведенной выше команде мы использовали флаг -p
для экспорта портов для нашего контейнера. В команде -p 8080:8000
порт 8080
— это наш локальный порт, а порт 8000 — это порт, на котором работает наш контейнер.
Кроме того, вы можете использовать флаг —- name
для установки имени контейнера, и в этом случае go-c1 — это имя контейнера, а в конце имени контейнера необходимо указать имя образа docker, которое вы использовали для создания контейнера docker.
После успешного выполнения команды docker run
вы можете вывести список всех запущенных контейнеров с помощью команды docker ps
.
[Примечание: используйте другую вкладку вашего терминала для запуска команды docker ps, так как приведенная выше команда не освободит терминал, пока вы не отмените процесс]
Если вы видите свой контейнер в команде docker ps, значит, вы почти закончили разработку.
Проверьте ответ в браузере
Выполнив все вышеперечисленные шаги, вы можете открыть браузер и перейти к localhost:port.
Если вы все еще не уверены в том, какой порт нужно добавить после localhost, вы можете использовать команду docker port
, чтобы проверить его, как показано ниже.
$ docker port <container-id>
Получите идентификатор контейнера из команды docker ps
и скопируйте его, как показано ниже. Затем вы получите порт, который запускает ваш док-контейнер локально.
$ docker port 329ea194a282 //output 8000/tcp -> 0.0.0.0:8080
Здесь вы можете видеть, что приложение работает на порту 8080 локально, так что откройте браузер и перейдите на localhost:8080, чтобы увидеть ответ.
Заключение
Поздравляем! 🎉
Вы создали приложение Go, которое может выполнять команды оболочки внутри контейнера Docker. Вы можете изменить свое приложение Go в соответствии со своим сценарием и соответственно попробовать разные результаты.
Спасибо за чтение!