Как да докерирате приложението си Go (golang)

Голанг на Докер

Превръщането на приложенията ви в изображение на Докер е чудесен начин за разпространение и разгръщане на вашите приложения. Няма да се справям защо да използвам Docker, но ще ви покажа най-лесния начин да Dockerize вашите приложения. Това е второто от много от тях, които ще направя за различни езици.

Има два начина да направите това, един е спорно по-лесен, но в крайна сметка получавате по-голямо изображение, отколкото е необходимо. Другата има допълнителна стъпка, но в крайна сметка получавате много по-малко изображение. Изборът е ваш (все пак предпочитам последното).

Започнете с приложението

Ето едно просто приложение Hello World:

Има единична външна зависимост, горила / мюкс. Go няма вграден инструмент за управление на зависимости, така че ще го разгледаме накратко тук. Ако имате инструмент за зависимост, който харесвате, продължете и го използвайте. Ако не го направите, просто изпълнете следните две команди:

docker run --rm -it -v $ PWD: /go/src/github.com/treeder/dockergo -w /go/src/github.com/treeder/dockergo treeder / glide init
# Кажете не на въпроса, който задава, след това:
docker run --rm -it -v $ PWD: /go/src/github.com/treeder/dockergo -w /go/src/github.com/treeder/dockergo treeder / glide update

Сега ще имате вашите зависимости в директорията / vendor, където инструментите go ще търсят зависимости. Тези команди ще работят както е във всяка директория, но като започнете да изграждате кода си, ще искате да замените treeder / dockergo с името на вашето хранилище.

Начин 1: Създайте вътре вашия Dockerfile

Този първи начин е по-традиционният начин на Докер, където правим пълните инструкции за изграждане в Dockerfile. но всъщност не е най-добрият начин, тъй като ще създаде раздуто изображение, където не е необходима повечето от допълнителните размери.

Копирайте следното във файл, наречен Dockerfile.

# iron / go: dev е алпийският образ с добавени инструменти go
ОТ желязо / отидете: dev
WORKDIR / ап
# Задайте env var, който съответства на вашето github repo име, заменете treeder / dockergo тук с вашето репо име
ENV SRC_DIR = / go / src / github.com / treeder / dockergo /
# Добавете изходния код:
ДОБАВЯНЕ $ SRC_DIR
# Създайте го:
RUN cd $ SRC_DIR; go build -o myapp; cp myapp / app /
ENTRYPOINT ["./myapp"]

Сега нека го изградим:

docker build -t treeder / dockergo.

И сега можем да го стартираме и да го тестваме:

docker run --rm -p 8080: 8080 treeder / dockergo

Сърфирайте до http: // localhost: 8080 /, за да го видите как работи.

Начин 2: Изграждане извън вашия Dockerfile

Това изисква една допълнителна стъпка, но си струва, ще ви спести стотици MB. Номерът е да се изгради първо, а след това просто добавете получения двоичен файл към малко основно изображение чрез вашия Dockerfile.

Изпълнете следната команда за изграждане:

docker run --rm -v "$ PWD": / go / src / github.com / treeder / dockergo -w /go/src/github.com/treeder/dockergo iron / go: dev go build -o myapp
docker build -t $ USERNAME / $ IMAGE: най-ново.

Сега вграденият двоичен файл, наречен myapp, ще бъде във вашата текуща директория.

Копирайте от Dockerfile с това сега:

# iron / go е алпийският образ с добавени само ca-сертификати
ОТ желязо / отивам
WORKDIR / ап
# Сега просто добавете двоичното
ДОБАВИ myapp / app /
ENTRYPOINT ["./myapp"]

Сега нека го изградим:

docker build -t treeder / dockergo.

И го стартирайте и тествайте:

docker run --rm -p 8080: 8080 treeder / dockergo

Сърфирайте до http: // localhost: 8080 /, за да го видите как работи.

Многобройни начини за оформяне на изображение

Както можете да видите, ние изградихме нашето изображение по два различни начина с абсолютно същата програма вътре. Но единият начин е по-добър от другия поради завършването на много по-малко изображение. Колко по-малки? ~ 300 MB по-малък.

Бих казал, че си заслужава

Сега какво?

Добре, така че превърнахте приложението си в изображение на Докер, сега какво?

Е, следващото нещо, което вероятно ще искате да направите, е да го насочите към регистър на Docker. Docker Hub е по подразбиране, така че опитайте първо.

docker push YOUR_USERNAME / dockergo

Сега отидете да помолите приятел да изпробва приложението ви, като изпълните тази команда:

docker run --rm -it -p 8080: 8080 YOUR_USERNAME / dockergo

Ако вашият приятел може да стартира вашето приложение толкова лесно, можете също така да внедрите софтуер на сървърите си също толкова лесно. Всичките ви приятели и вашите сървъри се нуждаят от инсталиран Docker ... което е красиво нещо.