Docker 이미지를 기반으로 Go 프로젝트 배포(자세한 예)
이 기사는 GoLang 웹 프로그램 작성 및 Linux에서 패키지 컴파일과 관련된 문제를 포함하여 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
文件,再在里面新建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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

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

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

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

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

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

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