Docker镜像commit操作补充

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 握手包跑包

各位好 又见面了 我是曹操 今天给大家带来一篇新的教程

希望各位细心学习 低调用网

cdlinux镜像如何制作

Docker镜像是什么?
镜像是一种轻量级、可执行的独立软件包,用于打包软件运行环境和基于运行环境开发的软件。它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

UnionFS(联合文件系统)
UnionFS是一种分层、轻量级且高性能的文件系统。它支持将文件系统的修改作为一次提交逐层叠加,并可以将不同目录挂载到同一个虚拟文件系统中。Union文件系统是Docker镜像的基础。镜像可以通过分层继承,基于基础镜像制作各种具体的应用镜像。

cdlinux镜像如何制作

{% note red ‘fas fa-fan’ simple%}
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统。联合加载会将各层文件系统叠加起来,最终的文件系统将包含所有底层的文件和目录。
{% endnote %}

Docker镜像加载原理:
Docker镜像实际上由一层一层的文件系统组成,这种层级的文件系统称为UnionFS。bootfs(引导文件系统)是镜像的最底层,包含引导加载器和内核。rootfs(根文件系统)在bootfs之上,包含标准目录和文件,如/dev、/proc、/bin、/etc等。不同的操作系统发行版就是通过rootfs来实现的。

[dw@dk ~]$ sudo docker pull tomcat
Using default tag: latest
​
latest: Pulling from library/tomcat
d960726af2be: Pull complete 
e8d62473a22d: Pull complete 
8962bc0fad55: Pull complete 
65d943ee54c1: Pull complete 
da20b77f10ac: Pull complete 
8669a096f083: Pull complete 
e0c0a5e9ce88: Pull complete 
f7f46169d747: Pull complete 
42d8171e56e6: Pull complete 
774078a3f8bb: Pull complete 
Digest: sha256:71703331e3e7f8581f2a8206a612dbeedfbc7bb8caeee972eadca1cc4a72e6b1
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
​
[dw@dk ~]$ sudo docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
tomcat        latest    c43a65faae57   2 weeks ago    667MB
hello-world   latest    d1165f221234   2 months ago   13.3kB

{% note default simple %}
平时我们安装进虚拟机的CentOS都是好几个G,为什么Docker这里只有200M?
{% endnote %}

{% note primary simple %}
这是因为对于一个精简的操作系统,rootfs可以很小,只需要包括最基本的命令、工具和程序库即可。底层直接使用宿主机的内核,只需要提供rootfs即可。不同的Linux发行版可以共享相同的bootfs,而rootfs会有所差异。
{% endnote %}

分层的镜像:
Docker镜像采用分层结构的最大好处是共享资源。如果多个镜像都是从相同的基础镜像构建而来,那么宿主机只需保存一份基础镜像,内存中也只需加载一份基础镜像,就可以为所有容器提供服务。镜像的每一层都可以被共享。

镜像的特点:
{% note warning simple %}
Docker镜像都是只读的。当容器启动时,会在镜像顶部加载一个新的可写层,称为”容器层”,而镜像层位于”容器层”之下。
{% endnote %}

Docker镜像commit操作:
使用Docker commit命令可以将容器副本提交为一个新的镜像。

Docker commit命令示例:

docker commit -m="提交的容器描述信息" -a="作者信息" 容器ID 要创建的目标镜像名:[标签名]
#启动tomcat容器
[root@aaa ~]# docker run -it -p 8888:8080 tomcat 

{% note default simple %}
可能存在tomcat访问不到,详情请参考下述解释:
{% endnote %}

运行Docker的tomcat镜像报错”docker: IPv4 forwarding is disabled. Networking will not work.”。

解决方法:
网络无法通信是因为IPv4转发被禁用了,只需开启即可。

开启转发配置:

  1. 编辑/etc/sysctl.conf文件:
vim /etc/sysctl.conf
  1. 添加以下配置:
net.ipv4.ip_forward=1
  1. 保存并退出:
:wq!
  1. 重启网络服务使配置生效:
systemctl restart network
  1. 检查是否成功:
sysctl net.ipv4.ip_forward

