欢迎关注我的公众号「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   344MB

5. 启动容器

docker run -d -p 80 --name html2 xianchao/nginx:v1

6. 查看容器状态

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   html2

7. 访问容器部署的网站

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 -y

2. 创建 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 tidy

4. 编译 Go 程序

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o k8s-demo main.go

5. 编写 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:v1

8. 访问服务

在与服务器同一网段的机器上通过浏览器或 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

➤  往期精彩回顾

图片

图片

欢迎关注我的公众号「DevOps和k8s全栈技术」,进公众号【服务】栏,可以看到技术群,点击即可加入到学习交流群。↓↓↓

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