centos离线安装mono(docker)

最近公司有需求要在centos上运行exe程序(一个生成pdf的exe程序),这个exe程序运行需要依赖mono,然后就到mono官网http://www.mono-project.com/download/stable/#download-lin-centos上下载,直接三步搞定:

1、rpm --import "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"

2、su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo'

3、yum install mono-devel


后来我们的项目需要部署到服务器上,而部署的服务器是无法联网的,所以就需要离线部署了,开始的时候以为很简单,不就是下载tar包,源码包安装就完了,结果是安装好了,但是运行的时候发现无法打印exe,缺少依赖包,然后下载相关依赖源码包再安装,结果又缺依赖包,然后下载...安装...下载...安装。。。。太多依赖了,并且有很多依赖包的源码包在网上不是很好找。最后领导建议使用docker来进行安装。然后就开始的docker的学习。

先说下docker,我对docker的学习仅限于成功的docker save了一个docker的镜像文件,可以进行mono的离线安装。docker还有很多很好用的地方,以后有时间再去探索。

docker有几个概念需要理解,image是镜像,docker images查看所有镜像,docker run 是运行镜像,运行的镜像称之为容器,使用docker ps进行查看,docker stop 容器id 是停止运行的容器,查看所有的容器(运行+停止状态)docker ps -a。一个docker镜像可以创建多个运行的环境,删除镜像前需要先删除所有容器,命令为docker rm 容器id 容器id... 可以同时删除一个或者多个容器,删除完容器后使用docker rmi 镜像id 来进行镜像的删除。

下面对我安装的mono进行说明一下。

docker search 查询docker的镜像源。比如我需要先安装一个centos,就执行docker search centos,这个时候可以选择一个对应的版本进行docker pull centos,下载下来之后首先要创建一个运行环境docker run -d -p 10023:10023 -it --privileged=true -v /home:/home 镜像Id /bin/bash -c "/mnt/autostart.sh"(这一段下面会进行专门讲解)。 进入容器后使用如上描述的方法安装mono,再exit退出来,使用docker cp 主机目录(文件) 容器id:/home ,将项目拷贝至容器,jdk拷贝也是一样。都拷贝进去后再将容器打包成为一个新的镜像,docker commit -a "chenfeng" -m "aotu-start" 容器id repository:tag(这个设置为需要的),生成完新的镜像后,将这个镜像save成文件就可以离线安装了。保存文件命令docker save -o /home/fileName.tar 镜像id repository:tag,加载文件命令docker load -i /home/fileName.tar。

docker run -d -p 10023:10023 -it --privileged=true -v /home:/home 镜像Id /bin/bash -c "/mnt/autostart.sh"

    run 创建容器并运行

    -d  后台运行

    -p  容器中端口与本机的端口映射

    --privileged=true 开启容器用户root权限,否则映射的目录文件可能没权限打开

    -v 主机的目录和容器目录的映射

    -c 启动时容器执行的命令,执行的这个脚本的最后需要加入 tail -f /dev/null 来确保脚本一直执行,否则这个脚本不会生效


再记录一些坑,由于exe程序执行的时候命令中有中文,docker新建的centos不支持中文,需要进行设置

yum -y install kde-l10n-Chinese

yum -y reinstall glibc-common

localedef -c -f UTF-8 -i zh_CN zh_CN.utf8

export LC_ALL=zh_CN.utf8


以上是我个人的一些理解,如果有错误的地方,请指出,谢谢。

猜你喜欢

转载自blog.csdn.net/csdnchen666666/article/details/80753019