整体流程
- 下载基础镜像
- 更新一些centos应该有的基础软件
- 生成新镜像
- 开启ssh
- 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部分
- 目的:运行springboot项目,项目中要调用linux终端,所以需要diy自己的centos。
- 需要配置的步骤:
- 配置java环境
- 安装gdb,g++
- 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
- 将宿主机的文件复制到容器内:可以用
docker cp 待复制的文件名 容器id:复制到的目录
这样的方式进行传入文件。 - 在linux后台运行jar包:
-
nohup java -jar xxx.jar >logs.txt &
后台运行xxx.jar -
ps -ef|grep xxx.jar
查看正在运行的jar包的进程号 -
kill -9 pid
通过进程号pid关闭进程。 - 参考:
- 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脚本
补充:docker的push用法
- 登陆dockerhub
docker login
输入的账号密码是dockerhub的,如果没有,就去官网注册一个
- 给images打标签
docker tag 镜像名 账号名/仓库名:版本号
账号名是登陆的账号名,仓库是远端配置的仓库名,版本号自己定义一个就好。到时候pull下来也是pull这个账号名/仓库名:版本号就好
- push
docker push 账号名/仓库名:版本号
即可
6.注意: