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

Dockerfile创建镜像文件

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 rkun18RUN yum install -y vim
WORKDIR /usrCMD /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.lryc.cn/news/65410.html

相关文章:

  • javascript中的严格模式
  • (二)【平衡小车制作】电机驱动(超详解)
  • 快速了解车联网V2X通信
  • 「Codeforces」D. Infinite Set
  • 项目---基于TCP的高并发聊天系统
  • iOS热更新-8种实现方式
  • R语言 | 编写自己的函数
  • 【Java校招面试】基础知识(七)——数据库
  • MySQL高级--锁
  • Maven(六):Maven的使用——继承与聚合
  • Java ---System类
  • 代码随想录_贪心_leetcode 406 452
  • C++类的静态成员详解:成员函数非静态成员函数的非法调用
  • Qt之滑动条和进度条(QSlider、QProgressBar)
  • Flutter之插件开发plugin
  • asp.net基于web的音乐管理网站dzkf17A9程序
  • itop-3568开发板驱动学习笔记(25)设备树(四)GPIO 实例分析
  • 函数(定义、返回值、调用、参数)
  • 28. Kubernetes 核心组件讲解——API Server
  • springboot框架开发医院云HIS 住院医生站、住院护士站功能实现
  • 高性能定时器介绍及代码逐行解析--时间堆
  • 汇编语言学习笔记五
  • Linux下的epf 是什么?
  • 如何在广告形式选择上化解用户厌恶和变现瓶颈?
  • 【Android入门到项目实战-- 9.2】—— 传感器实战使用教程(靠近黑屏和计步器)
  • 软件项目生命周期模型
  • linux系统TP-ti,tsc2046外设调试
  • ChatGPT指令大全
  • 【Vue面试题】Vue2.x生命周期?
  • 运算放大器 - 笔记 02 -恒流源