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

news2024/9/22 5:40:08

1 dockerfile

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

1.1 一个最简单的程序

package main

import "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: main
                container_name: lucky_node
                volumes:
                        - /usr/local/log.txt:/usr/local/log.txt
                command:
                        - /bin/bash
                        - -c
                        - |
                                ./main > log.txt
                                tail -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.coloradmin.cn/o/1972441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【leetcode详解】覆盖所有点的最少矩形数目(C++思路详解)

思路详解: 0. 题目情境并未限制矩形高度,故矩形数目的判断只和点的横坐标有关 1. 为了不重不漏地考虑到所有点,故笔者选择首先将二维数组中的点按横坐标的大小排序 //说明:本来笔者以为需要自定义sort排序,后来发现…

智慧水务项目(三)django(drf)+angular 18 创建系统管理的用户、角色、部门、权限管理等model

一、说明 添加各model 添加requirement.txt中的库 添加env.py中的动态配置 二、env.py全文 import os from smartwater.settings import BASE_DIR# # # ************** mysql数据库 配置 ************** # # # # 数据库地址 DATABASE_ENGINE "django.db.backends.…

SQL查询注意事项

判断字符串长度要用函数CHAR_LENGTH(str),他会返回字符串的长度,如果使用length(str)函数,在对中文字符或特殊字符时,返回的是在当前编码下该字符的字节数。如在mysql中的utf-8编码情况下,length(¥)返回结果…

ASUS/华硕幻14 2021 GA401Q系列 原厂win10系统 工厂文件 带F12 ASUS Recovery恢复

华硕工厂文件恢复系统 ,安装结束后带隐藏分区,一键恢复,以及机器所有驱动软件。 系统版本:windows10 原厂系统下载网址:http://www.bioxt.cn 需准备一个20G以上u盘进行恢复 请注意:仅支持以上型号专用…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-62 - 判断元素是否可操作

软件测试微信群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 有些页面元素的生命周期如同流星一闪,昙花一现。我们也不知道这个元素在没在页面中出现过,为了捕获这一美好瞬间,让其成为永恒。我们就来判…

HiFi桌搭的新选择,更符合发烧友使用习惯的飞傲K19

飞傲的便携设备很多人都用过,性价比很高,设计也很精致,并且功能上针对不同的需求也有丰富的选择,而在针对耳机的台式设备方面,飞傲同样非常有实力,我最近用了一款飞傲K19,这台设备不仅功能完备&…

ZYNQ SDK/Vitis undefined reference to `sin‘ wave.c

问题 ZYNQ SDK或者VItis在使用到sin函数时编译报错: undefined reference to sin wave.c问题解决: 右键点开C/C Build Settings 选项 在Settings 选项的Libraries 添加 m,点击OK

用Java手写jvm之模拟运行时数据区的虚拟机栈,局部变量表,操作数栈等

写在前面 下图是jvm的运行时数据区内存图: ,本文要模拟的是虚拟机栈的相关内存结构的交互过程。 1:正文 因为我们这里模拟的是线程执行方法调用的过程,所以这里先来定义一个线程对象: public class Thread {// 程…

卸载Windows软件的正确姿势,你做对了吗?

前言 今天有小伙伴突然问我:她把软件都卸载了,但是怎么软件都还在运行? 这个问题估计很多小伙伴都是遇到过的,对于电脑小白来说,卸载Windows软件真的真的真的是一件很难的事情。所以,今天咱们就来讲讲&am…

springboot贫困生认定和资助管理系统-计算机毕业设计源码71367

摘要 本文介绍了一个基于Java的贫困生认定和资助管理系统的设计与实现。该系统旨在通过自动化、智能化的管理方式,提高贫困生认定和资助工作的效率与准确性。系统采用Java作为主要开发语言,结合了数据库技术和Web开发技术,实现了贫困生信息的…

运维之路----计算机基础

目录 ​编辑 一,计算机的组成 1,硬件 2,软件 二,计算机中的一些概念 冯诺依曼体系 二进制 摩尔定律 计算机的分类 1,按照规模分 2,按照功能分 拓扑 存储器的层次结构 并行与并发 缓存 操作系…

实例分割-Yolact/Yolact++训练自己数据集

前言 本文主要用于记录实例分割模型yolact和yolact的环境配置,以及成功训练自己数据集的整个过程~ 注意:这里要重点提醒一下,DCNv2对RTX系列不友好,我第一次使用4090服务器,编译持续有问题,被迫放弃&#…

C++|设计模式(八)|⭐️工厂模式?错!是工厂模式群!

本文内容全部来源于B站,仅做个人学习使用: 【工厂模式?错!是工厂模式群!】 在此之前,笔者曾经发过两篇关于工厂模式的博客: C|设计模式(二)|简单…

软件测试---Jmeter

一、简介 二、安装与启动 (1)安装 安装包:通过百度网盘分享的文件:jmeter环境.rar 链接:https://pan.baidu.com/s/1OB0IP3W7hqUjAGj_5F56sQ

vue3 自定义指令 自动获取节点的width 和 height

想写一个依赖库, 但是需要监听组件的width和height这些数据, 就找到了ResizeObserver这个方法,不想每次使用的时候都要创建和销毁 ResizeObserver, 索性就直接封装成为一个指令用来获取想要的信息, ResizeObserver对象上能够获取的信息还是非常多的, 除了width, height 还有 to…

一篇文章讲明白Ldraw(乐高模型)的格式文件说明

最好将文章内容保存下来 https://ldraw.org/article/218.html 乐高模型是非常有意思的模型,弄明白了它的模型构造,也就懂了三维模型的构造,原理都是相通的。

如何在行空板上运行 YOLOv10n?

YOLOv10介绍 YOLO(You Only Look Once)系列是当前最主流的端侧目标检测算法,由Joseph Redmon等人首次提出,并随着时间发展,已经推出了多个版本,每个版本“似乎”都在性能和速度上有所提升。 本文为大家介绍…

【前端编程小白】的HTML从零入门到实战

之前有高中毕业生读了博客,想让我帮他找一些前端入门的内容,他们报的计算机专业,想利用开学前夕学习一下,我给他推荐了一些菜鸟教程呀什么的。后来想,看来还是很多人需要一些更加入门的可成的,而且很多教程…

24年电赛——自动行驶小车(H题)基于 CCS Theia -陀螺仪 JY60 代码移植到 MSPM0G3507(附代码)

前言 只要搞懂 M0 的代码结构和 CCS 的图形化配置方法,代码移植就会变的很简单。因为本次电赛的需要,正好陀螺仪部分代码的移植是我完成的。(末尾附全部代码) 一、JY60 陀螺仪 JY60特点 1.模块集成高精度的陀螺仪、加速度计&…