人工智能算法Docker容器化部署

1. Windows子系统

1.1 Windows子系统简介

        Windows引入子系统是为了增强操作系统的兼容性。Windows子系统允许在Windows操作系统上运行其他操作系统的一些组件,最突出的是Windows Subsystem for Linux (WSL),它允许在Windows上运行Linux发行版。

1.2 Windows子系统安装

1.2.1 Ubuntu子系统安装

步骤 1:Windows 11上启用 Hyper-V 和 Windows 虚拟化平台

  1. 打开 Windows 设置Win + I 键;
  2. 转到 “应用程序” 部分,然后选择 “可选功能”;
  3. 在 “可选功能” 页面上,点击 “更多Windows功能”;
  4. 选中"Hyper-V" 和 “Windows沙盒”,然后点击 “确定”;
  5. 重启计算机。

步骤 2:列出计算机上当前已安装的WSL子系统

wslconfig /l
|——— wslconfig
	|——— 管理 WSL 配置的命令行工具
|——— /l
	|——— wslconfig命令的一个参数, 表示列出已安装的WSL子系统。

# 效果
Microsoft Windows [版本 10.0.22621.2134]
(c) Microsoft Corporation。保留所有权利。

C:\Users\LeeWentsao>wslconfig /l
适用于 Linux 的 Windows 子系统分发:
CentOS7 (默认)
Ubuntu

C:\Users\LeeWentsao>wslconfig /unregister Ubuntu
正在注销。
操作成功完成。

C:\Users\LeeWentsao>wslconfig /l
适用于 Linux 的 Windows 子系统没有已安装的分发。

使用 'wsl.exe --list --online' 列出可用的分发
并使用 'wsl.exe --install <Distro>' 进行安装。

也可以通过访问 Microsoft Store 安装分发:
https://aka.ms/wslstore
Error code: WslConfig/WSL_E_DEFAULT_DISTRO_NOT_FOUND

步骤 3:打开Microsoft Store

步骤 4:搜索Ubuntu,并点击打开

第五步:设置用户名和密码(见黄色字体)

1.2.2 CentOS子系统安装

        在Windows Subsystem for Linux (WSL) 中安装 CentOS 7 需要执行一下步骤:
步骤 1:打开 PowerShell 作为管理员,运行以下命令启用 WSL.

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

步骤 2:启用虚拟机平台功能.

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

步骤 3:下载文件CentOS镜像.

https://github.com/wsldl-pg/CentWSL/releases/tag/8.1.1911.1

步骤 4:解压CentOS压缩文件.

步骤 5:双击CentOS7.exe,进行安装.

步骤 6:按回车键,结束命令(按命令指示执行),安装后的文件目录:

步骤 7:双击CentOS7.exe,打开CentOS7系统.

步骤 8:上传windows文件到CentOS7系统.

2. Docker安装

2.1 Ubuntu安装docker

步骤 1:打开WSL终端,确保已经安装适用于WSL的Linux发行版
步骤 2:更新系统的软件包列表和已安装的软件包:

sudo apt update
sudo apt upgrade
 - sudo 英文全称为“Super User Do”, 表示以超级用户的身份执行指定命令
 - apt  英文全称为“Advanced Package Tool”包管理工具,用于安装,更新和删除软件包。

步骤 3:安装docker的依赖:

sudo apt install apt-transport-https ca-certificates curl software-properties-common
 - apt-tansport-https: 这个软件包允许在HTTPS协议下使用apt来进行软件包的下载和更新
 - ca-certificates: 用于验证HTTPS链接中的SSL证书,以确保安全连接。
 - curl: 在命令中进行网络请求和数据传输工具。
 - software-properties-common: 用于管理软件源和软件包的常用工具。

步骤 4:添加docker官方GPG密钥:

sudo apt install apt-transport-https ca-certificates curl software-properties-common
 - apt-tansport-https: 这个软件包允许在HTTPS协议下使用apt来进行软件包的下载和更新
 - ca-certificates: 用于验证HTTPS链接中的SSL证书,以确保安全连接。
 - curl: 在命令中进行网络请求和数据传输工具。
 - software-properties-common: 用于管理软件源和软件包的常用工具。

