任务需求
- 总体项目的运行环境在windows下
- 但某功能使用python在linux下实现,用到了第三方库
netzob
,其依赖目前只能在linux上安装 - 且python版本是3.6的!3.8、2.7都不行
- 因此,需要尝试在windows下执行这部分的代码
- 故,采用docker配置linux项目需要的环境,执行项目
实现步骤记录(尝试的过程)
1. 安装Docker桌面版
- 安装地址:https://www.docker.com/
2. 配置环境
控制面板
->程序和功能
->启用或关闭windows功能
:勾选windows虚拟机监控程序平台
和适用于Linux的Windows子系统
- 根据链接安装WSL:https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4—download-the-linux-kernel-update-package
- 指令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
、 - 指令:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- 重启电脑
- 下载Linux内核更新包
- 将WSL2设置为默认版本
- 指令:
3. 添加镜像加速源
设置
-Docker Engine
-增加"registry-mirrors": ["https://registry.docker-cn.com"]
- 没有成功,点击后一直为灰色图标,没有反应;再次进入或重启也没有保存修改的内容
4. 创建Linux容器
- pull一个Ubuntu镜像
- `docker pull ubuntu`下载的是最新版本的Ubuntu,目前已经是22.04
- pull指定版本的镜像
- 在https://hub.docker.com上检索ubuntu,点击tags进行查看
- 20.04版本对应的指令为:docker pull ubuntu:focal
或docker pull ubuntu:20.04
- 对应创建容器的指令:docker run --name ubuntu -ti ubuntu:20.04 bash
- 用镜像创建容器
docker run -it --name=testUbuntu ubuntu
5. 备注:
(1)删除容器和镜像的方法
- 查看运行的容器,要删除的容器不能处于运行状态
docker ps
- 备注:查看Docker所有容器的状态:
docker ps -a
- 备注:查看Docker所有容器的状态:
- 停止运行容器
docker stop CONTAINER ID
CONTAINER ID
可以只输入ID的前3位
- 删除容器
docker rm CONTAINER ID
- 查看镜像
docker images
- 删除镜像
docker rmi IMAGE ID
IMAGE ID
可以只取前3位
(2)终端启动docker容器且进入docker容器
- 启动docker容器
docker ps -a
docker start CONTAINER ID
- 进入docker容器
docker attach CONTAINER ID
(3)将文件从本地上传到docker容器
docker cp /本地路径地址 容器ID:/上传路径
(4)创建容器,且关联文件夹
docker run -it -p 8090:22 --name=test1 -v F:\本地文件夹:/home/code netzob_py36
- 8090端口号自己指定
- 本地文件夹路径:容器文件夹路径
- 最后是镜像的名称
6. 配置镜像
- 查看ubuntu版本
cat /etc/issue
- 配置镜像源
- 这步没做
- 备注:后来又补上了,直接写在了dockerfile文件中
7. 更新apt-get
并安装一些基础工具
- 更新
apt-get
apt-get update
- 安装常用工具
apt-get install -y vim
apt-get install -y tree
apt-get install -y net-tools
- 安装python3.6
- 备注:ubuntu20.04好像装不上python3.6,或者是需要设置软连接,后续没有继续使用ubuntun20.04了
apt-get install -y python3.6
- 安装pip3
apt-get install python3-pip
- 安装pip
apt-get install -y python-pip python-dev build-essential
8. 用Dockerfile创建镜像、容器
docker build -t netp18:v1 .
- 注意空格+点
最后的一版本的成功过程
0. 环境备注
- 基础镜像:ubuntu18.04
- python版本:3.6.10
- 目标:运行
netzob 1.0.2
1. 手动配置过程
- (1)拉取ubuntu18.04镜像,创建容器
- (2)
apt-get update
- (3)安装python3.6
apt-get install -y python3.6
- (4)安装pip3
apt-get install python3-pip
y
- (5)安装依赖
apt-get install
python3
python3-dev
python3-setuptools
virtualenv
y
build-essential
libpcap-dev
y
libgraph-easy-perl
y
libffi-dev
- (6)解决pip安装时报错问题
export LC_ALL=C.UTF-8
SOURCE ~/.bashrc
- 备注:
- 遇到的问题是,在使用
pip install
下载netzob
时,报错UnicodeDecodeError:'ascii' code can't decode byte 0xc3 in position 469:ordinal not in range(128)
- ubuntu系统
export LC_ALL=C.UTF-8
source ~/.bashrc
- 其他
export LC_CTYPE=en_US.UTF-8
source ~/.bashrc
- 遇到的问题是,在使用
- (7)安装所需要的第三方库
pip3 install numpy==1.19.5
pip3 install netzob==1.0.2
2. 将手动配置过程转换为Dockerfile文件
- (1)Dockerfile内容
FROM ubuntu:18.04
RUN yes y | apt-get update && yes y | apt upgrade
RUN yes y | apt-get install -y python3.6
RUN yes y | apt-get install python3-pip
RUN yes y | apt-get install virtualenv libpcap-dev
RUN yes y | apt-get install libgraph-easy-perl libffi-dev
ADD sources.list /etc/apt/
RUN LC_ALL=C.UTF-8 pip3 install numpy==1.19.5
RUN LC_ALL=C.UTF-8 pip3 install netzob==1.0.2
RUN pip3 install lxml==4.9.2
RUN mkdir /home/code
- (2)准备换镜像源的文档
sources.list
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
- (3)需要注意的地方
- 注意记录过程中要输入
y
的步骤,补充到dockerfile里面,不过好像RUN yes y
都写上也没关系? - 注意
RUN LC_ALL=C.UTF-8 pip3 install numpy==1.19.5
,解决安装时的编码问题的命令格式- 之前版本是将这个命令拆开写,而且其要求在bash?(记不清了)下输入
- 但是那样的话,运行不报错,但是似乎不起作用,因为在pip3 install的时候仍然有错误
- 之后改为这样,就没错了~
- 注意记录过程中要输入
项目反思
1. 先明确怎么做,再动手,而不是尝试
- 首先就要明确,自己需要什么样的环境,比如操作系统、python版本、第三方库的依赖等等
- 然后再去调研有什么方法或版本能实现需求
- 而不是通篇尝试,看看谁能符合自己的需求,这在项目中比较浪费时间,领导不允许
- 比如这次,尝试了ubuntu18.04、ubuntu20.04、debian、centos7等都没成,最后发现要py3.6环境,且也成功检索到当时遇到的问题的解决方案
- 但是就是在不断尝试、不成功、重新来的过程中耗费了大量的时间和精力
2. 注意记录
- 本次流程还好有草稿、typora的过程记录,有的有效指令不用再记忆或者查找,流程也逐渐清晰
- 之后应该总结一下linux、docker、android工具等的常用命令,便于自己查找