美文网首页Gopher
Dockerfile for Alpine+Golang

Dockerfile for Alpine+Golang

作者: 大眼铅笔 | 来源:发表于2019-04-12 10:03 被阅读4次

    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"]
    

    相关文章

      网友评论

        本文标题:Dockerfile for Alpine+Golang

        本文链接:https://www.haomeiwen.com/subject/jfyqwqtx.html