Dockerfile for Alpine+Golang

Dockerfile for Alpine+Golang

在开发环境,测试环境下使用Golang的Docker镜像。 目前使用两个Dockerfile,一个基于Alpine,一个基于CentOS。

使用时请注意修改掉私人有关的内容。

Dockerfile for Alpine+Golang

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# 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"]