容器自启动和归档还原

容器自启动和归档还原

基于我们在Docker中的tomcat配置了woniusales

当我们退出容器再进入的时候发现mysql启动了,tomcat没有启动。原因是因为mysql是自启动的。我们可以使用 systemctl list-unit-files | grep mysql 来查看mysql是否是自启动,我们可以看到结果如下

image-20240126202515051

然后我们尝试启动tomcat,发现报错了:

[root@myrootcentos7 webapps]# /opt/apache-tomcat-8.0.53/bin/shutdown.sh 
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program

原因是因为我们之前在 ~/.bash_profile 中配置的环境变量没有生效,但是为什么我们在linux宿主机上就没遇到过这种情况呢?

原因:~/.bash_profile 文件是当用户登录后自动运行的,linux宿主机在每次进入时都会有一个用户登录的操作,该过程的结束就表示该文件执行了,但是docker容器进入时,并没有用户认证的操作,因此,docker容器的该文件也不会自动生效了

一、配置镜像的自启动脚本

在linux中,哪些脚本是自启动的:

/etc/rc.d/rc.local:系统在启动时进行加载执行,/etc/rc.local是本文件的软连接文件

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行

/etc/bashrc:为每一个运行 bash shell 的用户执行此文件,当 bash shell 被打开时,该文件被读取

~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次

~/.bashrc:该文件包含专用于你用户的 bash shell 的 bash 信息,当登录时以及每次打开新的shell时,该文件被读取

~/.bash_logoutL:当每次退出系统(退出 bash shell)时,执行该文件。

了解了上面的自启动文件后,我们来配置一个启动容器时自动开启tomcat

当我们开机的时候会有哪些文件自启动呢?

  • /etc/rc.d/rc.local (当一个系统运行时,该文件就会被直接执行)
  • /etc/bashrc

了解清楚这些之后,我们给予该文件可执行权限就可以了

#编辑 /etc/bashrc 或 /etc/rc.d/rc.local,添加以下指令
export JAVA_HOME=/etc/jdk  #这个就是jdk解压缩存放的目录
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin  #这是在原本的PATH上加了java
export PATH
/opt/apache-tomcat-8.0.53/bin/startup.sh

#添加该文件的可执行权限
chmod u+x /etc/rc.d/rc.local

二、容器提交为镜像,归档,还原

  • 将容器提交为镜像
docker commit -a "ymq" -m "woniusales with tomcat+mysql5.6" rootcentos7 woniusales:1.4
#-a 指定作者
#-m 对镜像的描述
#rootcentos7 指定被提交的容器
#woniusales:1.4  提交后的镜像的名称

image-20240126222723809

此时没报错,说明提交为镜像成功

image-20240126222801359

查看镜像,已保存在本地,ok

  • 对镜像进行归档压缩
docker save -o /opt/woniusales-centos7.tar woniusaels:1.4
gzip /opt/woniusales-centos.tar

#-o 表示镜像归档之后存放的路径
#woniusaels:1.4  指定镜像名称

image-20240126223429037

可以使用 du -sh woniusales-centos7.tar.gz 来查看该文件的大小变成了多少

image-20240126223753509

变成为这么多,原先是1.59G,现在是689M

  • 从归档文件还原镜像

我们把该镜像的归档压缩文件发给别人之后,别人就可以在电脑上还原该镜像,然后再使用该镜像创建容器,此时创建的容器就是可以直接用来访问woniusales的

docker load -i woniusales-centos7.tar.gz
  • 基于该镜像创建新的容器

现在就可以基于还原的这个镜像再创建容器,此时创建的容器就是我们之前配置好的,不过还是要以特权模式建立容器

使用 docker port rootcentos7 来看这个容器映射的端口的情况,前提是该容器要开启,以便其他容器不会端口冲突

#创建容器
docker create -it --name woniusales -h mywoniusales --privileged=true -p 8082:8080 -p 3308:3306 woniusales:1.4 /sbin/init

#开启容器
docker start woniusales

image-20240126224622824

在这里插入图片描述

现在我们去访问 192.168.230.147:8082 照样可以访问woniusales

在这里插入图片描述

此时从外面远程连接容器的数据库就要把端口改为3308

image-20240126225415339

这样就OK了

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值