我只能说配置服务器真的是太简单了,有手就行
文件如下:
- Dockerfile
- 项目代码
- requirements.txt
如图:
你需要先在windows系统下建立好这三个文件,然后迁移到linux服务器上,接着才能运行
下面我将介绍如何建立Dockerfile以及requirements.txt
1.1 requirements.txt创建我在网上看了很多方法,有的用pip freeze > 命令的,但是不好,我看了几个工具,觉得pipreqs是比较容易且不错的。
- 安装pipreqs
可以直接通过pip来安装pipreqs,安装命令如下:
pip install pipreqs
- 使用pipreqs
命令如下:
pipreqs ./ --encoding=utf-8 注意需要进入到项目中运行
然后就创建好了requirements.txt
1.2 Dockerfile创建先看一下大致内容
FROM python:3.8 # 添加当前文件到code目录下 ADD . /code # 切换目录 WORKDIR /code # 安装依赖 RUN pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ # 切换到项目目录 WORKDIR /code/feature_extract # 项目运行命令 CMD ["bash", "run.sh"]
创建过程如下:
- 在Windows右键创建Dockerfile,不需要后缀名
编写Dockerfile,完毕
咳咳,其实就这么简单,不过需要说一下Dockerfile里面的内容。
- FROM python3.8 Dockerfile中的一个非常重要的命令,作用是指定一个基础镜像来进行构建流程。这里我们选择Python3.8即可,根据自己项目来
- ADD . /code 这是说把当前你所在路径下的所有文件添加到docker容器中的code目录下
- WORKDIR /code 这是切换容器的目录,因为需要在code目录下执行环境依赖安装(requirements.txt在该目录下,我们ADD就把我们创建的三个文件放过来了)
- RUN pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ 安装依赖不说了
- WORKDIR /code/feature_extract 这里是切换到我们的代码文件目录下,因为需要运行我们的run.sh脚本文件来启动我们的Python项目
- CMD ["bash", "run.sh"] 执行脚本文件,因为我们的python项目需要跑多个.py文件,所以统一写到一个.sh脚本中。
run.sh内容根据自己项目逻辑写即可,本次项目对应的如下,详情请看我的Readme.md文档
nohup python3.8 generate_static_feature_csv.py --screen-data 1
wait
nohup python3.8 1disasseble.py
wait
nohup python3.8 2bytecode_extract.py
wait
nohup python3.8 3top500_n_gram_test.py
wait
nohup python3.8 top_intent_test.py
wait
nohup python3.8 4ngram_vec_test.py
wait
nohup python3.8 generate_static_feature_csv.py --screen-data 0
wait
nohup python3.8 merge_csv.py
wait
cat ./nohup.out
# just keep this script running
while [[ true ]]; do
sleep 1
done
wait:等待上一个命令运行结束才开始,而并非并行运行py文件。
最后一个无限循环的作用:使容器一直运行,不停下,以便后续操作。
二:创建Docker容器首先将文件移到linux服务器下的某个地方
- 构建镜像,命令如下
docker build -t
- 可以使用docker images查看自己所创建的镜像
- 启动容器,命令如下
docker run -it --name
- 使用docker ps -a可以发现我们刚才启动的容器已经Exited了,所以我们需要重新启动它,命令如下:
docker start ContainerName ContainerName是上一个命令创建的容器名字
- 启动后,该容器便会一直运行,docker ps 可以看到。
- 这样其实Docker容器便建立完成了,然后针对我们的项目需要添加一些东西。
这次我们需要到容器内部进行操作,命令如下:
docker exec -it ContainerName /bin/bash
进入后,ls查看文件如下:
[fangzy-stu@70 feature_extract]$ docker exec -it droidfeature /bin/bash root@dd0a2477c0fe:/code/feature_extract# ls 1disasseble.py 3top500_n_gram_test.py README.md apktool dataset infrastructure nohup.out permission_list2.txt requirements.txt top_intent_test.py 2bytecode_extract.py 4ngram_vec_test.py __pycache__ apktool.jar generate_static_feature_csv.py merge_csv.py permission_list.txt permission_list3.txt run.sh utils.py
可以看到我们现在已经在/code/feature_extract目录下了,跟Dockerfile中WORKDIR命令对应,可以自行查看docker容器根目录的情况。
3.1 更新apt-get命令:apt-get update
3.2 安装vim命令:apt-get install vim
3.3 安装java环境(ApkTool需要)首先需要找到linux的java安装包,去官网 找,注意需要复制验证过后浏览器弹出下载窗口的链接
wget mkdir /usr/local/java tar -zxvf jdk-8u301-linux-x64.tar.gz -C /usr/local/java3.4 设置java环境变量
vim /etc/profile
在末尾添加
export JAVA_HOME=/usr/local/java/jdk1.8.0_301
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
使环境变量生效
source /etc/profile
添加软链接
ln -s /usr/local/java/jdk1.8.0_301/bin/java /usr/bin/java
检查
java -version3.5 安装ApkTool (当然也可以自己手动添加已下好的ApkTool,下面是wget来的)
ApkTool官网
wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool -O /usr/local/bin/apktool chmod a+x /usr/local/bin/apktool wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.6.0.jar mv apktool_2.6.0.jar /usr/local/bin/apktool.jar
检查
apktool四:一些其他注意事项
在代码文件中,即.py文件,关于路径的变量:
- 将\换为/
- 当前路径不使用./,直接写文件即可,例:./dataset/malware ——》 dataset/malware



