当前位置: 首页 > news >正文

docker-01 创建一个自己的镜像并运行容器

docker-01 创建一个自己的镜像并运行容器

前言

我们都知道使用Docker的镜像可以快速创建和部署应用,大大的节约了部署的时间。并且Docker 的镜像提供了除内核外完整的运行时环境,确保代码的环境一致性,从而不会在出现这段代码在我机器上没问题这类问题。

但是如果我们想创建一个镜像来运行自己的应用,该怎么做呢?我们在这里进行一个简单的尝试。

1、准备工作

  • 首先我们要准备一个Linux环境,这里我使用的是Ubuntu 20.04。
  • 其次,我们需要安装好Docker。可以通过docker info命令查看当前操作系统中是否安装了docker。
  • 通过vscode连接到Linux环境,并安装好Go语言。

2、编写测试应用

我们创建一个文件夹docker-test,用来编写测试应用。

首先进行初始化,在当前的docker-test目录下执行go mod init docker-test命令,创建go.mod文件。

然后,创建一个main.go文件,内容如下:

package mainimport ("fmt""time"
)func main() {for {fmt.Println("Hello, world!")time.Sleep(10 * time.Second)}
}

这个文件只会每隔10秒输出一次"Hello, world!"。

为了在容器中可以编译运行Go语言程序,我们需要下载一个Go 官方提供的预装 Go 编译器的 Docker 镜像。

执行docker pull golang:latest命令,下载golang镜像。

使用docker images,查看当前系统中已经下载的镜像。

在这里插入图片描述

出现,golang:latest镜像,说明已经成功下载了golang:latest镜像。

3、构建镜像,并运行容器

3.1 构建镜像

现在我们已经准备好了测试应用,可以开始构建镜像了。
我们需要在当前docker-test目录下创建一个Dockerfile文件,用于构建镜像,内容如下:

# 使用官方 Go 镜像作为基础镜像
FROM golang:latest# 设置工作目录
WORKDIR /app#将当前目录下的所有文件复制到镜像的工作目录中
COPY .  .# 构建 Go 应用
RUN go build -o main main.go# 运行可执行文件# 运行 go 程序,(CMD:在启动容器时才执行此行。RUN:构建镜像时就执行此行)
CMD ["./main"]

这个Dockerfile文件中,我们使用golang:latest作为基础镜像,设置工作目录为/app,将当前目录下的所有文件复制到镜像的工作目录中,构建Go应用,并运行可执行文件。

执行docker build -t docker-test:latest . 命令,构建镜像。

其中,docker-test 是镜像的名称。latest 是镜像的标签(tag)。如果不指定 -t 选项,则 Docker 会为镜像分配一个默认的无标签状态。

标签帮助我们管理不同版本的镜像。例如,可以有 docker-test:1.0, docker-test:2.0 等版本。latest表示最新版本。

最后的. 表示构建上下文路径,构建镜像时,默认会在上下文路径中查找名为 Dockerfile 的文件,并依据这个文件来构建镜像。如果你想依据其他文件来构建镜像,或者Dockerfile在其他路径下,你可以用 -f 选项来指定 Dockerfile 的路径。

执行完成之后,再次运行docker images命令,可以看到我们新构建的镜像 docker-test:lastest。

在这里插入图片描述

3.2 运行容器

现在,我们已经构建好了镜像,可以运行容器了。

执行docker run -d -it --name docker-test docker-test:latest命令,运行容器。

其中:

  • -d: 后台运行容器
  • -it: 交互式运行容器,进入容器后可以输入命令
  • –name: 为容器指定一个名称
  • docker-test:latest: 运行的镜像名称

执行完成之后,运行docker ps命令,可以看到我们新运行的容器,容器的名称为docker-test。
在这里插入图片描述

3.3 进入容器,查看效果

容器运行成功后,我们可以通过docker logs docker-test命令查看容器的日志。
在这里插入图片描述

可以看到,容器已经打印出多次"Hello, world!"。

也可以通过docker attache查看实时打印的消息。

执行docker exec -it docker-test /bin/bash命令,进入容器。

发现容器已经进入容器的/app目录,即我们在 Dockerfile中设置的工作目录
执行ls -l命令,可以看到 docker-test 目录下的所有文件已经成功复制到镜像的工作目录中。

在这里插入图片描述

4、总结

本文介绍了如何创建自己的镜像并运行容器,通过这个例子,我们可以更加熟悉Dockerfile的编写,以及Docker镜像的相关操作。
文章参考了docker从安装到部署项目,一篇文章教会你。想要学习更多docker知识的小伙伴可以移步大佬的文章。

http://www.lryc.cn/news/438734.html

相关文章:

  • 国产视频转换HDMI1.4转单/双MIPI DSI/CSI LT6911C芯片方案,带音频输出,QFN64封装 Lontium
  • 亚马逊、沃尔玛、敦煌网、Target塔吉特、Temu环境搭建测评技术!
  • yjs05——matplotlib画其他图像
  • 【C#】添加临时环境变量
  • 物联网之ESP32与微信小程序实现指示灯、转向灯
  • ICPC网络赛 以及ACM训练总结
  • 优化深度学习模型训练过程:提升PASCAL VOC 2012数据集上Deeplabv3+模型训练效率的策略
  • 【乐吾乐大屏可视化组态编辑器】使用手册
  • uniapp+若依 开发租房小程序源码分享
  • 日系编曲:节奏吉他与主音吉他 吉他的节奏型 节奏吉他的编写思路 吉他的Riff
  • 【网络安全的神秘世界】目录遍历漏洞
  • 使用 SpringBoot 基础web开发的支持
  • nature reviews genetics | 细胞互作和通讯方法总结
  • AI 浪潮中的一体化数据库|外滩大会之OceanBase实录
  • Qt自定义按键实现长,短按
  • 禁用win10的自动更新功能
  • 机器学习 第12章 计算学习理论
  • 【雅特力AT32】外部中断事件控制器EXINT(附源码解析)
  • Redis集群_cluster
  • jdk相关介绍
  • 【GoMate框架案例】讯飞大模型RAG智能问答挑战赛top10 Baseline
  • 2024/9/15 408“回头看”之应用层小总结(下)
  • 经纬恒润高压电池管理系统,助力新能源汽车飞速发展
  • 一文速通calcite结合flink理解SQL从文本变成执行计划详细过程
  • spring-TransactionTemplate 编程式事务
  • 中考全国45套(全国教育发达地区中考试卷)
  • 嵌入式Linux学习笔记(5)-进程间常见通讯方式(c语言实现)
  • 【移动端】菜单的自动展开与收回
  • Java获取Object中Value的方法
  • 集群聊天服务器项目【C++】(二)Json的简单使用