前言:
因为项目需求,需要在银河麒麟Kylin-4.0.2-server(其他版本如V10也可以)系统安装docker并将项目打成镜像,并实现nginx容器指向tomcat容器中的静态资源。
1. 离线安装docker
2. 编写Dockerfile文件
3. 打包并配置nginx
整体流程:
一、离线安装docker
这里需要注意,银河麒麟的版本的是arrch64为的,arrch64与arm64位是一样的。
选择与自己服务器系统匹配的版本,查看服务器系统版本:cat /proc/version
使用命令dpkg -i XXX.deb安装,这里需要主要一点,一共需要安装三个deb,切记!!!!
安装完成后启动 :systemctl start docker
二、 Dockerfile打包springBoot生产的jar包镜像
下载麒麟系统对应的jdk,这里我还是用自己的jdk打包,这里读者自行下载吧,找不到链接了。将Dockerfile文档+jdk+项目jar包放到一个目录中
首先拉取父镜像,命令为:docker pull centos
拉取成功后,配置Dockerfile文件:
# 定义父镜像
FROM centos
# 将jar包添加到容器
ADD jdk-8u331-linux-aarch64.tar.gz /usr/local/
ADD middleware.jar /usr/local/middleware.jar
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_331
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
# 定义容器启动执行的命令
CMD java -jar /usr/local/middleware.jar
生成镜像命令:
docker build -t 镜像名称 .
特别注意,容器名称后有一个 “.”,别忘记加。
执行完成,查看镜像:
docker images;
查看镜像:
生成容器:
docker run --name 容器名 -p 9001:9001 镜像名称
查看容器:
docker ps -a //查看所有的容器
docker ps //查看正在运行的容器
出现如下信息为成功:
查看日志:
docker logs --tail=1000 容器名称
三、打包tomcat镜像,并发布项目
与第二个一致,将项目文件放到统一目录下:
编写Dockerfile文件:
FROM centos
#从本地将jdk和tomcat的压缩包,复制到容器的/usr/local目录下去,并自动解压
ADD apache-tomcat-8.5.66.tar.gz /usr/local
#声明工作目录,并通过WORKDIR命令,切换到工作目录
ENV MYPATH /usr/local
WORKDIR $MYPATH
#环境变量设置,最终将java和tomcat都配置到PATH中
ENV JAVA_HOME /mnt/jdk1.8.0_331
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:#JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.66
ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.66
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#对外暴露8080端口
EXPOSE 8080
#执行tomcat的启动命令,并通过tail -f命令,持续跟踪日志输出
CMD /usr/local/apache-tomcat-8.5.66/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.5.66/logs/catalina.out
生成镜像:
docker build -t 容器名称 .
生成容器:
docker run -d -p 7001:8080 --name hzftomcat --privileged=true -v /home/slime/:/usr/local/apache-tomcat-8.5.66/webapps/ -v /home/slime/tomcatlogs/:/usr/local/apache-tomcat-8.5.66/logs 镜像名
注意:这里的 /home/slime/ 为本地目录,这里存放的是web项目,/usr/local/apache-tomcat-8.5.66/webapps/ 这个目录为tomcat容器里的目录,将本地目录映射到tomcat里,logs目录同理。
接下来可以去浏览器访问查看是否成功了。
四、打包nginx镜像,并配置代理指向tomcat本地的静态资源
这里我直接使用网络下载的nginx镜像,命令为:
docker pull nginx
创建容器:
docker run --name nginx01 -p 8082:8082 -v /home/slime/nginx.conf:/etc/nginx/nginx.conf -v /home/slime/hy/webas/army-green:/etc/nginx/army -v /home/slime/log:/var/log/nginx -d nginx
启动之前需要做一些配置:
因为我外部使用的是8082端口访问,所以,我这里使用nginx内部的8082端口映射外部的8082。
/home/slime/nginx.conf:/etc/nginx/nginx.conf 本地创建nginx.conf文件覆盖容器里的nginx.conf文件。
具体配置信息如下:
/home/slime/hy/webas/army-green:/etc/nginx/army 本地静态文件位置(即tomcat下的weapps里的web项目里的静态资源文件)挂载到容器里的army中。
至此,所以打包镜像和配置结束。这里我整理了一下docker常用命令:
打包容器:
docker build -t 容器名称 .
查看日志:
docker logs --tail=1000 容器名称
创建tomcat容器:
docker run -d -p 7001:8080 --name hzftomcat --privileged=true -v /home/slime/:/usr/local/apache-tomcat-8.5.66/webapps/ -v /home/slime/tomcatlogs/:/usr/local/apache-tomcat-8.5.66/logs diytomcat
创建nginx
docker run --name nginx01 -p 8082:8082 -v /home/slime/nginx.conf:/etc/nginx/nginx.conf -v /home/slime/hy/webas/army-green:/etc/nginx/army -v /home/slime/log:/var/log/nginx -d nginx
启动容器:
docker start 容器ID
进入容器:
docker exec -it nginx01 /bin/bash
whereis nginx
cd /etc/nginx
查看容器环境
docker inspect 容器ID|容器名称
从docker上拷贝文件到本地
docker cp nginx:/etc/nginx/default.conf /home/
将default.conf拷贝回nginx容器内
docker cp /home/default.conf nginx:/etc/nginx/conf.d/
导出镜像:
docker save -o <保存路径> <镜像名称:标签> [<镜像名称:标签> ... ]
docker save -o ./middlewareImage.tar diddleware:latest
//gzip 保存映像文件
docker save myimage:latest | gzip > myimage_latest.tar.gz
导入镜像:
docker load --input ./middlewareImage.tar
导出容器:
docker export <容器名> > <保存路径>
docker export ubuntu18 > ./ubuntu18.tar
导入容器:
docker import <文件路径> <容器名>
docker import ./ubuntu18.tar ubuntu18
总结:
save保存的是镜像,export保存的是容器
load用来载入镜像包,import用来载入容器包,但两者都会恢复为镜像
load不能对载入的镜像重命名,而import可以为镜像指定新名称
load不能载入容器包,import能载入镜像包,但不能使用
补充知识:
export导出的是容器,但是用import导入的确实镜像,想要运行这个镜像,需要在启动的时候添加command,否则会报错。具体的command需要在导出容器的时候通过docker ps查看到。
如果command太长,docker ps 查看不全,则使用:
docker ps --no-trunc
查看
启动:
docker run --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306_mysql:5.7.0 /entrypoint.sh mysqld
配置agt-get网络源
在系统的/etc/apt/sources.list文件中,根据不同版本填入以下内容,可以看到以下操作系统均是基于ubuntu定制的,4.0.2sp2-server使用的是kord的包,kylin可能对应的是中标麒麟的.
#4.0.2桌面版本:
deb http://archive.kylinos.cn/kylin/KYLIN-ALL 4.0.2-desktop main restricted universe multiverse
#4.0.2-sp1桌面版本:
deb http://archive.kylinos.cn/kylin/KYLIN-ALL 4.0.2sp1-desktop main restricted universe multiverse
#4.0.2-sp2桌面版本:
deb http://archive.kylinos.cn/kylin/KYLIN-ALL 4.0.2sp2-desktop main restricted universe multiverse
#4.0.2服务器版本:
deb http://archive.kylinos.cn/kylin/KYLIN-ALL 4.0.2-server main restricted universe multiverse
#4.0.2-sp1服务器版本:
deb http://archive.kylinos.cn/kylin/KYLIN-ALL 4.0.2sp1-server main restricted universe multiverse
#4.0.2-sp2服务器版本:
deb http://archive.kylinos.cn/kylin/KYLIN-ALL 4.0.2sp2-server main restricted universe multiverse
#4.0.2-sp2 FT2000+服务器版本:
deb http://archive.kylinos.cn/kylin/KYLIN-ALL 4.0.2sp2-server-ft2000 main restricted universe multiverse
#4.0.2-sp3桌面版本:
deb http://archive.kylinos.cn/kylin/KYLIN-ALL 4.0.2sp3-desktop main restricted universe multiverse
#4.0.2-sp3服务器版本:
deb http://archive.kylinos.cn/kylin/KYLIN-ALL 4.0.2sp3-server main restricted universe multiverse
apt-get常用命令
命令 | 作用 |
apt-get update | 更新源文件,并不会做任何安装升级操作 |
apt-get upgrade | 升级所有已安装的包 |
apt-get install packagename | 安装指定的包 |
apt-get install packagename --only-upgrade | 仅升级指定的包 |
apt-get install packagename --reinstall | 重新安装包 |
apt-get -f install | 修复安装 |
apt-get build-dep packagename | 安装相关的编译环境 |
apt-get source packagename | 下载该包的源代码 |
apt-get dist-upgrade | 升级系统 |
apt-get dselect-upgrade | 使用 dselect 升级 |