在docker镜像中安装软件windows+liux版

前面尝试安装docker服务成功后,本次主要是在docker中安装镜像+在镜像中安装软件。

1.直接从repository中拉取centos7的镜像

docker pull centos:7.2.1511

2.启动容器,同时共享宿主机的文件目录

docker run --privileged -it -v /opt:/opt 02abcd2234 /usr/bash    #linux指令

docker run --privileged -it -v /F/project:/opt 02abcd2234 /usr/bash #windows指令(备注,windows上回弹出是否允许共享,点击确定,并输入电脑密码即可。)

参数解读:-v /opt:/opt 前面的opt为主机目录,后面的opt为centon7容器目录
02abcd2234 为镜像id

备注:由于有些东西可以不用直接从网上安装,可以直接将需要安装的文件放入容器与宿主机共享的目录即可。容器启动后,完全是按照linux系统操作指令即可。

3.本次主要安装jdk1.8,tomcat9,matlab。将文件拷贝至共享目录:

apache-tomcat-9.0.1.tar.gz
MCR_R2016a_glnxa64_installer.zip
jdk-8u151-linux-x64.tar.gz

4.安装jdk

创建该文件夹:mkdir /usr/java
解压jdk安装包: tar -xvf jdk*.tar.gz -C /usr/java/ 
创建jdk软连接: ln -s /usr/java/jdk* /usr/java/default
配置环境变量/etc/profile,增加一下3行
export JAVA_HOME=/usr/java/default
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
调用命令使修改生效:source /etc/profile
调用 java –version 查看jdk是否安装成功

编辑环境变量文件的时候,发现没有vim,安装vim

yum -y install vim

因为该容器很纯净,安装wget指令

yum -y install wget

5.安装tomcat

cd /opt
tar -zxvf apache-tomcat-9.0.1.tar.gz
mv apache-tomcat-9.0.1 tomcat-8080

6.安装matlab

mkdir -p /home/jyapp/matlab/
cd /opt
unzip MCR_R2016a_glnxa64_installer.zip -d /home/jyapp/matlab/
cd /home/jyapp/matlab/
./install -mode silent -agreeToLicense  yes
vi /etc/profile
export MCR_HOME=/usr/local/MATLAB/MATLAB_Runtime 
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$MCR_HOME/v901/runtime/glnxa64:$MCR_HOME/v901/sys/os/glnxa64:$MCR_HOME/v901/sys/java/jre/glnxa64/jre/lib/amd64/headless:$MCR_HOME/v901/sys/java/jre/glnxa64/jre/lib/amd64/server:$MCR_HOME/v901/sys/java/jre/glnxa64/jre/lib/amd64"
source /etc/profile

7.安装redsi----本次使用在线安装

由于redis在第三方库,所以需要给yum添加源
yum添加epel源的命令为:yum install epel-release
yum -y install redis
修改配置文件:vi /etc/redis.conf
开启远程访问需要修改如下地方:
注释掉127.0.0.1
修改daemonize no变成yes
protected-mode yes 改为no

8.mysql安装

问题:由于容器只是虚拟出的系统,并不是真正的linux,所以有很多权限问题,比如最大的就是不能使用systemctl指令启动服务,虽然网上说了很多方法解决,但目前我尝试了几次都没有成功。有一个方法安装成功了,但是不会开启开机启动指令。建议目前的解决办法就是mysql单独为一个容器,直接使用

docker pull mysql 就直接安装位镜像,再开启开容器即可。

9.最后一步安装以上软件后,千万要记得提交保存为新的镜像。
使用指令查看当以我们在运行的容器的id

docker ps -l

找到你运行的容器id,输入指令保存为新的镜像

docker commit xxxxxx centos/matlab

使用指令查看保存后的镜像

10.环境搭建完毕,接下来便是启动容器,测试效果。

docker run --privileged=true -t -i -v /F/project:/opt -p 8081:8080 -p 6379:6379 02abcd2234 /bin/bash

参数解读:-v /F/project:/opt  挂载共享目录(本次用的是window是上的docker)

-p 8081:8080表示端口转发,将centos/matlab 容器内的8080端口,映射到宿主机的8081端口上(也就是穿墙操作)

02abcd2234:表示centos/matlab镜像的id

启动成功后,由于每次进入重新启动镜像容器后,之前在容器中配置的环境变量好像没有生效了,所有保险起见,进入容器后首先执行 source /etc/profile,然后输入java -version查看环境变量是否生效,生效则继续下步操作:

启动tomcat

cd /opt/tomcat-8080
cd /bin  
./start.sh

测试用浏览器访问localhost:8081

还可以再开启redis:

redis-server /etc/redis.conf

通过本地测试客户端可以读到redis的database。

表示我们的容器软件都安装成功,端口转发也能正常运行,此时只要把我们的项目放入tomcat中就能跑啦。

测试容器通过后,表示我们保存的最新镜像就是完整的一套环境啦,此时只需要把它存储出来,可以在其他任意的docker环境都能直接使用,不用在麻烦的重复部署jdk,tomcat,matlab,redis环境啦。

将安装了最新软件的镜像centos/matlab存储出来

docker save –o f:/centos-matlab.tar centos/matlab:latest(windows指令)
docker save –o /opt/centos-matlab.tar centos-matlab:latest(linux指令)

在其他平台安装了docker环境的话,直接将该镜像载入进去就可以运行为新的容器啦

docker load —input /opt/testimage.tar
查看载入的镜像
docker images

备注:

要是有时候中途退出了正在操作的容器,可以使用如下指令再次进入

docker start -ia xxxxx     参数:xxxxx表示之前操作的容器的id,可以使用 docker ps -a 查看

如果因为退出了,就通过docker run重新来启动一个容器的话,就相当于是重新创建,之前在哪个容器里面安装软件的都不会有的。

假如有些容器不需要了,可以删除,不然内存储空间

docker ps -a    #查看容器列表和状态
docker rm 容器id(windows)
docker rm $(docker ps -qf status=exited)     #linux指令,删除处于退出状态的容器

猜你喜欢

转载自my.oschina.net/shea1992/blog/1802926