목차
종속적 지식
1. 환경에 따라 다름
2. GoLang 웹 프로그램 작성
三、编译成linux下的程序包
四、使用 Dockerfile 定制我们go程序的镜像
五、编译我们自己的镜像
六、编写 docker-compose.yml 文件
운영 및 유지보수 Docker Docker 이미지를 기반으로 Go 프로젝트 배포(자세한 예)

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

Feb 10, 2022 pm 05:54 PM
docker

이 기사는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

pycharm으로 프로젝트를 패키징하는 방법 pycharm으로 프로젝트를 패키징하는 방법 Apr 25, 2024 am 03:54 AM

PyCharm에서 프로젝트를 패키징하는 방법에는 네 가지가 있습니다. 별도의 실행 파일로 패키징: EXE 단일 파일 형식으로 내보냅니다. 설치 프로그램으로 패키지됨: Setuptools Makefile을 생성하고 빌드합니다. Docker 이미지로 패키징: 이미지 이름을 지정하고, 빌드 옵션을 조정하고, 빌드합니다. 컨테이너로 패키징: 빌드할 이미지를 지정하고, 런타임 옵션을 조정하고, 컨테이너를 시작합니다.

PHP 분산 시스템 아키텍처 및 실습 PHP 분산 시스템 아키텍처 및 실습 May 04, 2024 am 10:33 AM

PHP 분산 시스템 아키텍처는 네트워크에 연결된 시스템 전체에 다양한 구성 요소를 분산하여 확장성, 성능 및 내결함성을 달성합니다. 아키텍처에는 애플리케이션 서버, 메시지 대기열, 데이터베이스, 캐시 및 로드 밸런서가 포함됩니다. PHP 애플리케이션을 분산 아키텍처로 마이그레이션하는 단계는 다음과 같습니다. 서비스 경계 식별 메시지 대기열 시스템 선택 마이크로서비스 프레임워크 채택 컨테이너 관리에 배포 서비스 검색

Docker는 3분 만에 LLama3 오픈 소스 대규모 모델의 로컬 배포를 완료합니다. Docker는 3분 만에 LLama3 오픈 소스 대규모 모델의 로컬 배포를 완료합니다. Apr 26, 2024 am 10:19 AM

개요 LLaMA-3(LargeLanguageModelMetaAI3)은 Meta Company에서 개발한 대규모 오픈소스 생성 인공지능 모델입니다. 이전 세대 LLaMA-2에 비해 모델 구조에는 큰 변화가 없습니다. LLaMA-3 모델은 다양한 애플리케이션 요구 사항과 컴퓨팅 리소스에 맞게 소형, 중형, 대형을 포함한 다양한 규모 버전으로 구분됩니다. 소형 모델의 모수 크기는 8B, 중형 모델의 모수 크기는 70B, 대형 모델의 모수 크기는 400B에 이릅니다. 그러나 훈련 중에는 다중 모달 및 다중 언어 기능을 달성하는 것이 목표이며 결과는 GPT4/GPT4V와 비슷할 것으로 예상됩니다. Ollama 설치Ollama는 오픈 소스 대형 언어 모델(LL

PHP 마이크로서비스 컨테이너화의 민첩한 개발 및 운영 PHP 마이크로서비스 컨테이너화의 민첩한 개발 및 운영 May 08, 2024 pm 02:21 PM

답변: PHP 마이크로서비스는 민첩한 개발을 위해 HelmCharts로 배포되고 격리 및 확장성을 위해 DockerContainer로 컨테이너화됩니다. 자세한 설명: HelmCharts를 사용하여 PHP 마이크로서비스를 자동으로 배포하여 민첩한 개발을 달성하세요. Docker 이미지를 사용하면 마이크로서비스의 신속한 반복 및 버전 제어가 가능합니다. DockerContainer 표준은 마이크로서비스를 격리하고 Kubernetes는 컨테이너의 가용성과 확장성을 관리합니다. Prometheus 및 Grafana를 사용하여 마이크로서비스 성능 및 상태를 모니터링하고 경보 및 자동 복구 메커니즘을 생성하세요.

PI 노드 교육 : PI 노드 란 무엇입니까? Pi 노드를 설치하고 설정하는 방법은 무엇입니까? PI 노드 교육 : PI 노드 란 무엇입니까? Pi 노드를 설치하고 설정하는 방법은 무엇입니까? Mar 05, 2025 pm 05:57 PM

Pinetwork 노드에 대한 자세한 설명 및 설치 안내서이 기사에서는 Pinetwork Ecosystem을 자세히 소개합니다. Pi 노드, Pinetwork 생태계의 주요 역할을 수행하고 설치 및 구성을위한 전체 단계를 제공합니다. Pinetwork 블록 체인 테스트 네트워크가 출시 된 후, PI 노드는 다가오는 주요 네트워크 릴리스를 준비하여 테스트에 적극적으로 참여하는 많은 개척자들의 중요한 부분이되었습니다. 아직 Pinetwork를 모른다면 Picoin이 무엇인지 참조하십시오. 리스팅 가격은 얼마입니까? PI 사용, 광업 및 보안 분석. Pinetwork 란 무엇입니까? Pinetwork 프로젝트는 2019 년에 시작되었으며 독점적 인 Cryptocurrency Pi Coin을 소유하고 있습니다. 이 프로젝트는 모든 사람이 참여할 수있는 사람을 만드는 것을 목표로합니다.

DeepSeek을 설치하는 방법 DeepSeek을 설치하는 방법 Feb 19, 2025 pm 05:48 PM

Docker 컨테이너를 사용하여 사전 컴파일 된 패키지 (Windows 사용자의 경우)를 사용하여 소스 (숙련 된 개발자)를 컴파일하는 것을 포함하여 DeepSeek를 설치하는 방법에는 여러 가지가 있습니다. 공식 문서는 신중하게 문서를 작성하고 불필요한 문제를 피하기 위해 완전히 준비합니다.

컨테이너화를 통해 Java 기능의 성능을 최적화하는 방법은 무엇입니까? 컨테이너화를 통해 Java 기능의 성능을 최적화하는 방법은 무엇입니까? Apr 29, 2024 pm 03:09 PM

컨테이너화는 다음과 같은 방식으로 Java 기능 성능을 향상시킵니다. 리소스 격리 - 격리된 컴퓨팅 환경을 보장하고 리소스 경합을 방지합니다. 경량 - 시스템 리소스를 덜 차지하고 런타임 성능을 향상시킵니다. 빠른 시작 - 기능 실행 지연을 줄입니다. 일관성 - 애플리케이션과 인프라를 분리하여 환경 전체에서 일관된 동작을 보장합니다.

Docker 컨테이너를 사용하여 JavaEE 애플리케이션 배포 Docker 컨테이너를 사용하여 JavaEE 애플리케이션 배포 Jun 05, 2024 pm 08:29 PM

Docker 컨테이너를 사용하여 Java EE 애플리케이션 배포: Dockerfile을 생성하여 이미지를 정의하고, 이미지를 빌드하고, 컨테이너를 실행하고, 포트를 매핑한 다음, 브라우저에서 애플리케이션에 액세스합니다. 샘플 JavaEE 애플리케이션: REST API는 Docker를 통해 배포한 후 localhost에서 액세스할 수 있는 데이터베이스와 상호 작용합니다.

See all articles