当在虚拟机上docker镜像能够成功运行起来后,接下来需要把虚拟机上的镜像从虚拟机上导出然后导入到服务器上并运行
- 构建镜像,使用docker-compose --compatibility build 命令构建镜像,这时docker-compose.yml文件是用来构建镜像的,所以里面要写的是构建镜像的语句(可以参考前几篇docker文章),构建前把之前的镜像删除掉,批量删除某前缀的镜像命令如下,把xxx改为前缀即可
docker images |grep xxx | awk -F' ' '{print $1}' | xargs docker rmi
- 构建完成镜像之后,导出成tar包,导出脚本如下,需要修改的地方就是第二行到第四行,tmp.txt的作用是限定导出哪些镜像,BAKDIR是定一个导出tar包的存放位置,LOGDIR是定一个日志位置方便查看是否导出报错
LIST=""
TXT=/home/ljy/Downloads/tmp.txt
BAKDIR=/home/ljy/Downloads/andawell
LOGDIR=/home/ljy/Downloads/andawell/log
LOGFILE=$LOGDIR/bak.`date +%Y%m%d`.log
[ ! -d $BAKDIR ] && mkdir -p $BAKDIR
[ ! -d $LOGDIR ] && mkdir -p $LOGDIR
if [ -n "$LIST" ]
then
for list in $LIST
do
RESLIST=`docker images |grep $list | awk '{print $1}'`
for reslist in $RESLIST
do
RESTAG=`docker images |grep "$reslist" |awk '{a=$1":"$2;print a }'`
BAKNAME=`docker images |grep "$reslist" |awk '{a=$1":"$2;print a }'|sed 's/\//_/g'`
/usr/bin/docker save $RESTAG -o $BAKDIR/$BAKNAME.tar >> $LOGFILE 2>&1
done
done
else
RESLIST=`cat $TXT|awk '{print $1}'`
for reslist in $RESLIST
do
RESTAG=`docker images |grep "$reslist" |awk '{a=$1":"$2;print a }'`
BAKNAME=`docker images |grep "$reslist" |awk '{a=$1":"$2;print a }'|sed 's/\//_/g'`
/usr/bin/docker save $RESTAG -o $BAKDIR/$BAKNAME.tar >> $LOGFILE 2>&1
done
/usr/bin/rm -f $TXT
fi
if [ -s $LOGFILE ]
then
echo -e "\033[31mERROR:Images Backup Failed!\033[0m"
echo -e "\033[31mPlease View The Log Lile : $LOGFILE\033[0m"
else
/usr/bin/rm -f $LOGFILE
fi
tmp.txt文件内容如下
awxx508_hardware-service latest
awxx508_materials-service latest
awxx508_auth-service latest
awxx508_upms-service latest
awxx508_web latest
awxx508_api-gateway latest
awxx508_registery-center latest
- 把导出的tar包传到服务器上,然后使用导入脚本,把tar包转为docker镜像,批量导入镜像脚本如下,需要修改的地方就是TARDIR,这个脚本会把这个目录下的所有tar包转化为docker镜像
#!/bin/sh
STATE=""
RECEIVE=$1
TARDIR="/home/ljy/Downloads/andawell"
SUFFIX="*.tar"
LIST=`ls $TARDIR/$SUFFIX`
LOGFILE=$TARDIR/import.error.`date +%Y%m%d`.log
BAKLOGFILE=$TARDIR/bak.`date +%Y%m%d`.log
STATEIMPORT() {
for i in $STATE
do
/usr/bin/docker load -i $i >/dev/null 2>>$LOGFILE
done
}
RECEIVEIMPORT() {
for i in $RECEIVE
do
/usr/bin/docker load -i $i >/dev/null 2>>$LOGFILE
done
}
LISTIMPORT() {
for i in $LIST
do
/usr/bin/docker load -i $i >/dev/null 2>>$LOGFILE
done
}
IMAGESBAK(){
IMGINFO=`docker images |awk '{print $1,$2,$3}'|sed 1d >> $TARDIR/tmp.txt`
RESLIST=`/usr/bin/cat $TARDIR/tmp.txt |awk '{print $1}' `
for i in $RESLIST
do
RESTAG=`docker images |grep "$i" |awk '{a=$1":"$2;print a }'`
BAKNAME=`docker images |grep "$i" |awk '{a=$1":"$2;print a }'|sed 's/\//_/g'`
/usr/bin/docker save $RESTAG -o $TARDIR/$BAKNAME_`date +%Y%m%d`.tar >/dev/null 2>>$BAKLOGFILE
done
if [ -s $BAKLOGFILE ]
then
echo -e "\033[31mERROR:Images Backup Failed!\033[0m"
echo -e "\033[31mPlease View The Log Lile : $BAKLOGFILE\033[0m"
else
/usr/bin/rm -f $BAKLOGFILE
fi
/usr/bin/rm -f $TARDIR/tmp.txt
}
/usr/bin/rm -f $TARDIR/*.log
##read -p "Whether to backup the current images[y/n]:" INPUT
if [[ "n" = "y" ]] || [[ "n" = "Y" ]]
then
IMAGESBAK
else
if [[ -n "$RECEIVE" ]] || [[ -n "$STATE" ]]
then
if [ -n "$RECEIVE" ]
then
RECEIVEIMPORT
else
STATEIMPORT
fi
else
LISTIMPORT
fi
fi
##ERROR Output
if [ -s $LOGFILE ]
then
echo -e "\033[31mERROR:Images Import Failed!\033[0m"
echo -e "\033[31mPlease View The Log Lile : $LOGFILE\033[0m"
else
/usr/bin/rm -f $LOGFILE
fi
接下来的操作就和之间使用docker-compose启动服务一样了,启动的docker-compose.yml如下(修改需要修改的端口号、数据库版本、挂载目录、镜像名称等即可使用)
version: '3'
services:
myMysql:
image: mysql:5.7.26
container_name: myMysql
restart: always
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: root
command:
--lower_case_table_names=1
ports:
- 5036:3306
deploy:
resources:
limits:
memory: 3072M
volumes:
- /usr/local/andawell/work/mysql/data:/var/lib/mysql
registery-center:
image: register
restart: always
hostname: registry-center
ports:
- 5000:5000
deploy:
resources:
limits:
memory: 3072M
upms-service:
image: upms
restart: always
depends_on:
- registery-center
ports:
- 5003:5003
deploy:
resources:
limits:
memory: 3072M
auth-service:
image: auth
restart: always
depends_on:
- upms-service
ports:
- 5002:5002
deploy:
resources:
limits:
memory: 3072M
materials-service:
image: materials
restart: always
depends_on:
- auth-service
ports:
- 5009:5009
deploy:
resources:
limits:
memory: 3072M
hardware-service:
image: hardware
restart: always
depends_on:
- materials-service
ports:
- 5008:5008
deploy:
resources:
limits:
memory: 3072M
api-gateway:
image: api-gateway
restart: always
depends_on:
- materials-service
ports:
- 5010:5010
deploy:
resources:
limits:
memory: 2048M
web:
image: web
restart: always
ports:
- 5066:5066
deploy:
resources:
limits:
memory: 2048M