Docker创建centos7镜像并且diy

整体流程

  1. 下载基础镜像
  2. 更新一些centos应该有的基础软件
  3. 生成新镜像
  4. 开启ssh
  5. ssh进入镜像中开始diy
1.基础镜像下载
# docker pull centos
# docker run -itd --name centos7 imageID /bin/bash
2. 下载基础软件

因为原版的centos是没有安装一些基本的软件的,所以这时候你可以自己安装好。

--进入centos容器
# docker exec -it centos7 /bin/bash

--没有ifconfig、ssh、vim、tree、wget等等,需要分别安装
--安装vim
yum install vim
--安装ifconfig
# yum search ifconfig
# yum install net-tools.x86_64
--安装ssh服务器
# yum list openssh
# yum install -y openssh-server
--安装ssh客户端(非必须,有需求就装)
# yum install -y openssh-clients
--安装wget
# yum install -y wget
--换源
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# yum makecache

注意:如果你想diy,可以在镜像完全做好的时候再安装你想要的软件,也可以现在就安装好。这个看你,比如说,我想安装java,g++之类的软件;不过因为要上传安装包,所以我是镜像做好以后,ssh连进去再安装的。

3. 开启ssh
--开启sshd服务
# systemctl start sshd
--这里会报错,因为一开始启动的时候没有给予root权限,再之后制作了新镜像,我们在run的时候赋予新的权限即可。

所以,先保存已经安装了软件的centos:

--退出centos容器
# exit

--保存修改
# docker commit centos7 new_image_centos7:v1.0
--查看是否保存成功
# docker images

--保存修改后的镜像到本地文件系统
# docker save imageID > /var/mycentos7.jar


--删除之前无用的容器和镜像(可选)
# docker stop centos7
# docker rm $(docker ps -aq)
# docker rmi imageID_1 imageID_2

补充:如果你想试试看load的方式加载镜像,可以删除你创建的镜像,执行下面的语句,那么,镜像又回来了。

--加载镜像备份文件
# docker load < /home/xxx.jar
--这时候可以查看镜像是否加载
# docker iamges

开启ssh

--运行镜像步骤改变
# docker run --privileged=true  -p 33030:22  -tid --name centos centos:latest /usr/sbin/init
--这里不用/bin/bash而是换成了 /usr/sbin/init,让镜像启动的时候就加载ssh,同时,通过--privileged=true使得镜像获得root权限。

--进入centos7容器,开启服务就可以了
# docker exec -it centos7 /bin/bash
# systemctl start sshd
--查看是否启动
# ps -ef | grep ssh

最后,别忘了设置ssh的账号密码

--在容器中要设置root密码
# passwd root
....
当出现远端无法连接的情况,可以修改一下默认的配置:
找到# Authentication:
LoginGraceTime 120
PermitRootLogin without passwd
StrictModes yes
改成
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
然后加载配置即可
....

5.diy部分

  1. 目的:运行springboot项目,项目中要调用linux终端,所以需要diy自己的centos。
  2. 需要配置的步骤:
  1. java的安装具体看博文,简单来说就是三步:
  • 官网下载安装包
  • 自定义目录解压安装包
tar -zxvf jdk-8u221-linux-x64.tar.gz(具体看你的包名)
  • 修改profile文件配置环境变量。
#set java environment
export JAVA_HOME=/usr/my_java/java1.8/jdk1.8.0_221  #你自己的jdk安装目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=${JAVA_PATH}:$PATH
  1. 将宿主机的文件复制到容器内:可以用docker cp 待复制的文件名 容器id:复制到的目录这样的方式进行传入文件。
  2. 在linux后台运行jar包:
  • nohup java -jar xxx.jar >logs.txt & 后台运行xxx.jar
  • ps -ef|grep xxx.jar查看正在运行的jar包的进程号
  • kill -9 pid通过进程号pid关闭进程。
  • 参考:https://blog.csdn.net/u012240455/article/details/86571644
  1. docker出现了启动的jar经常无故掉线的情况,现在暂时没有找到原因,所以采取的措施是:写一个my.sh脚本,每隔5分钟检查一下jar有没有运行,如果有,就不管,没有就重启。
#!/bin/sh
DOCKER=`ps -ef | grep .jar | grep -v grep | wc -l`
if [ $DOCKER -eq 0 ]
then
  echo "anyview.jar is down!" 
  nohup java -jar backend-1.0-SNAPSHOT1.963.jar 2>logs.txt &
  echo "Start anyview.jar success!"
fi

#具体解释可以看:https://www.xuebuyuan.com/2205812.html?mobile=0

写好脚本后用crontab 工具,设置定时任务:

crontab -e   //表示设置定时任务
进入到了编辑画面,输入:
*/30 * * * * /var/my.sh    //表示每个30分钟启动以此my.sh脚本

最后别忘了给sh脚本赋执行权限:chomd u+x my.sh
参考博客:

补充:docker的push用法
  1. 登陆dockerhub
docker login

输入的账号密码是dockerhub的,如果没有,就去官网注册一个
  1. 给images打标签
docker tag 镜像名 账号名/仓库名:版本号

账号名是登陆的账号名,仓库是远端配置的仓库名,版本号自己定义一个就好。到时候pull下来也是pull这个账号名/仓库名:版本号就好
  1. push
docker push 账号名/仓库名:版本号
即可

6.注意:

  1. 进入docker内部后进行的修改都是在临时读写层,当容器关闭后再重启时,读写层会被清空。所以,想要文件存的好好的,还是要volume挂载在本地,启动的时候在把本地文件挂上去才保险。参考:

参考博文:

  1. docker开启ssh
  2. Docker创建Centos踩出来的坑

补充:

  1. 安装tomcat:https://blog.csdn.net/qq_37598011/article/details/93502809
  2. 出现了安装问题:https://blog.csdn.net/gywtzh0889/article/details/54017528
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值