步骤 5:添加docker软件源:

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

步骤 6:更新软件包列表并安装docker:

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

步骤 7:验证docker安装是否成功:

docker --version

步骤 8:不需使用sodo运行docker:

sudo usermod -aG docker $USER

2.2 Centos7安装docker

步骤 1:更新系统包:
在安装Docker之前,建议首先更新系统包,以确保系统上的软件包列表是最新的:

sudo yum update

步骤 2:添加Docker仓库:
官方仓库包含了最新的Docker软件包,可以提供更好的支持和可靠性。官方仓库还会处理Docker所需的依赖关系,确保你的系统上安装了必要的库和工具。

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

步骤 3:安装Docker:
安装Docker CE(社区版)。

sudo yum install docker-ce

步骤 4:验证安装:
运行以下命令来验证Docker是否已成功安装。

sudo docker --version

步骤 5:启动docker应用:
在WSL2中无法使用systemd启动服务,因此一般是手动启动服务,如docker,安装完docker后可通过如下命令启动,其他服务也是类似的启动方式。

nohup  /usr/bin/dockerd &

|—— nohup
	用于运行一个命令,并且不会受到终端关闭的影响。它将命令的输出重定向到一个名为nohup.out的文件,以便你可以在后台运行它而不会中断。
|—— /usr/bin/dockerd
	这是要运行的命令,它是Docker守护进程的可执行文件路径,dockerd负责管理Docker容器和镜像。
|—— &
	用于将命令置于后台运行。这意味着命令会在后台运行,你可以继续使用终端输入其他命令,而不必等待dockerd命令完成。

3. 创建、打包和下载Docker镜像

步骤 1:创建base_image.dockerfile文件,文件内容如下:

FROM python:3.6.5-slim       # 指出构建Docker镜像时使用的基础镜像
WORKDIR /app                 # 设置工作目录,即在容器内部执行命令的默认目录

COPY ./requirements.txt /app/      # 将当前目录下的算法文件复制到容器目录下
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple  # 置换镜像
RUN pip install --upgrade pip              # 升级pip
RUN pip install -r /app/requirements.txt   # 批量安装python依赖

其中,requirements.txt文件内容如下:

joblib==1.0.0
numpy==1.19.5
gmssl==3.2.1
xlrd==1.1.0
pandas==1.1.5
scipy==1.5.4
scikit-learn==0.23.1
flask == 2.0.3
gevent == 22.10.2
xgboost==1.3.1
statsmodels
pyyaml

步骤 2:构建基础镜像:

 docker build -t base_image:0.0.0 -f base_image.dockerfile .

步骤 3:验证镜像:

  1. 运行以下命令来查看已构建的镜像列表,确保base_image:0.0.0已成功构建:
docker images

该命令列出所有已安装的镜像,可以看到base_image的名称以及标签0.0.0。

  1. 如果镜像已成功构建,可以使用以下命令来运行一个临时容器并查看其内容:
docker run -it --rm base_image:0.0.0 /bin/bash

|—— docker run
	该命令告诉Docker启动一个新的容器。
|—— -it
	-i 或 --interactive: 允许与容器的标准输入(stdin)进行交互,也就是说,你可以向容器发送输入。
	-t 或 --tty: 分配一个伪终端(TTY),这样你可以在容器内部启动一个交互式终端会话。
|—— --rm
	这个选项告诉Docker在退出容器时自动删除容器。
|—— base_image:0.0.0
	运行的容器的名称和标签。在这个命令中,base_image是之前构建的基础镜像的名称,0.0.0是标签(版本号)。
|—— /bin/bash
	这是在容器内运行的命令。具体来说,这个命令告诉Docker在容器内启动Bash shell(终端)。

步骤 4:创建update.dockerfile文件,文件内容如下:

FROM base_image:0.0.0
|—— 该指令使用了之前创建的base_image:0.0.0作为基础镜像。这意味着在基于base_image构建一个新的镜像,后续步骤将在这个基础上进行。

