dockerfile定制镜像 docker-compose编排容器

1 dockerfile

dockerfile本质上是利用了Linux系统的挂载(UnionFS),将多个目录挂载到同一目录下,实现镜像的层叠式结构,从而实现功能聚合。

1.1 一个最简单的程序

package mainimport "fmt"func main() {fmt.Println("wish you good luck everyday!")
}

go build main.go编译生成二进制文件。

1.2 编写dockerfile文件

vim dockerfile

FROM ubuntu
ENV MYPATH=/usr/local
WORKDIR $MYPATH
ADD main ./
CMD ./main && tail -f /dev/null

解释:基于ubuntu镜像,设置落脚点目录为/usr/local,将当前目录的main文件添加到落脚点目录,最后指定容器启动时的执行命令。
这里加了tail -f /dev/null是为了防止容器退出,正常容器里会启动一个不会退出的服务进程,mysql、redis、web等等。

1.3 定制镜像

docker build -f dockerfile -t main .
在这里插入图片描述

1.4 生成容器

docker run -d --name main main
在这里插入图片描述
-d表示后台运行,–name指定容器名,后续可通过docker rename进行修改。

通过查询容器日志发现确实打印了输出语句:在这里插入图片描述

1.5 进入容器

docker exec -it main bash
通过docker attach也能进入容器,个人偏向于exec,因为exit会导致前者的容器退出,而后者不受影响。

可以看到,当前落脚点就是/usr/local
在这里插入图片描述

2 docker-compose

docker-compose用于批量编排容器,通过yaml脚本可以快速编排出大量容器。
还是用上面的例子,以及定制好了main镜像:
在这里插入图片描述

2.1 编写docker-compose.yaml

version: "3"
services:lucky_node:image: maincontainer_name: lucky_nodevolumes:- /usr/local/log.txt:/usr/local/log.txtcommand:- /bin/bash- -c- |./main > log.txttail -f /dev/null

解释:编排名称为lucky_node容器,image指定依赖的镜像,volumes用来做容器数据卷,简单来说就是实现容器内外文件的对应,确保容器内的数据文件在宿主机上有完全相同份。command指定容器启动时的命令,这里执行main文件将输出结果重定向到log.txt文件中,由于容器数据卷的缘故,在本机的/usr/local目录应该可以看到对应的log.txt文件以及输出结果。
一个最简单的yaml模板:

version: "3" 
services:service_name:image: 镜像名		container_name: 容器名ports: - 本地端口号:容器端口号    # 端口映射volumes: - 本地路径:容器内路径      # 容器数据卷command: 容器启动时要执行的命令 

2.2 编排容器

docker-compose up -d在这里插入图片描述

2.3 查看log.txt

可以看到宿主机上和容器内都有一份log.txt文件,并且有main执行输出的结果。
在这里插入图片描述
docker-compose down -v删除该容器:
在这里插入图片描述在这里插入图片描述
可以看到宿主机的log.txt仍然存在,即使容器宕机,设置了容器数据卷的文件依然保留在宿主机上,避免数据的丢失。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4.Redis数据结构通用命令

Redis数据结构 Redis是一个键值对的数据库。 key:大多都是String value: 类型多种多样 Redis通用命令 keys :查看所有的key 不建议在生产环境上使用keys命令,因为redis是单线程的,keys命令会搜索很长一段时间,搜索的期间redi…

Java I/O (Input/Output)——文件字节流

博客主页:誓则盟约系列专栏:Java SE 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Java I/O 简介 Java I/O(输入/输出)是 Java 程序中…

[C++] 模板进阶:特化与编译链接全解析

文章目录 非类型模板类型形参非类型模板参数代码示例 **模板的特化**为什么要有模板的特化函数模板特化使用场景与示例函数模板特化的实现细节 类模板特化全特化示例 偏特化部分优化通过进一步限制模板参数进行特化偏特化为指针类型示例:偏特化为引用类型示例&#…

menuconfig+Kconfig的简单配置

目录 1.背景 2.管理方案 2.1:.h中直接定义 2.2:.batCmake 2.3:Kconfig 2.3.1 环境安装 2.3.2 代码 2.3.2.1 目录结构 2.3.2.2 ble目录下的Kconfig 2.3.2.3 hardware目录下的Kconfig 2.3.2.4 rtos目录下的Kconfig 2.3.2.5 根目录 …

申请专利需要准备哪些材料?

申请专利需要准备哪些材料?

实践致知第17享:电脑忽然黑屏的常见原因及处理方法

一、背景需求 小姑电话说:最近,电脑忽然就黑屏了(如下图所示),但是等待几十秒甚至一分钟,电脑就能自然恢复了,这种状况一天能出现三四次,怎么办? 二、分析诊断 电脑黑屏…

