이 기사는 GoLang 웹 프로그램 작성 및 Linux에서 패키지 컴파일과 관련된 문제를 포함하여 Docker 이미지 기반 Go 프로젝트 배포에 대한 관련 지식을 제공합니다.
물론 이 단계에 따라 배포할 수도 있지만 어쩌면 중간에 작은 문제가 있는데 어떻게 해결해야 할지 모르겠다면, 물론 메시지를 남길 수도 있습니다.
Mac 환경에서 개발하고 테스트 하였으며, Windows 환경이라면 약간의 차이가 있을 수 있으나 큰 문제는 없을 것입니다.
여기서 가장 간단한 hello world 프로그램을 작성하겠습니다.
다음 내용으로 새 main.go
파일을 만듭니다. main.go
文件,内容如下:
package mainimport ( "fmt" "log" "net/http")func sayHello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "hello world")}func main() { http.HandleFunc("/", sayHello)//注册URI路径与相应的处理函数 log.Println("【默认项目】服务启动成功 监听端口 80") er := http.ListenAndServe("0.0.0.0:80", nil) if er != nil { log.Fatal("ListenAndServe: ", er) }}
我是在mac上开发的,需要用到go的交叉编译,如果对交叉编译不熟悉的,可以查下文档,或者直接复制我下面的命令进行编译。
我们是要跑在Docker
里面,基础 golang
这个镜像跑的,所以需要把他编译成兼容 i386
处理器的程序。
sudo env GOOS=linux GOARCH=386 go build main.go
这个编译完成后,本地会多出一个 main
程序,暂时不用管它备用就行。
Dockerfile
定制我们go程序的镜像新建一个文件夹,里面新建一个Dockerfile
文件,再在里面新建app
,script
两个文件。把上一步的main
程序放到app
文件夹里面,在script
里面新建一个build.sh
脚本文件,文件内容先不管,等下会说。
具体的文件结构是这样。
. ├── Dockerfile ├── app │ └── main └── script └── build.sh
下面就是编写Dockerfile
文件内容了,内容我先上代码:
FROM golang MAINTAINER 青羽 WORKDIR /go/src/COPY . .EXPOSE 80CMD ["/bin/bash", "/go/src/script/build.sh"]
这里解释下:
FROM
是集成自哪个镜像,我们是go程序官方提供了一个golang
这样的镜像,我们可以直接使用。MAINTAINER
是维护这名字。WORKDIR
工作目录。COPY
这是一个复制命令,把本地的所有文件复制到工作目录下。EXPOSE
这是对方开发的端口,我默认是开放80端口,这里可根据实际情况修改CMD
执行一个带参数的命令,我这样写,是为了让镜像启动时去执行script/build.sh
的脚本,这个脚本里面是写的启动go程序的命令。#!/usr/bin/env bash cd /go/src/app/ && ./main
就这两行。
这属于Docker
的知识了,我把命令粘贴出来。
docker build -t go-web .
golang
这个镜像的话,他会自己先去官方镜像库拉取这个镜像再编译,我们静静的等他就行。go-web
这个参数是你最后编译后的镜像名字,可以随意修改,也可以加上版本号比如: go-web:v1
。看到上面这个输出,就说明编译成功了,在你的本地镜像里面就有了一个名为go-web
的镜像。可以使用 docker images
进行查询:
docker-compose.yml
文件到这里属于我们的最后一步了,如果用我们刚编译的go-web
来运行我们的go程序:
version: '2'networks: basic:services: world: container_name: world image: go-web ports: - "8099:80" volumes: - ./app/go/world:/go/src/app:rw networks: - basic
到这里我们的编排文件已经写好了,现在只需要用docker-compose
来启动我们的编排文件就好,启动命令如下:
docker-compose -f docker-compose.yml up -d world
如果输出下面的提示,说明启动成功了。
Creating world ... done
启动成功后你可以再用
docker ps
来查看下是否启动成功了。
现在访问http://127.0.0.1:8099
rrreee
저는 Mac에서 개발했고 go 크로스 컴파일을 사용해야 합니다. 만약 크로스 컴파일이 익숙하지 않다면 설명서를 확인하시거나 아래 명령어를 직접 복사해서 컴파일하시면 됩니다. golang
이미지를 기반으로 Docker
에서 실행하려고 하므로 i386
프로세서와 호환되는 프로그램으로 컴파일해야 합니다. .
rrreee
main
프로그램이 로컬에 있을 것입니다. 당분간은 그대로 두세요. 🎜🎜4. Dockerfile
을 사용하여 go 프로그램의 이미지를 맞춤 설정하세요. 🎜🎜새 폴더를 만들고 그 안에 새 Dockerfile
파일을 만든 다음 새 app
in it>, script
두 개의 파일. 이전 단계의 main
프로그램을 app
폴더에 넣고 script
에 새로운 build.sh
스크립트를 생성합니다. > 파일, 지금은 파일 내용에 대해 신경 쓰지 않고 나중에 이야기하겠습니다. 🎜 구체적인 파일 구조는 다음과 같습니다. 🎜rrreee🎜다음은 Dockerfile
파일의 내용입니다. 먼저 코드를 작성하겠습니다. 🎜rrreee🎜설명은 다음과 같습니다. 🎜🎜🎜어떤 미러가 FROM
인가요? go 프로그램은 우리가 직접 사용할 수 있는 golang
과 같은 이미지를 공식적으로 제공합니다. 🎜🎜MAINTAINER
는 이 이름을 유지하는 것입니다. 🎜🎜WORKDIR
작업 디렉터리. 🎜🎜COPY
모든 로컬 파일을 작업 디렉터리에 복사하는 복사 명령입니다. 🎜🎜EXPOSE
상대방이 개발한 포트입니다. 기본적으로 80번 포트를 열어두는데요. 실제 상황에 따라 수정 가능합니다. 🎜🎜CMD
실행해 보세요. 매개변수가 포함된 명령은 이미지가 시작될 때 script/build.sh
스크립트를 실행하는 것입니다. 이 스크립트에는 go 프로그램을 시작하는 명령이 포함되어 있습니다. 🎜 내용을 여기에 붙여넣겠습니다: 🎜🎜rrreee🎜 이 두 줄만요. 🎜🎜5. 나만의 이미지 컴파일🎜🎜이것은 Docker
의 지식에 속하므로 명령을 붙여넣겠습니다. 🎜rrreee🎜🎜이 명령이 실행됩니다. 로컬에 golang
이미지가 없으면 먼저 공식 이미지 라이브러리로 가서 이미지를 가져온 다음 조용히 기다리면 됩니다. 🎜🎜go-web
이 매개변수는 마지막으로 컴파일된 이미지의 이름입니다. 원하는 대로 수정하거나 버전 번호를 추가할 수 있습니다(예: go-web:v1
). >. 🎜🎜🎜🎜위 내용을 참조하세요 출력은 컴파일이 성공했으며 로컬 이미지에 go-web
이라는 이미지가 있음을 의미합니다. docker 이미지
를 사용하여 다음을 쿼리할 수 있습니다. 🎜
🎜🎜 6. docker-compose.yml
파일을 작성합니다🎜🎜이것이 마지막 단계입니다. go-web를 사용하여 go 프로그램을 실행하세요. 🎜rrreee🎜오케스트레이션 파일이 여기에 작성되었습니다. 이제 오케스트레이션 파일을 시작하려면 <code>docker-compose
만 사용하면 됩니다. 🎜 rrreee🎜다음 프롬프트가 출력되면 시동이 성공한 것입니다. 🎜rrreee🎜시작이 성공한 후 🎜rrreee🎜를 사용하여 시작 성공 여부를 확인할 수 있습니다. 🎜🎜이제 http://127.0.0.1:8099
를 방문하여 Go 프로그램에 액세스하세요. 🎜🎜추천 학습: "🎜docker 비디오 튜토리얼🎜"🎜🎜
위 내용은 Docker 이미지를 기반으로 Go 프로젝트 배포(자세한 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!