COPY ./<算法目录名称>/ /app
|—— 这行指令将本地文件从<算法目录名称>复制到了容器内的/app目录中。这是将算法文件添加到容器的一种方式,使得容器中可以运行算法。

CMD ["python", "/app/service.py", "0.0.0.0", "8000"]
|—— 这是Docker容器的启动命令。它告诉Docker在容器内运行Python脚本/app/service.py,并将参数0.0.0.0和8000传递给脚本。

步骤 5:构建算法镜像:

 docker build -t xx_image:0.0.0 -f update.dockerfile .

步骤 6:启动镜像:

docker run -itd -p 8080:8080 --name efi xx_image:0.0.0

|—— -itd
	|—— -i 
		以交互模式运行容器.
	|—— -t 
		为容器分配一个终端.
	|—— -d 
		在后台以守护进程模式运行容器.
|—— -p 8080:8080:
	将容器端口映射到主机端口,这样就可以通过主机端口访问容器内部的服务.
|—— --name efi:
	给容器指定一个名称.
|—— xx_image:0.0.0:
	使用镜像及版本号.

步骤 7:查看日志:

docker logs -f efi

|—— docker logs
	查看容器的日志.
|—— -f
	该选项表示 "follow",它告诉Docker跟踪容器的日志输出。也就是说,它会持续显示新的日志内容,就像 tail -f 命令一样。
|—— efi
	查看日志的容器的名称或容器ID。

步骤 8:将 Docker 镜像打包成tar归档文件:

docker save -o algorithm-image.tar xx_image:0.0.0

|—— docker save:
	将Docker镜像保存为tar文件
|—— -o algorithm-image.tar:
	-o: 输出选项
	algorithm-image.tar: 输出文件名称
|—— xx_image:0.0.0
	镜像和版本号

步骤 9:更改文件权限,并下载:

sudo chmod 777 algorithm-image.tar

4. 常见问题

4.1 端口问题

  1. 问题描述:Docker镜像端口占用
ef@ef-AI:Anhui_project$ docker run -itd -p 8080:5000 --name ef7 efalgorithm_pl:1.0.0.0
dfa377b4715efc364a807e7a8a39311cb75e86fdbd214270c50f1c90ba635088
docker: Error response from daemon: driver failed programming external connectivity on endpoint ef7 (240183f85d772733c0986676ab829c5c7344c4a5b1c71e6e74746833ea0cea08): Bind for 0.0.0.0:8080 failed: port is already allocated.
  1. 解决方案:
docker ps --all
docker stop ef7
或
docker rm ef7
## 4.2 加载docker镜像
1. 问题描述:如何将别人发的docker镜像加载到服务器上, 并查看docker目录,将docker目录文件copy到本地。
```bash
# 加载docker镜像
docker load -i henan_image0.0.0.tar 
	|—— docker 用于执行各种 Docker 相关操作;
	|—— load   用于加载(导入)一个镜像;
	|—— -i: 这是一个选项,表示接下来的参数是一个输入文件(input file);
	|—— henan_image0.0.0.tar 这是要加载的 Docker 镜像的 .tar 压缩文件的路径.

# 启动docker服务(详见步骤6)

# 查看docker目录
docker exec -it <容器名称或id> ls /app
	|—— docker 用于执行各种 Docker 相关操作;
	|—— exec   用于在容器中执行命令;
	|—— -it    它们一起用于创建一个交互式的终端会话(TTY)
		|—— -i(--interactive) 允许你在容器中输入命令;
		|—— -t(--tty)         分配一个伪终端(TTY),使得你可以与容器中的命令进行交互。
	|——          容器名称或id 容器名称或ID。
	|—— ls /app	 用于列出容器内的文件和目录。/app 是要列出的目标目录。

# 拷贝docker目录
docker cp <容器名称或id>:/app ./
	|—— docker 用于执行各种Docker相关操作;
	|—— cp     用于复制文件或目录。
	|—— <容器名称或ID>	复制文件的 Docker 容器的名称或容器 ID;
		|—— /app  :/app     表示要复制的容器内路径,即容器内的 /app 目;
	|—— ./     将文件或目录复制到当前工作目录。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值