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

이 기사는 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에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
Docker : 이식성 및 확장 성을위한 컨테이너화 응용 프로그램Docker : 이식성 및 확장 성을위한 컨테이너화 응용 프로그램Apr 16, 2025 am 12:09 AM

Docker는 응용 프로그램을 패키지, 배포 및 실행하는 데 사용되는 Linux 컨테이너 기술 기반 도구입니다. 1) DockerBuild 및 Dockerrun 명령을 사용하여 Docker 컨테이너를 구축하고 실행할 수 있습니다. 2) DockerCompose는 마이크로 서비스 관리를 단순화하기 위해 멀티 컨테이너 Docker 응용 프로그램을 정의하고 실행하는 데 사용됩니다. 3) 다단계 구성을 사용하면 이미지 크기를 최적화하고 응용 프로그램 시작 속도를 향상시킬 수 있습니다. 4) 컨테이너 로그보기는 컨테이너 문제를 디버깅하는 효과적인 방법입니다.

Docker가 컨테이너를 시작하는 방법Docker가 컨테이너를 시작하는 방법Apr 15, 2025 pm 12:27 PM

Docker Container Startup 단계 : 컨테이너 이미지를 당기기 : "Docker Pull [Mirror Name]"을 실행하십시오. 컨테이너 생성 : "docker"[옵션] [미러 이름] [명령 및 매개 변수]를 사용하십시오. 컨테이너를 시작하십시오 : "Docker start [컨테이너 이름 또는 ID]"를 실행하십시오. 컨테이너 상태 확인 : 컨테이너가 "Docker PS"로 실행 중인지 확인하십시오.

Docker에서 로그를 보는 방법Docker에서 로그를 보는 방법Apr 15, 2025 pm 12:24 PM

Docker Logs를 보는 방법에는 다음이 포함됩니다. Docker Logs 명령 사용 : Docker Logs Container_name Docker Exec 명령을 사용하여 RUN /BIN /SH를 사용하여 로그 파일을 봅니다. cat /var/log/container_name.log docker-compose logs docker compose의 명령 : docker-compose -f docker-com 사용

Docker 컨테이너의 이름을 확인하는 방법Docker 컨테이너의 이름을 확인하는 방법Apr 15, 2025 pm 12:21 PM

단계를 따르면 Docker 컨테이너 이름을 쿼리 할 수 ​​있습니다. 모든 컨테이너 (Docker PS)를 나열하십시오. 컨테이너 목록을 필터링합니다 (GREP 명령 사용). 컨테이너 이름 ( "이름"열에 위치)을 가져옵니다.

Docker 용 컨테이너를 만드는 방법Docker 용 컨테이너를 만드는 방법Apr 15, 2025 pm 12:18 PM

Docker에서 컨테이너 만들기 : 1. 이미지를 당기기 : Docker Pull [Mirror Name] 2. 컨테이너 만들기 : Docker Run [옵션] [미러 이름] [명령] 3. 컨테이너 시작 : Docker Start [컨테이너 이름]

Docker가 컨테이너를 빠져 나가는 방법Docker가 컨테이너를 빠져 나가는 방법Apr 15, 2025 pm 12:15 PM

도커 컨테이너를 종료하는 4 가지 명령 사용 Docker Kill & lt; Container_name & gt; 호스트 터미널의 명령 (힘 출구)

Docker의 파일을 외부로 복사하는 방법Docker의 파일을 외부로 복사하는 방법Apr 15, 2025 pm 12:12 PM

Docker의 외부 호스트에 파일을 복사하는 방법 : Docker CP 명령 사용 : Docker CP 실행 [옵션] & lt; 컨테이너 경로 & gt; & lt; 호스트 경로 & gt;. 데이터 볼륨 사용 : 호스트에서 디렉토리를 만들고 -V 매개 변수를 사용하여 양방향 파일 동기화를 달성하기 위해 컨테이너를 만들 때 컨테이너에 디렉토리를 장착하십시오.

Docker의 MySQL을 시작하는 방법Docker의 MySQL을 시작하는 방법Apr 15, 2025 pm 12:09 PM

Docker에서 MySQL을 시작하는 프로세스는 다음 단계로 구성됩니다. MySQL 이미지를 가져와 컨테이너를 작성하고 시작하고 루트 사용자 암호를 설정하고 포트 확인 연결을 매핑하고 데이터베이스를 작성하고 사용자는 데이터베이스에 모든 권한을 부여합니다.

See all articles

핫 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. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기