在本文中,您将会了解到关于golang-docker-最小化打包的新资讯,同时我们还将为您解释golangdockerfile的相关在本文中,我们将带你探索golang-docker-最小化打包的奥秘
在本文中,您将会了解到关于golang-docker - 最小化打包的新资讯,同时我们还将为您解释golang dockerfile的相关在本文中,我们将带你探索golang-docker - 最小化打包的奥秘,分析golang dockerfile的特点,并给出一些关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、4月19日 [J+] —— Docker 构建与 golang 实战、docker golang 开发环境、docker 怎么安装golang的实用技巧。
本文目录一览:- golang-docker - 最小化打包(golang dockerfile)
- 167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo
- 4月19日 [J+] —— Docker 构建与 golang 实战
- docker golang 开发环境
- docker 怎么安装golang
golang-docker - 最小化打包(golang dockerfile)
监控 docker 资源
docker stats xxx yyy
docker stats -a
编译
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
Dockerfile
FROM scratch
ADD cacert.pem /etc/ssl/certs/
ADD main /main
EXPOSE 80
CMD ["/main"]
问题:需要 SSL 根证书
此处参考 https://studygolang.com/articles/11427
wget https://curl.haxx.se/ca/cacert.pem
构建
docker build -t demo .
运行
docker run -itd -p 8181:80 --name xiaoming demo:latest
167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo
background : 最近为小伙伴们筹划docker系列的技术分享,研究了一会docker相关技术, 在此记录一下构建nginx容器时候的坑
1.nginx服务器根目录问题
docker 官方镜像提供的nginx基于debian/jessie平台,其文件结构和ubuntu中的nginx中并不相同
eg:
run一个niginx容器
<span>//80端口被占用,so...</span> $ sudo docker run <span>-it</span><span>-p</span><span>800</span>:<span>800</span> nginx $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES <span>1801</span>a32aab54 nginx <span>"nginx -g ''daemon off"</span><span>2</span> minutes ago Up <span>2</span> minutes <span>80</span>/tcp, <span>443</span>/tcp, <span>0.0</span><span>.0</span><span>.0</span>:<span>800</span><span>-></span><span>800</span>/tcp berserk_kare
进入容器内部
<span>$ </span>sudo docker exec -it <span>1801</span>a32aab54 /bin/bash root<span>@1801a32aab54</span><span>:/</span><span># </span>
查看nginx目录
<span># cd /etc/nginx/</span> conf<span>.d</span>/ koi-utf mime<span>.types</span> nginx<span>.conf</span> uwsgi_params fastcgi_params koi-win modules/ scgi_params win-utf
可以看到不仅没有熟悉的 /sites-available,也没有 /sites-enabled
继续查看nginx配置
<span># cat /conf.d/default.conf</span><span>server</span> { listen <span>80</span>; server_name localhost; <span>#charset koi8-r;</span><span>#access_log /var/log/nginx/log/host.access.log main;</span> location / { root /usr/share/nginx/html; <span>index</span><span>index</span>.html <span>index</span>.htm; } <span>#error_page 404 /404.html;</span><span># redirect server error pages to the static page /50x.html</span><span>#</span> error_page <span>500</span><span>502</span><span>503</span><span>504</span> /<span>50</span>x.html; location = /<span>50</span>x.html { root /usr/share/nginx/html; } <span>#...省略php-fpm配置,好长..</span> }
根目录配置: root /usr/share/nginx/html;
测试
<span># cd /usr/share/nginx/html</span><span># touch index.html</span><span># echo "test nginx in docker" >index.html</span>
php-fpm配置相关
'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });以上就介绍了167 docker docker构建nginx容器系列问题,包括了docker,nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
4月19日 [J+] —— Docker 构建与 golang 实战
无论是docker快速生产环境构建还是golang团队效率开发,都是对现有生产力的一次升级,单纯的理论是很难让人信服的,是骡子是马?来听听使用者他们用实战给予的回答吧:
docker golang 开发环境
go 版本的不一致,依赖库不一致,导致编译失败;代码生成工具不一致,导致生成代码有问题;依赖工具缺失,导致测试不通过等等,开发环境和生产环境之间的差异会导致各种各样奇怪的问题,而 docker 特别擅长解决这种一致性问题
总体方案
最简单粗暴的一种方式就是每次都将代码拷贝到一个新的容器内,执行编译,编译完成后直接将容器制作成镜像,但这种方式每次编译都需要重新拉取依赖,比较耗时
我们采用在这个基础上稍作优化,启动一个固定的容器用于编译,编译完成后将生成的结果拷贝出来,制作新的镜像,能达到近乎本地编译的效果
编译环境镜像
没有直接使用 dockerhub 上的 golang 镜像,是因为我们的项目除了 golang 可能还依赖一些别的工具,比如 makefile,python,protoc 等等,就需要自己制作镜像了,这里我选 centos 作为基础镜像,主要是考虑到后面制作服务镜像的时候也仅需要 centos 即可,不需要完整的 golang 环境
FROM centos:centos7
RUN yum install -y kde-l10n-Chinese && yum reinstall -y glibc-common && localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
RUN yum install -y epel-release
RUN yum install -y docker-io
RUN yum install -y go
RUN yum install -y make
# behave support
RUN yum install -y python36 python36-setuptools python36-pip
RUN pip3 install --upgrade pip
RUN pip3 install requests
RUN pip3 install flask
RUN pip3 install redis
RUN pip3 install pymongo
RUN pip3 install behave
RUN pip3 install pyhamcrest
RUN pip3 install pymysql
RUN pip3 install cryptography
RUN pip3 install grpcio grpcio-tools
# grpc support
RUN yum install -y unzip
RUN curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v3.10.0/protoc-3.10.0-linux-x86_64.zip
RUN unzip protoc-3.10.0-linux-x86_64.zip
RUN export GOPROXY=https://goproxy.cn && \
mkdir -p /src/google.golang.org/grpc && \
cd /src/google.golang.org/grpc && \
export GOPATH=/ && \
export GO111MODULE=on && \
go mod init && \
go get -u google.golang.org/grpc && \
go get -u github.com/golang/protobuf/protoc-gen-go
ENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN:zh
ENV LC_ALL=zh_CN.UTF-8
编译环境镜像可以尽可能多地安装需要的工具,不用担心镜像过大,因为这个镜像我们仅仅用来编译
这里我安装了 make,python,behave 以及 protobuf 工具
启动编译环境容器
.PHONY: buildenv
buildenv:
if [ -z "$(shell docker network ls --filter name=testnet -q)" ]; then \
docker network create -d bridge testnet; \
fi
if [ -z "$(shell docker ps -a --filter name=go-build-env -q)" ]; then \
docker run --name go-build-env --network testnet -d hatlonely/go-env:v1.1.0 tail -f /dev/null; \
fi
hatlonely/go-env:v1.1.0
为上一步制作的镜像,启动命令 tail -f /dev/null
是为了让容器一直存在而不退出,这样就可以一直复用这个容器执行编译
编译
.PHONY: image
image: buildenv
docker exec go-build-env rm -rf /data/src/${gituser}/${repository}
docker exec go-build-env mkdir -p /data/src/${gituser}/${repository}
docker cp . go-build-env:/data/src/${gituser}/${repository}
docker exec go-build-env bash -c "cd /data/src/${gituser}/${repository} && make output"
mkdir -p docker/
docker cp go-build-env:/data/src/${gituser}/${repository}/output/${repository} docker/
docker build --tag=hatlonely/${repository}:${version} .
使用 docker cp
命令将本地代码拷贝到容器里面,执行 docker exec
在 docker 内部执行编译,编译完成后,再用 docker cp
将编译结果拷贝到本机的 docker/
目录
最后再用 Dockerfile 创建出一个新的服务镜像,对应的 Dockerfile 内容如下
服务镜像
FROM centos:centos7
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" >> /etc/timezone
COPY docker/tpl-go-http /var/docker/tpl-go-http
RUN mkdir -p /var/docker/tpl-go-http/log
EXPOSE 7060
WORKDIR /var/docker/tpl-go-http
CMD [ "bin/echo", "-c", "configs/echo.json" ]
链接
- Tips & Tricks for Making Your Golang Container Builds 10x Faster: https://medium.com/windmill-engineering/tips-tricks-for-making-your-golang-container-builds-10x-faster-4cc618a43827
- docker golang 镜像: https://hub.docker.com/_/golang
- 示例项目: https://github.com/hpifu/tpl-go-http
docker 怎么安装golang
docker是一款非常流行的容器化平台,而golang是一门非常热门的编程语言。在部署go应用程序时,使用docker作为容器运行环境是一个不错的选择。
本文将介绍如何在Docker中安装Golang编程语言。
1.安装Docker
首先需要在本地计算机上安装Docker。安装教程可以在Docker官网上找到。
2.创建Dockerfile
立即学习“go语言免费学习笔记(深入)”;
接下来需要创建一个名为Dockerfile的文件,并将其保存在本地。
在Dockerfile中,您需要编写Docker镜像所需的所有指令。以下是一个示例Dockerfile:
# 使用golang 1.14版本的官方镜像作为基础 FROM golang:1.14 # 在容器中创建一个工作目录 RUN mkdir /app # 将工作目录设置为当前目录 WORKDIR /app # 将本地的代码复制到容器中的工作目录 COPY . /app # 下载并安装依赖 RUN go mod download # 构建应用程序 RUN go build -o main . # 设置容器启动时运行的命令 CMD ["/app/main"]
3.构建Docker镜像
在Dockerfile所在目录下执行以下命令,以构建Docker镜像:
docker build -t my-golang-app .
其中,-t参数指定了Docker镜像的名称。
4.运行Docker容器
在Docker镜像构建完毕后,可以使用以下命令启动Docker容器:
docker run -it --rm my-golang-app
其中,-it参数意味着管理终端与Docker容器交互。
--rm参数意味着关闭Docker容器时删除容器。
my-golang-app是您在构建Docker镜像时为该容器设置的名称。
5.测试Go程序
在完成以上步骤后,您的Go应用程序应该已经在Docker容器中运行。可以使用以下命令测试:
curl localhost:8080
如果您的应用程序返回了一个“Hello, World!”信息,那么您已成功在Docker中安装了Golang编程语言。
总结
在此,我们介绍了如何在Docker中安装Golang编程语言。
使用Docker可以很容易地搭建和部署应用程序,因为它可以将所有依赖项和环境打包在一起,并且可以在任何系统中运行。
如果您还没有尝试过使用Docker来部署应用程序,那么赶紧开始吧!它可以为您的应用程序提供更快,便捷,灵活的部署方式。
以上就是docker 怎么安装golang的详细内容,更多请关注php中文网其它相关文章!
关于golang-docker - 最小化打包和golang dockerfile的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、4月19日 [J+] —— Docker 构建与 golang 实战、docker golang 开发环境、docker 怎么安装golang等相关内容,可以在本站寻找。
本文标签: