>  기사  >  운영 및 유지보수  >  Docker 이미지를 기반으로 Go 프로젝트 배포(자세한 예)

Docker 이미지를 기반으로 Go 프로젝트 배포(자세한 예)

WBOY
WBOY앞으로
2022-02-10 17:54:044839검색

이 기사는 GoLang 웹 프로그램 작성 및 Linux에서 패키지 컴파일과 관련된 문제를 포함하여 Docker 이미지 기반 Go 프로젝트 배포에 대한 관련 지식을 제공합니다.

Docker 이미지를 기반으로 Go 프로젝트 배포(자세한 예)

종속적 지식

  • Go 크로스 컴파일 기본
  • Docker 기본
  • Dockerfile 사용자 정의 이미지 기본
  • docker-compose 오케스트레이션 파일 작성 기본

물론 이 단계에 따라 배포할 수도 있지만 어쩌면 중간에 작은 문제가 있는데 어떻게 해결해야 할지 모르겠다면, 물론 메시지를 남길 수도 있습니다.

Mac 환경에서 개발하고 테스트 하였으며, Windows 환경이라면 약간의 차이가 있을 수 있으나 큰 문제는 없을 것입니다.

1. 환경에 따라 다름

  • Docker

2. GoLang 웹 프로그램 작성

여기서 가장 간단한 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)
    }}

三、编译成linux下的程序包

我是在mac上开发的,需要用到go的交叉编译,如果对交叉编译不熟悉的,可以查下文档,或者直接复制我下面的命令进行编译。
我们是要跑在Docker里面,基础 golang这个镜像跑的,所以需要把他编译成兼容 i386 处理器的程序。

sudo env GOOS=linux GOARCH=386 go build main.go

这个编译完成后,本地会多出一个 main 程序,暂时不用管它备用就行。

四、使用 Dockerfile 定制我们go程序的镜像

新建一个文件夹,里面新建一个Dockerfile文件,再在里面新建appscript两个文件。把上一步的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

Docker 이미지를 기반으로 Go 프로젝트 배포(자세한 예)

看到上面这个输出,就说明编译成功了,在你的本地镜像里面就有了一个名为go-web的镜像。可以使用 docker images 进行查询:

Docker 이미지를 기반으로 Go 프로젝트 배포(자세한 예)

六、编写 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:8099rrreee

3. Linux에서 프로그램 패키지로 컴파일합니다.

저는 Mac에서 개발했고 go 크로스 컴파일을 사용해야 합니다. 만약 크로스 컴파일이 익숙하지 않다면 설명서를 확인하시거나 아래 명령어를 직접 복사해서 컴파일하시면 됩니다. golang 이미지를 기반으로 Docker에서 실행하려고 하므로 i386 프로세서와 호환되는 프로그램으로 컴파일해야 합니다. .
rrreee

이 컴파일이 완료된 후에는 추가 main 프로그램이 로컬에 있을 것입니다. 당분간은 그대로 두세요. 🎜🎜4. Dockerfile을 사용하여 go 프로그램의 이미지를 맞춤 설정하세요. 🎜🎜새 폴더를 만들고 그 안에 새 Dockerfile 파일을 만든 다음 새 appin 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). >. 🎜🎜

Docker 이미지를 기반으로 Go 프로젝트 배포(자세한 예)🎜🎜위 내용을 참조하세요 출력은 컴파일이 성공했으며 로컬 이미지에 go-web이라는 이미지가 있음을 의미합니다. docker 이미지를 사용하여 다음을 쿼리할 수 있습니다. 🎜

Docker 이미지를 기반으로 Go 프로젝트 배포(자세한 예)🎜🎜 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제