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 main

import (
	"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知识的小伙伴可以移步大佬的文章。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/874764.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YoloV10改进策略:上采样改进|动态上采样|轻量高效,即插即用(适用于分类、分割、检测等多种场景)

摘要 本文使用动态上采样改进YoloV10,动态上采样是今天最新的上采样改进方法,具有轻量高效的特点,经过验证,在多个场景上均有大幅度的涨点,而且改进方法简单,即插即用! 论文:《DySample:Learning to Upsample by Learning to Sample》 论文:https://arxiv.org/pdf/…

老旧电力系统安全隐患增加 该如何预防电气线路老化等因素引发的电气火灾呢?

为应对我国电气火灾事故频发的挑战,安科瑞电气股份有限公司开发了AcrelCloud-6000安全用电管理云平台。这一平台依托移动互联网和云计算技术,结合物联网传感器,将办公楼、学校、医院、工厂、体育场馆、宾馆及福利院等人员密集场所的电气安全数…

0x07 Nginx越界读取缓存漏洞 CVE-2017-7529 复现

参考: Nginx越界读取缓存漏洞 CVE-2017-7529 | PeiQi文库 (wgpsec.org)Nginx越界读取缓存漏洞(CVE-2017-7529)复现分析 - qweg_focus - 博客园 (cnblogs.com) 一、fofa 搜索 nginx && port"80" 我这里写了个脚本将ip保存…

启明云端乐鑫代理商,乐鑫ESP32无线芯片方案,物联网设备WiFi联动控制

随着智能和远程技术的飞速发展,物联网(IoT)逐渐出现在我们生活的每一个角落。乐鑫以其创新的无线通信技术,正成为智能家居、工业自动化和医疗设备等领域的推动者。 无线WiFi芯片模组不仅提供了强大的数据处理能力,还赋予了设备以直观的交互方…

Web 基础——Apache

Event Worker 的升级版、把服务器进程和连接进行分析,基于异步 I/O 模型。 请求过来后进程并不处理请求,而是直接交由其它机制来处理,通过 epoll 机制来通知请求是否完成; 在这个过程中,进程本身一直处于空闲状态&am…

Qt常用控件——QLCDNumber

文章目录 QLCDNumber核心属性倒计时小程序倒计时小程序相关问题 QLCDNumber核心属性 QLCDNumber是专门用来显示数字的控件,类似于这样: 属性说明intValue获取的数字值(int).value获取的数字值(double)和intValue是联动的例如value设为1.5,in…

第十一周:机器学习

第十一周周报 摘要Abstract机器学习1. 注意力机制(下)1.1 multi-head self-attention(多头注意力机制)1.2 Positional Encoding(位置编码)1.3 truncated self attention(截断式注意力机制&#…

即插即用篇 | YOLOv8 引入高效的直方图Transformer模块 | 突破天气障碍:Histoformer引领高效图像修复新路径“

本改进已同步到YOLO-Magic框架! 摘要:摘要。基于Transformer的恶劣天气图像修复方法取得了显著进展。大多数方法通过沿通道维度或在空间上固定范围的块内使用自注意力,以减少计算负担。然而,这种折中方式在捕获长距离空间特征方面存在局限性。受到恶劣天气导致的退化因素主…

黑马点评18——多级缓存-OpenResty

文章目录 安装OpenRestyOpenResty快速入门OpenResty获取请求参数封装Http请求向Tomcat发送http请求根据商品id对tomcat集群负载均衡Redis缓存预热查询Redis缓存Nginx本地缓存 安装OpenResty 安装参考博客 OpenResty快速入门 nginx是没有业务能力的,我们是把请求转发…

NLP基础及其代码-BERT系列

1.基础知识 BERT系列RoBERTa ALBERT ERINE详解与使用学习笔记-腾讯云开发者社区-腾讯云 (tencent.com) 2.BERT 分词:wordpiece 预训练: mask:选择15%的分词进行mask(80%mask 10%随机替换分词 10%分词保持不变) NSP…

替换传统数据处理平台,TDengine 与华风数据达成合作

在全球能源转型的大背景下,新能源产业正迎来前所未有的发展机遇。随着国家对可再生能源的政策支持和市场需求的不断增长,风电、光伏和储能等新能源项目如雨后春笋般蓬勃发展。然而,随之而来的数据处理与管理挑战也日益凸显。面对海量的设备运…

构建常态化安全防线:XDR的态势感知与自动化响应机制

当前,网络安全威胁日益复杂多变,企业正面临前所未有的严峻挑战。为有效应对这些挑战,态势感知与自动化响应机制在提升网络安全运营效率与防御效果中扮演着至关重要的角色。它们能够实时监测网络状态,智能分析潜在威胁,…

Spring Cloud之二 微服务注册

1&#xff1a;Intellij 新建服务 user-service 2&#xff1a;pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"…

[leetcode-python]杨辉三角2

给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1]示例 2: 输入: rowIndex 0 输出: [1]示例 3: 输入: rowIndex 1 输出: [1,1]提示…

如何将 Electron 项目上架 Apple Store

前言 Electron 是一个开源框架,它允许开发者使用 Web 技术(HTML、CSS 和 JavaScript)来构建跨平台的桌面应用程序。 Electron 应用程序可以运行在 Windows、macOS 和 Linux 上,为用户提供了一种统一的方式来开发和维护软件。 本文将探讨如何将 Electron 构建的桌面应用程…

CTF——简单的《WEB》

文章目录 一、WEB1、easysql2、baby_web3、baby_sql4、upload_easy5、easygame拓展1.1拓展1.2 6、ht_ssti7、包容乃大 一、WEB 1、easysql 题目描述&#xff1a; sql注入漏洞 1.常用的sql注入测试语句 2.sql注入bypass 解题思路 这边提示基本给的也很完整的&#xff0c;不…

【Linux】Linux介绍及CentOS虚拟机环境搭建

内容大纲介绍 文章目录 内容大纲介绍1.计算机简介2.Linux系统介绍3.虚拟化软件介绍4.Linux环境搭建5.扩展_虚拟机的快照6.Linux的目录介绍 1.计算机简介 概述 全称叫电子计算机, 英文名叫Computer, 俗称叫: 电脑, 简称叫: PC, 就是有硬件和软件组成的电子设备. 组成 计算机硬件…

QGis二次开发 —— 3、程序加载栅格tif与矢量shp文件可进行切换控制,可进行导出/导入工程(附源码)

效果 功能说明 软件可同时加载.tif栅格图片与.shp矢量图片、加载图片后可进行自由切换查看图层、可对加载的图片进行关闭 关闭后清空图层、可对加载的图片进行导出.qgs的QGIS工程、可对.qgs的QGis工程导入并导入后可进行自由切换查看图层。 源码 注意: 在加载tif栅格文件后会在…

华为 HCIP-Datacom H12-821 题库 (16)

1.需要题库的小伙伴至博客最下方添加微信公众号关注后回复题库 2.有兴趣交流IT问题的小伙伴微信公众号回复交流群&#xff0c;加入微信IT交流群 1. OSPF 邻居关系建立出现故障&#xff0c;通过 display ospf error 命令来检查&#xff0c;输出结果如图所示&#xff0c;根据图中…

OceanBase 4.x 存储引擎解析:如何让历史库场景成本降低50%+

据国际数据公司&#xff08;IDC&#xff09;的报告显示&#xff0c;预计到2025年&#xff0c;全球范围内每天将产生高达180ZB的庞大数据量&#xff0c;这一趋势预示着企业将面临着更加严峻的海量数据处理挑战。随着数据日渐庞大&#xff0c;一些存储系统会出现诸如存储空间扩展…