Dockerfile for Alpine+Golang
在开发环境,测试环境下使用Golang的Docker镜像。
目前使用两个Dockerfile,一个基于Alpine,一个基于CentOS。
使用时请注意修改掉私人有关的内容。
Dockerfile for Alpine+Golang
FROM alpine:latest
RUN apk add --no-cache \
ca-certificates
# set up nsswitch.conf for Go's "netgo" implementation
# - https://github.com/golang/go/blob/go1.9.1/src/net/conf.go#L194-L275
# - docker run --rm debian:stretch grep '^hosts:' /etc/nsswitch.conf
RUN [ ! -e /etc/nsswitch.conf ] && echo 'hosts: files dns' > /etc/nsswitch.conf
ENV GOLANG_VERSION 1.12.3
RUN set -eux; \
apk add --no-cache --virtual .build-deps bash gcc musl-dev openssl gcc musl-dev go git\
; \
export \
# set GOROOT_BOOTSTRAP such that we can actually build Go
GOROOT_BOOTSTRAP="$(go env GOROOT)" \
# ... and set "cross-building" related vars to the installed system's values so that we create a build targeting the proper arch
# (for example, if our build host is GOARCH=amd64, but our build env/image is GOARCH=386, our build needs GOARCH=386)
GOOS="$(go env GOOS)" \
GOARCH="$(go env GOARCH)" \
GOHOSTOS="$(go env GOHOSTOS)" \
GOHOSTARCH="$(go env GOHOSTARCH)" \
; \
# also explicitly set GO386 and GOARM if appropriate
# https://github.com/docker-library/golang/issues/184
apkArch="$(apk --print-arch)"; \
case "$apkArch" in \
armhf) export GOARM='6' ;; \
x86) export GO386='387' ;; \
esac; \
\
wget -O go.tgz "https://golang.org/dl/go$GOLANG_VERSION.src.tar.gz"; \
# echo 'bc1ef02bb1668835db1390a2e478dcbccb5dd16911691af9d75184bbe5aa943e *go.tgz' | sha256sum -c -; \
tar -C /usr/local -xzf go.tgz; \
rm go.tgz; \
\
cd /usr/local/go/src; \
./make.bash; \
\
rm -rf \
# https://github.com/golang/go/blob/0b30cf534a03618162d3015c8705dd2231e34703/src/cmd/dist/buildtool.go#L121-L125
/usr/local/go/pkg/bootstrap \
# https://golang.org/cl/82095
# https://github.com/golang/build/blob/e3fe1605c30f6a3fd136b561569933312ede8782/cmd/release/releaselet.go#L56
/usr/local/go/pkg/obj \
; \
export PATH="/usr/local/go/bin:/usr/bin:$PATH"; \
go version; \
git version
# apk del .build-deps
ENV GO15VENDOREXPERIMENT 1
ENV GO111MODULE on
ENV GOROOT /usr/local/go
ENV GOPATH /data/boyosoft/goBillProcess
# ENV DPPATH $GOPATH/src/vendor/github.com/cpfc/dp
ENV PATH $GOPATH/bin:$GOROOT/bin:$PATH
# ENV GOPATH /go
# ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH
# RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && \
# chmod -R 777 "$GOPATH" && \
RUN mkdir -p /root/.ssh
COPY authorized_keys /root/.ssh/authorized_keys
COPY id_rsa_github /root/.ssh/id_rsa_github
# COPY id_rsa_bigdata_prod /root/.ssh/id_rsa_bigdata_prod
COPY config /root/.ssh/config
COPY known_hosts /root/.ssh/known_hosts
RUN cd /root/.ssh; \
chmod 400 *; \
cd ..; \
chmod 700 .ssh; \
git config --global user.name "devuser"; \
git config --global user.email "pythoner@icloud.com"
#
WORKDIR $GOPATH/src
VOLUME ["/data/boyosoft"]
EXPOSE 8080 8081 3000 3001 9000 9001 9090
Dockerfile for CentOS+Golang
# Version: 0.0.1
FROM centos:latest
MAINTAINER xiehuanang "xiehuanang@boyosoft.net"
# RUN yum install -y wget
#================================================================
# 创建构建或初始化容器时的若干中文件
RUN mkdir /dockerdata
WORKDIR /dockerdata
ADD go1.12.3.linux-amd64.tar.gz /dockerdata
# 升级到centos-7
# COPY CentOS6-Base-163.repo /dockerdata/CentOS-Base.repo
# COPY geekery.repo /dockerdata/geekery.repo
# RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && \
# cp /dockerdata/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo && \
# cp /dockerdata/geekery.repo /etc/yum.repos.d/geekery.repo
RUN yum clean all && \
yum makecache && \
yum -y update && \
yum install -y gcc git
# RUN yum install -y curl && \
# yum install -y readline-devel && \
# yum install -y libXt-devel && \
# yum install -y make
# screen ftp
# RUN yum install -y gcc-gfortran
# gcc-c++
# RUN yum install -y readline-devel
# RUN yum install -y libXt-devel
# RUN yum install -y make
# git
#================================================================
# RUN yum install -y vixie-cron
# RUN yum install -y crontabs
# RUN chkconfig --level 35 crond on
# RUN yum install -y bzip2recover
# RUN yum install -y bzip2
# install R packages
# RUN yum install -y epel-release
# RUN yum install -y R
#================================================================
# RUN yum install -y mysql-community-server
# RUN yum install tomcat6 tomcat6-webapps tomcat6-admin-webapps
#================================================================
# RUN yum install -y redis-server
# RUN yum install -y redis-tools
#================================================================RUN eval "TZ='Asia/Shanghai'; export TZ"
RUN echo "export TZ=\"Asia/Shanghai\"" >> /root/.bashrc && \
echo "export TS=\"`date -d today +"%-Y%-m%-d%k%M%S"`\"" >> /root/.bashrc && \
echo "export VERSION=\"`date -d today +"v2.4.0.%-Y%-m%-d%-k%M%S"`\"" >> /root/.bashrc && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#@todo: 争取把跨平台编译的脚本保存在Docker容器中
# RUN echo `for GOOS in windows;do for GOARCH in 386 amd64; do go build -v -ldflags "-s -w -X main._VERSION_="$VERSION -o BillProcess-$GOOS-$GOARCH-v$TS.exe; done; done`
# RUN rm /etc/localtime3
#================================================================
# 此处纯粹是为配合腾讯的习惯,腾讯虚拟服务器的工作卷名字叫data
# RUN export http_proxy="10.251.233.145:8888"
# RUN export https_prxy="10.251.233.145:8888"
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
#================================================================
#================================================================
RUN echo "47.92.84.245\tboyosoft" >> /dockerdata/ex_hosts && \
echo "47.92.84.245\tboyosoft.net" >> /dockerdata/ex_hosts && \
echo "47.92.84.245\twww.boyosoft.net" >> /dockerdata/ex_hosts && \
touch /dockerdata/update_hosts && \
echo "cat /dockerdata/ex_hosts >> /etc/hosts" >> /dockerdata/update_hosts && \
echo "/etc/init.d/netfs restart" >> /dockerdata/update_hosts && \
chmod 700 /dockerdata/update_hosts && \
rm -rf /dockerdata/ex_hosts && \
rm -rf /usr/lib/golang && \
cp -rf /dockerdata/go /usr/lib/golang && \
rm -rf /dockerdata/go && \
mkdir -p /root/.ssh && \
chmod 700 /root/.ssh
ENV GO15VENDOREXPERIMENT 1
ENV GO111MODULE on
ENV GOROOT /usr/lib/golang
ENV GOPATH /data/boyosoft/goBillProcess
# ENV DPPATH $GOPATH/src/vendor/github.com/cpfc/dp
ENV PATH $GOPATH/bin:$GOROOT/bin:$PATH
#================================================================
# ADD getlatest.sh /dockerdata/getlatest.sh
RUN mkdir -p /root/.ssh
COPY authorized_keys /root/.ssh/authorized_keys
COPY id_rsa_github /root/.ssh/id_rsa_github
# COPY id_rsa_bigdata_prod /root/.ssh/id_rsa_bigdata_prod
COPY config /root/.ssh/config
COPY known_hosts /root/.ssh/known_hosts
RUN cd /root/.ssh && \
chmod 400 * && \
cd .. && \
chmod 700 .ssh
# RUN git clone git@git.18.tl:xiehuanang/processtest.git gittest
# RUN git clone http://xiehuanang:Pocketbbs@www.taolch.com:10080/git/goBillProcess.git
# RUN chmod 700 /dockerdata/getlatest.sh
#RUN echo "#!/bin/sh" >> /dockerdata/build-$APPNAME.sh; \
# echo "cd $APPAPIPATH" >> /dockerdata/build-$APPNAME.sh; \
# echo "go build -o $APPNAME main.go" >> /dockerdata/build-$APPNAME.sh; \
# echo "scp $APPNAME 192.168.200.244:~/$APPNAME" >> /dockerdata/build-$APPNAME.sh; \
# chmod 700 /dockerdata/build-$APPNAME.sh
# RUN echo "#!/bin/sh" >> /dockerdata/build-$APPNAME.sh; \
# echo "cd $APPAPIPATH" >> /dockerdata/build-$APPNAME.sh; \
# echo "go build -o $APPNAME $APPNAME.go" >> /dockerdata/build-$APPNAME.sh; \
# echo "scp $APPNAME 10.104.19.122:~/data/boyosoft/$APPNAME" >> /dockerdata/build-$APPNAME.sh; \
# chmod 700 /dockerdata/build-$APPNAME.sh
# RUN git config --global user.email "xiehuanang@boyosoft.net"
# RUN git config --global user.name "xiehuanang"
# RUN git config --global push.default matching
RUN git config --global user.name "devuser"
RUN git config --global user.email "pythoner@icloud.com"
###############################################################################
# 初始化root用户的环境变量
RUN echo "export GOPATH=$GOPATH" >> /root/.bashrc && \
echo "export GOROOT=$GOROOT" >> /root/.bashrc && \
echo "export GO15VENDOREXPERIMENT=$GO15VENDOREXPERIMENT" >> /root/.bashrc && \
echo "export GO111MODULE=$GO111MODULE" >> /root/.bashrc && \
echo "export JDALPHASERVERPATH=$GOPATH/src/github.com/boyosoft/jdalphaserver" >> /root/.bashrc && \
echo "export PATH=$PATH" >> /root/.bashrc && \
cat /root/.bashrc && \
rm -rf /var/cache/yum
# RUN source /root/.profile
# RUN touch /usr/local/bin/q && \
# chmod +x /usr/local/bin/q && \
# echo "#!/bin/bash" >> /usr/local/bin/q && \
# echo "cd $JDALPHASERVERPATH" >> /usr/local/bin/q && \
# echo "rm -rf jdalphaserver" >> /usr/local/bin/q && \
# echo "go build" >> /usr/local/bin/q && \
# echo "chmod +x jdalphaserver" >> /usr/local/bin/q && \
# # echo "./jdalphaserver -syncdb" >> /usr/local/bin/q && \
# echo "./jdalphaserver" >> /usr/local/bin/q
###############################################################################
#RUN mkdir -p /dockerdata/www/html/static
# RUN git commit -a -m "update when compile the dockerfile"
# RUN git push
# goBillProcess内嵌的Web服务器占用的端口号
WORKDIR $GOPATH/src
VOLUME ["/data/boyosoft"]
EXPOSE 8080 8081 3000 3001 9000 9001 9090
# export VERSION=`date -d today +"v2.4.0.%-Y%-m%-d%-k%M%S"`
# export TS=`date -d today +"%-Y%-m%-d%k%M%S"`
# for GOOS in windows;do for GOARCH in 386 amd64; do go build -v -ldflags "-s -w -X main._VERSION_="$VERSION -o BillProcess-$GOOS-$GOARCH-v$TS.exe; done; done
# ENTRYPOINT ["/root/config_crond.sh"]
# CMD ["/dockerdata/build-$APPNAME.sh"]
有疑问加站长微信联系(非本文作者)