Я написал статью некоторое время назадDocker
Статьи по построению среды разработки LNMP:Создайте среду разработки Laravel с помощью Docker, в котором подробно описываетсяnginx
,mysql
иphp
На три контейнераdocker-compose
хореографияLNMP
Шаги среды разработки, как ее использовать сегодняDocker
Быстрая сборкаGo
Среда разработки языковых проектов.
потому чтоGo
Сама стандартная библиотека может обеспечить высокую производительностьHTTP
Сервер, его купили незнакомые студенты, ошибаюсь, ошибаюсь, посмотрите на него:Глубокое погружение в написание HTTP-серверов в Go. так что используйтеDocker
ПостроитьGo
Среда разработки намного проще, чем сборка среды разработки LNMP.Если требований к настройке не слишком много, то даже писать не нужноDockerfile
Создайте зеркало самостоятельно и используйте официальное напрямуюgolang
Просто зеркально отразите.
Получить образ Docker
Мы используем официальную последнюю стабильную версию зеркалаgolang:latest
, Перед получением образа убедитесь, что у вас запущен компьютерDocker
Клиент, если у вас его нет, перейдите на официальный сайт, чтобы скачать его, и я не буду здесь больше говорить.
скачатьdockerHub
На зеркале напрямую используйте команду:
docker pull golang
После загрузки образа запустите контейнер с образом:
docker run --rm -it --name go-http-demo golang bash
Приведенная выше команда использует зеркалированиеgolang
создалgo-http-demo
контейнер, в котором создается контейнерBash
сессия.--rm
Параметр указывает на автоматическое удаление контейнера после его выхода.
После запуска вышеуказанной команды мы входим в работающий контейнер и запускаемgo version
Проверьте следующееgo
версия:
root@965425c5bdcf:/go# go version
go version go1.13.6 linux/amd64
root@965425c5bdcf:/go#
Вы можете в соответствии с вашими потребностями вhttps://hub.docker.com/_/golang
Найдите нужную версиюgolang
Образ запускает контейнер.
Запуск проекта Go в контейнере
Мы используем"Глубокое погружение в написание HTTP-серверов в Go"Последняя поддержка изящного отключения сервисов, написанная наHTTPServer
, вставь этоDocker
Контейнер обслуживает запросы от хоста.HTTP Server
Исходный код выглядит следующим образом.Если вы хотите изучить, как реализован код, просто прочитайте статью по ссылке.
package main
import (
"context"
"fmt"
"log"
"net/http"
"os"
"os/signal"
"syscall"
)
func main() {
mux := http.NewServeMux()
mux.Handle("/", &helloHandler{})
server := &http.Server{
Addr: ":8080",
Handler: mux,
}
// 创建系统信号接收器
done := make(chan os.Signal)
signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-done
if err := server.Shutdown(context.Background()); err != nil {
log.Fatal("Shutdown server:", err)
}
}()
log.Println("Starting HTTP server...")
err := server.ListenAndServe()
if err != nil {
if err == http.ErrServerClosed {
log.Print("Server closed under request")
} else {
log.Fatal("Server closed unexpected")
}
}
}
type helloHandler struct{}
func (*helloHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World")
}
Поместите исходный код на локальный компьютер/Code/go/src/example.com/http-demo/main.go
В каталоге файлов напишите путь в соответствии с вашей ситуацией, когда вы это делаете.
Следующий шаг — поместить этот код в контейнер для запуска, переключиться в каталог кода и выполнить следующую команду:
docker run --rm -it --name go-http-demo \
-v $PWD:/go/src/example.com/go-http-demo \
-p 8000:8080
golang
-v
опция позволяет нам монтировать несколько локальных каталогов или томов данных в контейнер, изменения будут синхронизированы друг с другом внутри и снаружи контейнера, приведенная выше команда будет/Code/go/src/example.com/go-http-demo/
крепится к контейнеру/go/src/example.com/go-http-demo
.
-p
Укажите сопоставление портов хоста и контейнера, потому что кодHTTP
служба слушает8080
порт, поэтому мы будем размещать8000
порт и контейнер8080
Порты отображаются.
После выполнения вышеуказанной команды переключаемся на контейнерBash
Сессия, переключитесь в каталог кода для запускаgo run main.go
После этого откройте браузер на своем компьютере, чтобы посетитьhttp:localhost:8080
Вид страницы на рисунке ниже доказывает, что сервер нормально работает в контейнере.
Управление контейнерами с помощью docker-compose
Через вышеуказанный контент мы использовалиDocker
построилGo
среде разработки, но каждый раз, когда вы вводите эту кучу команд, вам нужно войти в контейнер для выполненияgo
Команда запуска программы слишком трудоемка, используемdocker-compose
Автоматизируйте эти процессы выше.
Создан в корневом каталоге кода проектаdocker-compose.yml
:
version: '3'
services:
app:
image: golang:latest
working_dir: /go/src/example.com/http_demo
volumes:
- /$GOPATH/src/example.com/http_demo:/go/src/example.com/http_demo
- /$GOPATH/src:/go/src
ports:
- "8000:8080"
environment:
WORKING_DIR: /go/src/example.com/http_demo
command: go run /go/src/example.com/http_demo/main.go
Если вы не разрешаете это в своем проекте, найдите каталог, в который можно поместить этот файл. У меня есть отдельный каталог с несколькими проектами.Docker
конфигурационный файл сPHP
Есть также проектыGo
Проект.
Приведенный выше файл аранжировки определяет только один файл с именемapp
службы, и другие легко понять.Я не буду говорить об этом.Единственное, на что следует обратить внимание, это то, что еслиyml
файл вне проектаvolumes
Измените конфигурацию в нем на абсолютный путь и не используйте его.$PWD
охватывать
Следующий стартdocker-compose
:
docker-compose up -d
Если запуск не удался, не запускайтеdaemon
работать в режиме-d
Удалите его, вы можете увидеть конкретную ошибку, подождите, пока отладка пройдет нормально, а затем запустите ее в фоновом режиме.
После модификации кода нужно перекомпилировать проект и выполнить следующую команду для нашего контейнера
docker-compose restart
Чтобы войти в работающий контейнер для выполнения операции, используйте команду:
docker exec -it <container name> bash
создан для насapp
Отправитьgo test
Команда Пусть она выполняется внутри контейнера:
docker-compose exec app go test
Недавно я хочу попробовать заменить старый проект наgo mod
Управление, проект все еще используетсяgo1.12
Поэтому я использую сначалаDocker
Можно возиться со средой, в которой изолирован контейнер. Среда разработки, которую я сделал сегодня, по-прежнему очень проста и бесполезна.Dockerfile
создать собственное зеркало,docker-compose
Настройки в конфигурационном файле также очень просты, и я добавлю их позже, если они не просты в использовании. Следующие две старые статьи посвященыDocker
Зеркальное отображениеdocker-compose
Она более подробная, и примеров много, если интересно, можете глянуть.
Научу вас, как сделать желаемый образ PHPDocker
Создайте среду разработки Laravel с помощью Docker
Если вы столкнулись с какими-либо проблемами при сборке окружения самостоятельно, вы можете оставить сообщение здесь для обратной связи, или вы можете оставить сообщение для обратной связи в моем официальном аккаунте.