alpine 렌즈를 기반으로 go 응용 프로그램을 docker에 배치합니다

1629 단어
docker로 go 응용 프로그램을 배치할 때, 우리는 docker의 Golang 이미지를 선택할 수 있습니다.
그러나 더 빠른 시작 속도와 더 작은 디스크 점용을 위해 알피니 렌즈를 기본 렌즈로 추천합니다.Alpine 운영체제는 musl libc와busybox를 사용하여 시스템의 부피와 운행 시 자원의 소모를 줄이지만 기능적으로busybox보다 훨씬 완벽하기 때문에 개원 지역사회의 점점 더 많은 사랑을 받고 있다.
Alpine Docker 미러링도 Alpine Linux 릴리스의 이러한 이점을 상속합니다.다른 Docker 미러에 비해 용량이 5MB 정도로 매우 작습니다(Ubuntu 시리즈 미러에 비해 200MB에 가깝습니다).
어떤 사람들은 왜 알파인 렌즈를 사용할 수 있느냐는 의문을 가질 수 있다.alpine 미러에는 go 환경이 없지 않습니까?
너의 의문은 옳다.alpine에는 확실히 고 환경이 없다.그러나 우리는 컴파일러에서 코드를 바이너리 파일로 미리 컴파일한 다음에 이 바이너리 파일을 ADD에서 새로운 거울로 만들 수 있다.이 바이너리 파일의 실행은 고 환경에 의존하지 않기 때문에 알핀 환경에서 직접 뛸 수 있습니다.
그러나 알핀 버전으로 컴파일하는 과정은 다른 linux, 예를 들어centos와 약간 다르다.centos에서 컴파일하기
go build main.go

그런데 알핀 버전으로 컴파일하려면 추가가 필요해요.
CGO_ENABLED=0 go build main.go

CGO_ENABLED는 기본적으로 Go의runtime 환경 변수CGO_ENABLED=1, 즉 기본적으로 cgo를 시작합니다. Go 코드에서 C 코드를 호출할 수 있습니다.설정CGO_ENABLED=0을 통해 CGO가 비활성화됩니다.Dockerfile 파일 내용
FROM docker.io/alpine
ADD ./golang/src/pro/main /go/main
EXPOSE 9000
CMD /go/main     

dockerfile를 통해 go의 코드를 컴파일한 거울은 12.3M에 불과합니다. 물론 이것은 당신의 코드 패키지 크기에 달려 있습니다.렌즈 코드를 만들다.
docker build -f golang/Dockerfile -t mygo11 .
-f Dockerfile 파일을 지정합니다.맨 뒷면.에서는 현재 미러가 만들어진 컨텍스트를 지정합니다.이 컨텍스트는 Dockerfile ADD ./golang/src/pro/main /go/main의 첫 번째 경로와 관련이 있습니다.컨텍스트가 잘못되면 ADD에서 해당 경로를 찾을 수 없어 미러링에 실패합니다.여기가 관건이야.컨텍스트와 Dockerfile 파일을 같은 디렉토리에 두는 것이 좋습니다.내가 있는 이곳은 위아래 문장을 배우기 위해 일부러 다르게 설정했을 뿐이다.
부팅 컨테이너
docker run -d -p 9004:9000 mygo11

좋은 웹페이지 즐겨찾기