【Docker】尝试撰写Dockerfile为windows提供执行linux项目程序的环境

任务需求

  • 总体项目的运行环境在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:focaldocker 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 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工具等的常用命令,便于自己查找
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值