本人一golang小白,beego專案終于學到了部署階段,nohup太low了,
還是喜歡用docker和docker-compose(主要:supervisor不熟,k8s不會,哈哈)
bee pack -be GOOS=linux
主要目的,解決:
docker: Error response from daemon:
OCI runtime create failed: container_linux.go:345:
starting container process caused "exec: \"/app\":
permission denied": unknown.
環境說明
CentOS 7.9
Docker Version: 20.10.8
Docker -compose version 1.29.2
廢話不多說,懂得人自然懂,上代碼(這是最終版的,程序放在后面講)
第一步:建立鏡像
vim Dockerfile
#--------------------------------
FROM alpine
LABEL maintainer="SuPerMix <zhangbest5@163.com>"
ENV TZ=Asia/Shanghai LANG=C.UTF-8
RUN echo 'http://mirrors.ustc.edu.cn/alpine/v3.5/main' > /etc/apk/repositories \
&& echo 'http://mirrors.ustc.edu.cn/alpine/v3.5/community' >>/etc/apk/repositories \
&& apk update && apk add tzdata \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
WORKDIR /go/src/
#--------------------------------
docker build -t go_alpine:v1 .
操作目的:
- 使用最精簡版基礎鏡像 alpine (5.6M),沒有對比就沒有傷害(官方golang 941M)
- 生成鏡像:go_alpine:v1
解決問題點:
- 時區問題:
RUN echo 'http://mirrors.ustc.edu.cn/alpine/v3.5/main' > /etc/apk/repositories \ && echo 'http://mirrors.ustc.edu.cn/alpine/v3.5/community' >>/etc/apk/repositories \ && apk update && apk add tzdata \ && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo "Asia/Shanghai" > /etc/timezone
這是這個極簡鏡像的問題,其他官方大容量版本的沒有發現時區問題
順便解決了docker logs [容器名] 顯示時區問題,時區正常了 docker logs 資訊也就正常了(查資料時,有文章說,docker官方為了力保時間準確改不了,反正我這docker最新版,時區改過來,logs也正常了)
第二步:Docker-compose制作
vim docker-compose.yml
#--------------------------------
version: '3'
services:
go_mybeego:
image: go_alpine:v1
restart: always
ports:
- "80:8080"
volumes:
- /mnt/data/wwwroot/gm_mybeego/htdocs/:/go/src/
command: /bin/sh -c "chmod a+x /go/src/mybeego"
entrypoint: ["./mybeego"]
container_name: go_mybeego
#--------------------------------
操作目的:
- 使用之前制作好的極簡版鏡像
- 直接資料卷掛載 /mnt/data/wwwroot/gm_mybeego/htdocs/ 中放了所有使用beego 編譯后的檔案,詳細版的掛載卷為
volumes: #這里細分了,也可以直接一句: - /mnt/data/wwwroot/gm_mybeego/htdocs/:/go/src/ - /mnt/data/wwwroot/gm_mybeego/htdocs/conf/:/go/src/conf/:ro - /mnt/data/wwwroot/gm_mybeego/htdocs/static/:/go/src/static/:ro - /mnt/data/wwwroot/gm_mybeego/htdocs/views/:/go/src/views/:ro - /mnt/data/wwwroot/gm_mybeego/htdocs/logs/:/go/src/logs/:rw - /mnt/data/wwwroot/gm_mybeego/htdocs/upload/:/go/src/upload/:rw - /mnt/data/wwwroot/gm_mybeego/htdocs/mybeego:/go/src/mybeego
解決問題點:
- 解決 permission denied": unknown
docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"/mybeego\": permission denied": unknown.
主要是這一句解決,沒有執行權限問題
command: /bin/sh -c "chmod a+x /go/src/mybeego"
- 解決啟動指定默認執行的任務問題:
entrypoint: ["./mybeego"]這樣就不用把執行檔案打包到Docker的鏡像里了,通過掛載進去,
第三步:啟動,搞定
注意:這個alpine 進入容器的話,得用這個 /bin/bash 不行
#【極簡版】
docker exec -it [容器名] /bin/sh
下面絮叨下,問題處理的另一方法,及一些心得
思路:把編譯后檔案打入鏡像,但一樣得給執行權限
目錄結構
── docker-compose.yml
└── golang
├── Dockerfile
└── mybeego【發布編譯完成后的檔案,必須放這,Dockerfile背景關系就找這,絕對路徑也不好使】
DockerFile如下:(兩版,自行選下,一小白貌似這極簡版也可以的)
【極簡版】鏡像5.6M【默認的alpine會有時區問題】
vim Dockerfile
#--------------------------------
FROM alpine
LABEL maintainer="SuPerMix <zhangbest5@163.com>"
ENV TZ=Asia/Shanghai LANG=C.UTF-8
RUN echo 'http://mirrors.ustc.edu.cn/alpine/v3.5/main' > /etc/apk/repositories \
&& echo 'http://mirrors.ustc.edu.cn/alpine/v3.5/community' >>/etc/apk/repositories \
&& apk update && apk add tzdata \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
COPY mybeego /go/src/mybeego
RUN chmod a+x /go/src/mybeego
WORKDIR /go/src/
ENTRYPOINT ["./mybeego"]
【官方版】鏡像941M【時區正常】
vim Dockerfile
#--------------------------------
FROM golang
LABEL maintainer="SuPerMix <zhangbest5@163.com>"
RUN apt-get update && apt-get install -y vim
ENV TZ=Asia/Shanghai LANG=C.UTF-8
COPY mybeego$GOPATH/src/mybeego
RUN chmod a+x $GOPATH/src/mybeego
WORKDIR $GOPATH/src/
ENTRYPOINT ["./mybeego"]
docker-compose
vim docker-compose.yml
#--------------------------------
version: '3'
services:
go_mybeego:
build: ./golang
restart: always
ports:
- "80:8080"
volumes:
- /mnt/data/wwwroot/gm_mybeego/htdocs/conf/:/go/src/conf/:ro
- /mnt/data/wwwroot/gm_mybeego/htdocs/static/:/go/src/static/:ro
- /mnt/data/wwwroot/gm_mybeego/htdocs/views/:/go/src/views/:ro
- /mnt/data/wwwroot/gm_mybeego/htdocs/logs/:/go/src/logs/:rw
- /mnt/data/wwwroot/gm_mybeego/htdocs/upload/:/go/src/upload/:rw
container_name: go_mybeego
#--------------------------------
查看內連
#【極簡版】
docker exec -it [容器名] /bin/sh
#【官方版】
docker exce -it [容器名] /bin/bash
清理鏡像
docker image prune
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297456.html
標籤:其他
