Dockerfile创建镜像文件

news2024/11/15 10:52:18

Dockerfile

Docker镜像原理

Linux文件系统有bootfs和rootfs两部分组成

  • Docker镜像由特殊文件系统叠加

  • 最底端bootfs,使用宿主机bootfs

  • 第二次时rootfs,被称为基础镜像

  • 向上可以叠加其他镜像文件

  • 同一文件系统能将多层整合成一层,隐藏了多层存在

  • 镜像可以放置另一个镜像上面,位于下面的镜像成为父镜像

  • 当一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器

    在这里插入图片描述

镜像制作

  • 容器转为镜像

    镜像不能传输

    镜像可以转为压缩文件,然后再去传输

查看容器
[root@server ~]# docker ps -a
CONTAINER ID   IMAGE       COMMAND                   CREATED        STATUS                     PORTS                                       NAMES
8ef7a9d24cdd   mysql:5.6   "docker-entrypoint.s…"   13 hours ago   Exited (255) 3 hours ago   0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   c_mysql
   

把c_mysql转成镜像

[root@server ~]# docker commit 8ef7a9d24cdd mysql_iso
sha256:ee9adf5b156851692b4cf0fe6c25265ce9dc89924b3fc064935c859f875d1894
[root@server ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mysql_iso    latest    ee9adf5b1568   8 seconds ago   303MB
nginx        latest    605c77e624dd   16 months ago   141MB
redis        5.0       c5da061a611a   16 months ago   110MB
mysql        5.6       dd3b2a5dcb48   16 months ago   303MB
centos       7         eeb6ee3f44bd   19 months ago   204MB



把镜像压缩 可以传输给别人

[root@server ~]# docker save -o mysql_iso.tar mysql_iso
[root@server ~]# ll
总用量 300448
-rw-------. 1 root root      1241 424 13:04 anaconda-ks.cfg
drwxr-xr-x. 2 root root        50 56 19:41 data
drwxr-xr-x. 5 root root        42 57 00:50 mysql
-rw-------. 1 root root 307652096 57 13:39 mysql_iso.tar


 把mysql_iso删除,通过压缩文件还原成镜像


[root@server ~]# docker rmi mysql_iso
Untagged: mysql_iso:latest
Deleted: sha256:ee9adf5b156851692b4cf0fe6c25265ce9dc89924b3fc064935c859f875d1894
Deleted: sha256:bde6bf72f86d605ec4185f4e7b6686b27a4704219760871f1cdedeff2f41b607




 
[root@server ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   16 months ago   141MB
redis        5.0       c5da061a611a   16 months ago   110MB
mysql        5.6       dd3b2a5dcb48   16 months ago   303MB
centos       7         eeb6ee3f44bd   19 months ago   204MB

还原镜像
 [root@server ~]# docker load -i mysql_iso.tar
01bd5c6edefd: Loading layer  6.656kB/6.656kB
Loaded image: mysql_iso:latest
[root@server ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
mysql_iso    latest    ee9adf5b1568   10 minutes ago   303MB
nginx        latest    605c77e624dd   16 months ago    141MB
redis        5.0       c5da061a611a   16 months ago    110MB
mysql        5.6       dd3b2a5dcb48   16 months ago    303MB
centos       7         eeb6ee3f44bd   19 months ago    204MB


 通过这个镜像来运行一个新容器
[root@server ~]# docker run -id --name=c_mysql_n mysql_iso bash
[root@server ~]# docker exec -it c_mysql_n /bin/bash
root@97c993b5e148:/# 








  • dockerfile

概念

  • 文本文件

  • 包含了一条条指令

  • 每一条指令构建一层,基于基础镜像,最终构建出新镜像

Docker自定义centos7镜像

要求

  • 默认登录路径为/usr

  • 可以使用vim

查看镜像


[root@server ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   16 months ago   141MB
tomcat       latest    fb5657adc892   16 months ago   680MB
redis        5.0       c5da061a611a   16 months ago   110MB
mysql        5.6       dd3b2a5dcb48   16 months ago   303MB
centos       7         eeb6ee3f44bd   19 months ago   204MB 



 [root@server ~]# docker run -id --name=my_c centos:7
8cace6a4806c37f2c14d4b2779ff863087e8525959fc85238b023786f799cc5f
[root@server ~]# docker exec -it my_c bash
[root@8cace6a4806c /]# ll
total 12
-rw-r--r--.   1 root root 12114 Nov 13  2020 anaconda-post.log
lrwxrwxrwx.   1 root root     7 Nov 13  2020 bin -> usr/bin
drwxr-xr-x.   5 root root   340 May  7 06:56 dev
drwxr-xr-x.   1 root root    66 May  7 06:56 etc
drwxr-xr-x.   2 root root     6 Apr 11  2018 home
lrwxrwxrwx.   1 root root     7 Nov 13  2020 lib -> usr/lib
lrwxrwxrwx.   1 root root     9 Nov 13  2020 lib64 -> usr/lib64
drwxr-xr-x.   2 root root     6 Apr 11  2018 media
drwxr-xr-x.   2 root root     6 Apr 11  2018 mnt
drwxr-xr-x.   2 root root     6 Apr 11  2018 opt
dr-xr-xr-x. 125 root root     0 May  7 06:56 proc
dr-xr-x---.   2 root root   114 Nov 13  2020 root
drwxr-xr-x.  11 root root   148 Nov 13  2020 run
lrwxrwxrwx.   1 root root     8 Nov 13  2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root     6 Apr 11  2018 srv
dr-xr-xr-x.  13 root root     0 May  7 05:08 sys
drwxrwxrwt.   7 root root   132 Nov 13  2020 tmp
drwxr-xr-x.  13 root root   155 Nov 13  2020 usr
drwxr-xr-x.  18 root root   238 Nov 13  2020 var
[root@8cace6a4806c /]# cd ~
[root@8cace6a4806c ~]# vim tmp.txt
bash: vim: command not found

这里没有安装vim


根据需求编写Dockerfile

  • 定义父镜像:FROM centos:7

  • 定义作者信息:MAINAINER

  • 执行安装vim命令:RUN yum install -y vim

  • 定义默认工作路径:WORKDIR:/usr

  • 定义容器启动后执行命令:CMD /bin/bash


清空所有容器

[root@server ~]# docker stop $(docker ps -aq)
8cace6a4806c
[root@server ~]# docker rm $(docker ps -aq)
8cace6a4806c
 

[root@server ~]# mkdir docker-files
[root@server ~]# cd docker-files/
[root@server docker-files]# ll
总用量 0
 
 [root@server docker-files]# vim centos_dockerfile
[root@server docker-files]# cat centos_dockerfile
FROM centos:7
MAINTAINER rkun18

RUN yum install -y vim
WORKDIR /usr

CMD /bin/bash
[root@server docker-files]# docker build -f ./centos_dockerfile -t my_centos:1 .

[+] Building 497.0s (7/7) FINISHED
 => [internal] load build definition from centos_dockerfile                          0.1s
 => => transferring dockerfile: 188B                                                 0.0s
 => [internal] load .dockerignore                                                    0.0s
 => => transferring context: 2B                                                      0.0s
 => [internal] load metadata for docker.io/library/centos:7                          0.0s
 => [1/3] FROM docker.io/library/centos:7                                            0.0s
 => [2/3] RUN yum install -y vim                                                   494.9s
 => [3/3] WORKDIR /usr                                                               0.0s
 => exporting to image                                                               1.9s
 => => exporting layers                                                              1.9s
 => => writing image sha256:d110499cc5a06e4e74ea2b4c84b70ab745f7932ae6d1b54f4eb78f4  0.0s
 => => naming to docker.io/library/my_centos:1                                       0.0s
[root@server docker-files]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
my_centos    1         d110499cc5a0   About a minute ago   468MB
nginx        latest    605c77e624dd   16 months ago        141MB
tomcat       latest    fb5657adc892   16 months ago        680MB
redis        5.0       c5da061a611a   16 months ago        110MB
mysql        5.6       dd3b2a5dcb48   16 months ago        303MB
centos       7         eeb6ee3f44bd   19 months ago        204MB



  • 创建容器测试是否满足需求
[root@server ~]# docker run -id --name=c1 my_centos:1
821adf3c8a63d30daad86b759f2a7f5a021c0bb461700974e47ff43c1871fd5c
[root@server ~]# docker exec -it c1 /bin/bash
[root@821adf3c8a63 usr]# vim test.txt  直接进入usr目录 并且可以使用vim
[root@821adf3c8a63 usr]# cat test.txt
hello docker
[root@821adf3c8a63 usr]# exit
exit

 

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

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

相关文章

智能优化算法:鱼鹰优化算法-附代码

智能优化算法:鱼鹰优化算法 文章目录 智能优化算法:鱼鹰优化算法1. 鱼鹰优化算法1.1 初始化1.2 阶段一:定位和捕鱼(探索阶段)1.3 阶段二:把鱼带到合适的位置(开发阶段) 2.实验结果3.…

RISC-V U-Boot 启动 Linux 内核的参数

RISC-V U-Boot 启动 Linux 内核的参数 U-Boot (the Universal Boot Loader简写U-Boot) flyfish U-Boot 启动Linux内核的参数举例说明 RISC-V U-Boot 启动 Linux 内核的参数方式一 文本操作earlyprintksunxi-uart,0x02500000clk_ignore_unusedconsolettyS0,115200init/sbin/i…

go-resiliency源码解析之-batcher

go-resiliency源码解析之-batcher 源代码地址 : https://github.com/eapache/go-resiliency/blob/master/batcher/batcher.go 1.batcher定义 创建一个batch对象需要2个参数: Timeout:超时,这是一个batch对象收集输入参数的时间。 work函数变量:在ti…

使用Jumpserver+Frp集中管理远程内网服务器

我们设想这样一种情况,我们是一家小公司,在全国有几个小分支办公机构,每个机构有一台服务器,由于公司财务紧张,买不起专线,用的也是普通家用宽带,SD-WAN设备说实话也挺贵的,那么我们…

Docker部署MySQL主从复制架构

文章目录 1、准备工作2、下拉镜像,启动容器3、编辑 MySQL 主节点配置4、编辑 MySQL 从节点配置5、通过 Navicat 配置主节点6、通过 Navicat 配置从节点7、最终测试 1、准备工作 云服务器(虚拟机也可以)安装Docker,参考该文章第1小…

Telnet 【实验】

1 什么是Telnet? Telnet是进行远程登录的标准协议,它是当今Internet上应用最广泛的协议之一。它把用户正在使用的终端或计算机变成网络某一远程主机的仿真终端,使得用户可以方便地使用远程主机上的软、硬件资源。 为什么需要telnet&#xf…

python自动化程序操作浏览器在后台访问网站

目录 1、简介2、详细步骤3、驱动3.1、ChromeDriver3.2、GeckoDriver3.3、Microsoft WebDriver3.4、下载链接 4、完整代码 ⭐在当今信息化的时代,访问网站已经成为人们生活中必不可少的一部分。 1、简介 对于某些需要批量访问网站的任务,手动访问既费时又…

Java - Thread、ThreadLocal、ThreadLocalMap

一、概念 用处每个线程需要持有自己单独的数据,数据在同线程中被多个地方共享,但多线程中不共享。原理创建 ThreadLocal 对象用来存取值,操作的是 CurrentThread 里的 ThreadLocalMap,由于每个 Thread 中都有自己的 ThreadLocalM…

Codeforces Round 870 (Div. 2)

Codeforces Round 870 (Div. 2) A. Trust Nobody 题意: 给你一个数组a,a[i]表示第i个人认为至少有a[i]个人说谎,请你找到正确的说谎人数 思路: 我们认为说谎人数有x人,那么数组a中大于x的元素都是说谎,…

rosbag相关操作

一些很好用的网站 时间戳在线转换网页 旋转矩阵、四元数、绕轴旋转、欧拉角在线转换网页 四元数、欧拉角可视化在线转换网页 一、按时间截取bag 使用如下代码&#xff1a; rosbag filter 原始包名.bag 截取后的包名.bag "t.to_sec() > 开始时间 and t.to_sec() <…

机器学习随记(3)— Softmax

Softmax 与sigmoid不同&#xff0c;softmax可以多个输出&#xff0c;每个输出以概率的形式表示。 或者 def my_softmax(z):ez np.exp(z) sm ez/np.sum(ez)return(sm) 1 损失函数Loss Softmax 相关的损失函数&#xff0c;即交叉熵损失&#xff1a; 2 成本函数Cos…

Vben Admin 自学记录 —— 路由跳转的基本使用及练习(持续更新中...)

路由 项目路由配置存放于 src/router/routes 下面。 src/router/routes/modules用于存放路由模块&#xff0c;在该目录下的文件会自动注册。 路由相关使用及概念 练习 —— 在之前table基础上&#xff0c;添加新增功能&#xff0c;点击新增按钮&#xff0c;跳转页面&#xf…

电脑中病毒了怎么修复、怎么办,计算机windows系统如何预防faust勒索病毒

随着科技技术的不断发展&#xff0c;计算机已经成为现代人工作和生活中的必备工具之一&#xff0c;同时衍生出的各种计算机病毒也越来越多。各种勒索家族的加密病毒程序不断升级&#xff0c;给我们的工作和生活带来了极大困扰&#xff0c;特别是最近爆发的一种新型计算机病毒—…

如何优化 yolov8 模型,压缩模型大小,部署到边缘设备上

在CV领域&#xff0c;YOLO系列目标检测模型是一种非常流行的深度学习网络模型。yolov8是23年1月10号开源的最新版本。虽然YOLOv8已经在精度和速度方面取得了显著的改进&#xff0c;但我们仍然可以从轻量化角度等很多方面来进一步优化该模型。 模型压缩&#xff1a;使用轻量化的…

华为EC6108V9A_RK3128_安卓4.4.4_卡刷固件包-内有教程-当贝纯净桌面

华为EC6108V9A_RK3128_安卓4.4.4_卡刷固件包-内有教程-当贝纯净桌面 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内置的没用的软件&a…

不用花一分钱!!!获得一个自己的网页版chatGPT

不用花一分钱&#xff01;&#xff01;&#xff01;获得一个自己的网页版chatGPT 当然还是需要一个chatGPT账号的&#xff0c;不会注册的同学可以看一下这篇文章 chatGPT到底要怎么注册 那就先让我们看一下效果吧 chatgpt-web介绍 github项目地址 https://github.com/Chanzha…

【源码解析】实现异步功能的注解 @Async 的源码解析

使用方式 启动类上添加注解EnableAsync()在方法或者类上添加Async 源码解析 初始化配置 EnableAsync注入了AsyncConfigurationSelector Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Import(AsyncConfigurationSelector.class) public interf…

【郭东白架构课 模块二:创造价值】23|节点四:架构规划之统一语义

你好&#xff0c;我是郭东白。从这节课开始&#xff0c;我们就进入到架构活动的第四个环节——架构规划。这个环节比较复杂&#xff0c;可以分为四个部分&#xff1a;统一语义、需求确认、边界划分和规划确认。这节课我们先来讲统一语义。 架构师的工作日常就是跟不同的角色沟…

Mysql索引(4):索引语法

1 创建索引 CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name (index_col_name,... ) ; 2 查看索引 SHOW INDEX FROM table_name; 3 删除索引 DROP INDEX index_name ON table_name; 4 案例演示 先来创建一张表 tb_user&#xff0c;并且查询测试数据。 creat…

从零开始学习Linux运维,成为IT领域翘楚(九)

文章目录 &#x1f525;Linux系统服务&#x1f525;Linux系统定时任务 &#x1f525;Linux系统服务 Service命令 服务(service) 本质就是进程&#xff0c;但是是运行在后台的&#xff0c;通常都会监听某个端口&#xff0c;等待其它程序的请求&#xff0c;比如(mysql , sshd 防…