生产环境一比一还原!从搭建 Nginx 到发布 Go 服务的容器化之路
·
欢迎关注我的公众号「DevOps和k8s全栈技术」,进公众号【服务】栏,可以看到技术群,点击即可加入学习交流群。↓↓↓
关注公众号,免费学技术~
在本文中,我们将通过两个实际案例来学习如何使用 Dockerfile 构建自己的容器镜像。案例一是 制作一个带有自定义网页的 Nginx 镜像,案例二是将一个基于 Gin 框架开发的 Go 应用打包成镜像并运行。
一、基于 Dockerfile 构建 Nginx 镜像
1. 准备目录和文件
mkdir dockerfilecd dockerfile/
创建一个自定义网页文件:
vim index.html
内容如下:
<html><head> <title>page added to dockerfile</title></head><body> <h1>Hello ,My Name is Xianchao,My wechat is luckylucky421302 </h1></body></html>
2. 编写 Dockerfile
vim Dockerfile
内容如下:
FROM rockylinux:8.9MAINTAINER xianchaoRUN rm -rf /etc/yum.repos.d/*COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/RUN yum install wget -yRUN yum install nginx -yCOPY index.html /usr/share/nginx/html/EXPOSE 80ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
说明:
-
安装 wget 和 nginx
-
替换首页内容
-
容器启动后自动运行 nginx 服务
3. 构建镜像
docker build -t xianchao/nginx:v1 .
4. 查看镜像是否构建成功
docker images | grep nginx显示如下表示成功:
dockerfile/nginx latest baee97a76499 About a minute ago 344MB5. 启动容器
docker run -d -p 80 --name html2 xianchao/nginx:v16. 查看容器状态
docker ps | grep html输出示例:
bdbe140d5dc9 xianchao/nginx:v1 "/usr/sbin/nginx -g …" 17 seconds ago Up 15 seconds 0.0.0.0:49154->80/tcp, :::49154->80/tcp html27. 访问容器部署的网站
curl http://192.168.40.180:49154输出:
<html><head> <title>page added to dockerfile</title></head><body> <h1>Hello,My Name is Xianchao,My wechat is luckylucky421302 </h1></body></html>二、将 Go 应用封装为容器镜像
1. 安装 Go 环境
yum install go -y2. 创建 Go 源码
mkdir testcd test/编辑 main.go:
package mainimport ("net/http""github.com/gin-gonic/gin")func statusOKHandler(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"status": "success~welcome to study"})}func versionHandler(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"version": "v1.1版本"})}func main() { router := gin.New() router.Use(gin.Recovery()) router.GET("/", statusOKHandler) router.GET("/version", versionHandler) router.Run(":8080")}3. 初始化 Go 模块和下载依赖
go mod init testgo env -w GOPROXY=https://goproxy.cn,directgo mod tidy4. 编译 Go 程序
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o k8s-demo main.go5. 编写 Dockerfile
cat Dockerfile内容如下:
FROM alpineWORKDIR /data/appADD k8s-demo /data/app/CMD ["/bin/sh","-c","./k8s-demo"]6. 构建镜像
docker build -t xianchao/k8sdemo:v1 .7. 运行容器
docker run -d --name go -p 30180:8080 xianchao/k8sdemo:v18. 访问服务
在与服务器同一网段的机器上通过浏览器或 curl 访问:
http://<主机IP>:30180/输出:
{"status":"success~welcome to study"}访问版本接口:
http://<主机IP>:30180/version输出:
{"version":"v1.1版本"}
总结:
本文通过两个实战案例,完整演示了如何从零开始构建 Docker 镜像:
-
使用 CentOS 搭建 Nginx 服务,并替换默认网页
-
封装一个 Go 应用为 Docker 镜像,并对外提供 API 服务
希望对你学习 Dockerfile、镜像构建与容器部署有所帮助!
如有问题欢迎添加作者微信:luckylucky421302
END
➤ 往期精彩回顾

-
推荐书籍:《Kubernetes从入门到DevOps企业应用实战》——韩老师以企业实战为背景出版的一本高质量书籍:销量突破1万
-
K8s Scheduler Pod 启动失败:Error: failed to reserve container name

欢迎关注我的公众号「DevOps和k8s全栈技术」,进公众号【服务】栏,可以看到技术群,点击即可加入到学习交流群。↓↓↓
更多推荐
所有评论(0)