如果返回”net.ipv4.ip_forward = 1″表示成功。

  1. 重启Docker服务:
sudo systemctl start docker
  1. 查看运行过的容器:
sudo docker ps -a
  1. 设置MySQL容器开机启动:
sudo docker update mysql --restart=always

如果没有异常,表示成功。

参考链接:blog.csdn.net/qq_42355392/article/details/110626807

cdlinux镜像如何制作

#不停止退出容器
CTRL+P+Q
# 查看tomcat容器id
[root@aaa ~]# docker ps

cdlinux镜像如何制作

# 进入容器命令行终端
[root@aaa ~]# docker exec -it ff197cf9b09d /bin/bash

cdlinux镜像如何制作

访问宿主机端口8888时出现404错误。

这是因为新版本的tomcat的webapps文件夹中没有相应的文件,需要将文件移动到正确的位置。

解决方法:

  1. 退出容器。
  2. 进入容器。
  3. 将原本应该放在webapps供外部访问的文件移动到webapps文件夹中。

cdlinux镜像如何制作

{% note success simple %}
至此,可能会遇到的问题案例分析完成。如果有其他情况,请自行查阅相关资源。
{% endnote %}

[dw@dk ~]$ sudo docker exec -it 2a966607e3c3 /bin/bash
root@2a966607e3c3:/usr/local/tomcat# ls
BUILDING.txt     LICENSE  README.md  RUNNING.txt  conf  logs        temp     webapps-back
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin          lib   native-jni-lib  webapps  work
​
root@2a966607e3c3:/usr/local/tomcat# cd webapps
​
root@2a966607e3c3:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
​
root@2a966607e3c3:/usr/local/tomcat/webapps# rm -rf docs
​
root@2a966607e3c3:/usr/local/tomcat/webapps# ls
ROOT  examples  host-manager  manager
​
root@2a966607e3c3:/usr/local/tomcat/webapps#

cdlinux镜像如何制作cdlinux镜像如何制作

[dw@dk ~]$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED        STATUS        PORTS                                       NAMES
2a966607e3c3   tomcat    "catalina.sh run"   17 hours ago   Up 17 hours   0.0.0.0:8888->8080/tcp, :::8888->8080/tcp   compassionate_leakey
[dw@dk ~]$ sudo docker commit -a="hj" -m="tomcat without docs" 2a966607e3c3 atguigu/mytomcat:1.2
sha256:3195c86b506685864b393d2d3490c98250354ba0d8fbe8af55fe794d0024b020
[dw@dk ~]$ sudo docker images
REPOSITORY         TAG       IMAGE ID       CREATED         SIZE
atguigu/mytomcat   1.2       3195c86b5066   7 seconds ago   669MB
tomcat             latest    c43a65faae57   3 weeks ago     667MB
centos             latest    300e315adb2f   6 months ago    209MB
[dw@dk ~]$ sudo docker images
REPOSITORY         TAG       IMAGE ID       CREATED         SIZE
atguigu/mytomcat   1.2       3195c86b5066   3 minutes ago   669MB
tomcat             latest    c43a65faae57   3 weeks ago     667MB
centos             latest    300e315adb2f   6 months ago    209MB
[dw@dk ~]$ sudo docker run -it atguigu/mytomcat # 可以发现不加版本号会默认找latest版本
Unable to find image 'atguigu/mytomcat:latest' locally
[dw@dk ~]$ sudo docker run -it -p 7777:8080 atguigu/mytomcat:1.2

访问应用的web页面:
通过访问虚拟机Docker暴露的8888端口,可以访问到tomcat的web页面。

cdlinux镜像如何制作

[dw@dk ~]$ sudo docker run -it -p 7788:8080 tomcat

cdlinux镜像如何制作cdlinux镜像如何制作

访问atguigu/mytomcat:1.2的应用,可以看到页面正常显示。

运行原始镜像tomcat。

总结:
之前是通过镜像生成容器实例,现在可以根据当前运行的容器实例状态生成新的镜像。类似于Java中的反射,通过实例可以获取类的信息。通过镜像可以得到我们自定义的容器。

上一篇:Docker的常用命令

下一篇预告:Docker容器数据卷

赞(0)