keeplive配置详解与haproxy配置详解

一、keepalive相关知识 1.1 keepalive介绍 keepalive即LVS集群当中的高可用架构,只是针对调度器的高可用。是高可用的HA架构。 keepalive就是基于VRRP协议来实现LVS高可用的方案。 1、组播地址 224.0.0.18,根据组播地址进行通信,主备之间发…

Java多线程-----定时器(Timer)及其实现

目录 一.定时器简介: 二.定时器的构造方法与常见方法: 三.定时器的模拟实现: 思路分析: 代码实现: 在开发中,我们经常需要一些周期性的操作,例如每隔几分钟就进行某一项操作,这…

标准IO——文件定位、文件IO

续:feof、ferror(检测一个流是否出错)、clearerr(清除一个流出错的标记)。 一、标准IO文件定位 1、fseek(定位) int fseek(FILE *stream , long offset(偏移长度) , int whence(偏移起始位置)) 其中when…

阿里云SMS服务C++ SDK编译及调试关键点记录

一. 阿里云SMS服务开通及准备工作 在阿里云官网上完成这部分的工作 1. 申请资质 个人or企业 我这里是用的企业资质 2. 申请签名 企业资质认证成功后,会自动赠送一个用于测试的短信签名 也可以自己再进行申请,需要等待审核。 3. 申请短信模板 企…

还没用过OBS Studio?快来提升你的技术分享效率!

前言 在浩瀚的数字海洋中,有这么一款神器,它低调却光芒四射,默默改变着无数内容创作者的命运;嘿,你猜怎么着?它既不是天价的专业设备,也不是遥不可及的神秘黑科技,而是开源世界的瑰宝…

本地Gitlab-runner自动编译BES项目

0 Preface/Foreword 1 Gitlab-runner配置情况 具体情况如下: Gitlab-ruuner运行在wsl 1中的Ubuntu 18.04 distro上专门为GitLab-runner分配了一个用户,名为gitlab-runner 2 自动编译 2.1 找不到编译工具链 根据错误提示,交叉编译工具链未找…

深入理解接口测试:实用指南与最佳实践(四)IHRM管理系统实战-项目分析

​ ​ 您好,我是程序员小羊! 前言 这一阶段是接口测试的学习,我们接下来的讲解都是使用Postman这款工具,当然呢Postman是现在一款非常流行的接口调试工具,它使用简单,而且功能也很强大。不仅测试人员会使用…

牛!手机上轻松部署大模型全攻略!

当前AI革命中,大模型发挥关键角色,其理论基础在于Scaling Law。简单来说就是,随着数据、参数和计算能力的提升,模型能力增强,展现出小规模模型所不具备的“涌现能力”。众多AI企业推出开源大模型,规模按扩展…

红黑树的概念和模拟实现[C++]

文章目录 红黑树的概念一、红黑树的性质红黑树原理二、红黑树的优势和比较 红黑树的模拟实现构建红黑树的数据结构定义节点的基本结构和初始化方式插入新节点插入新节点的颜色调整颜色和结构以满足红黑树性质 红黑树的应用场景 红黑树的概念 一、红黑树的性质 红黑树是一种自平…

Redis系列之Redis Sentinel

概述 Redis主从集群,一主多从模式,包括一个Master节点和多个Slave节点。Master负责数据的读写,Slave节点负责数据的查询。Master上收到的数据变更,会同步到Slave节点上实现数据的同步。通过这种架构实现可以Redis的读写分离&…

工具|阅读PDF时鼠标显示为小手中有向下箭头解决方法

由于工作中,会大量阅读PDF文档,如手册,规格书,各种图纸等,因此好用的PDF工具必不可少。我主要习惯用福昕阅读器,标注比较方便。 所以,本文主要以福昕阅读器为主,当然也适用于其他的阅…

Docker Volume(存储卷)

一、认识 1.1 概念 存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这意味着,在容器中的这个目录下写入数据时,容器会将内容直接写入到宿主机上与此容器建立了绑定关系的目录 在宿主机上的这个…

实验8-1-6 在数组中查找指定元素

本题要求实现一个在数组中查找指定元素的简单函数。 函数接口定义: int search( int list[], int n, int x );其中list[]是用户传入的数组;n(≥0)是list[]中元素的个数;x是待查找的元素。如果找到 则函数search返回…

基于Golang实现Kubernetes边车模式

本文介绍了如何基于 Go 语言实现 Kubernetes Sidecar 模式,并通过实际示例演示创建 Golang 实现的微服务服务、Docker 容器化以及在 Kubernetes 上的部署和管理。原文: Sidecar Pattern with Kubernetes and Go[1] 在这篇文章中,我们会介绍 Sidecar 模式…