【数据分析】如何使用docker部署程序并移植(算法、接口)

原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。


文章目录

  • 前言
  • 一、Docker的基本使用
    • 1.安装Docker
    • 2.列出本地镜像
    • 3.获取镜像,创建本地ubuntu:13.10镜像
    • 4.查找镜像
    • 5.删除本地镜像
    • 6.创建自定义镜像
    • 7.镜像标签
    • 8.启动容器
    • 9.查看所有容器
    • 10.停止容器
    • 11.重启容器
    • 12.进入容器
    • 13.删除容器
  • 二、镜像加速
  • 三、部署jupyter+环境+算法
    • 1.在本地创建一个新的文件夹,用于存储Jupyter的配置文件和数据
    • 2.在终端中输入以下命令拉取Jupyter镜像
    • 3.使用以下命令运行容器,将Jupyter服务映射到本地端口8888,并将本地文件夹映射到容器中以便访问数据文件和配置文件
    • 4.运行以上命令后,终端会返回一个容器的ID,使用以下命令可以查看容器是否正常运行
    • 5.设置环境
    • 6.算法检验
    • 7.本地资料存储至容器
    • 8.修改jupyrt配置
  • 四、镜像备份和移植
    • 1.镜像备份到本地
    • 2.后服务器加载备份
    • 3.镜像备份至镜像平台
    • 4.安装平台备份


前言

我这里学的有限,docker部署程序就以算法、接口为例。移植涉及到2个服务器,我们把移植前服务器称为前服务器,移植后的服务器称为后服务器。

一、Docker的基本使用

1.安装Docker

# 卸载旧docker
sudo apt-get remove docker docker.io containerd runc
# 安装新docker
sudo apt update && sudo apt upgrade -y
sudo apt install docker docker.io
# docker信息
docker info

docker镜像操作

2.列出本地镜像

sudo docker images 

其中REPOSITORY:表示镜像的仓库源,TAG:镜像的标签,IMAGE ID:镜像ID,CREATED:镜像创建时间,SIZE:镜像大小。

3.获取镜像,创建本地ubuntu:13.10镜像

sudo docker pull ubuntu:13.10

4.查找镜像

sudo docker search httpd

5.删除本地镜像

sudo docker rmi hello-world

其中hello-world为本地镜像名字,可通过sudo docker images 查看。

6.创建自定义镜像

1.从已经创建的容器中更新镜像,并且提交这个镜像
2.使用 Dockerfile 指令来创建一个新的镜像

7.镜像标签

sudo docker tag 860c279d2fec runoob/centos:dev

docker容器操作

8.启动容器

命令行启动并进入容器

sudo docker run -it ubuntu /bin/bash

后端运行容器

docker run -itd --name ubuntu-test ubuntu /bin/bash

其中-d参数不会进入容器,run具有很多参数,包括-h、-p、-n、-v等主要参数。–gpus all表示使用gpu计算。
可以参考如下示例:

sudo docker run --detach \
--hostname 202.182.104.229 \
--publish 443:443 --publish 80:80 --publish 9922:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest

9.查看所有容器

sudo docker ps -a

其中-a表示所有,其中CONTAINER ID:表示容器id,IMAGE:容器名字,COMMAND:命令,CREATED:创建时间,STATUS:运行状态,PORTS:端口,NAMES:名字。

10.停止容器

sudo docker stop <容器 ID>

11.重启容器

docker restart <容器 ID>

12.进入容器

docker attach <容器 ID>
docker exec -it <容器 ID> /bin/bash

推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

13.删除容器

sudo docker rm -f <容器 ID>

二、镜像加速

在国内环境下,我们需要设置镜像加速,要不很多镜像都是timeout错误。这里使用的是阿里的镜像加速器。需要注册阿里云平台,设置镜像加速,链接:https://cr.console.aliyun.com/cn-beijing/instances/mirrors。只需要对应系统的shell命令,逐条执行即可.
其中registry-mirrors参数每个账户都不同。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://5afmvkgl.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

在这里插入图片描述

三、部署jupyter+环境+算法

1.在本地创建一个新的文件夹,用于存储Jupyter的配置文件和数据

mkdir /home/user/jupyter_notebooks

2.在终端中输入以下命令拉取Jupyter镜像

docker search anaconda
docker pull continuumio/anaconda3

3.使用以下命令运行容器,将Jupyter服务映射到本地端口8888,并将本地文件夹映射到容器中以便访问数据文件和配置文件

docker run --restart=always -idt -p 8008:8008 --name=docker_anaconda  -v /home/user/jupyter_notebooks:/home/jupyter_book continuumio/anaconda3

其中,/home/user/jupyter_notebooks是你本地文件夹的绝对路径,/home是Jupyter容器中的工作目录,可以在容器中使用Jupyter notebook打开,进行文件操作。

4.运行以上命令后,终端会返回一个容器的ID,使用以下命令可以查看容器是否正常运行

docker ps

如果容器正常运行,可以在浏览器中使用以下地址访问Jupyter服务:http://localhost:8008

5.设置环境

# 进入容器
docker exec -it <容器 ID> /bin/bash
# 安装环境
pip install -r reque.txt
# 启动jupyter
jupyter notebook --port 8008 --ip 0.0.0.0 --allow-root

6.算法检验

http://localhost:8888

7.本地资料存储至容器

docker cp /usr/local/anaconda3/envs/pytorch/ docker_anaconda:/opt/conda/envs

8.修改jupyrt配置

# 启动ipython
ipython
# 键入如下命令
from notebook.auth import passwd
# 生成秘钥 密码:tianyi2023
passwd() 
# 退出Python,先保存秘钥
exit

# 将容器jupyter_notebook_config.py复制到宿主服务器,进行修改
sudo docker cp docker_anaconda:/root/.jupyter/jupyter_notebook_config.py jupyter_notebook_config.py

# sudo vim  jupyter_notebook_config.py
# jupyter_notebook_config.py 尾部追加内容
c.NotebookApp.notebook_dir ='/home/jupyter_book' # 默认打开位置
c.NotebookApp.ip='*'  # 星号代表任意ip,这个跟mysql的权限设置相似
c.NotebookApp.allow_root =True # 允许root运行
c.NotebookApp.allow_remote_access = True  # 允许远程登入
c.NotebookApp.open_browser = False    # 建议,默认不自动打开浏览器
c.NotebookApp.password = 'argon2:$argon2id$v=19$m=10240,t=10,p=8$7tpuYVkZ6Fmlwg0UqEEXZg$b73XgSIfxCjQEKcBcuBbaw'	# 输入生成的密钥
c.NotebookApp.port =8008            # 端口号冲突可以设置为9999


# 修改完将jupyter_notebook_config.py复制到容器的原位置
sudo docker cp jupyter_notebook_config.py docker_anaconda:/root/.jupyter/jupyter_notebook_config.py

# 后台启动
nohup jupyter notebook --allow-root > jupyter.log 2>&1 &

四、镜像备份和移植

1.镜像备份到本地

docker commit -m="正式版" -a="李朋飞" 895d61c1f5ab water/conda:v1
docker tag 1a3ab3bd9547 water/conda:v1

其中895d61c1f5ab 是容器id, 1a3ab3bd9547是water/conda的镜像id

docker save -o MyWater.tar water/conda:v1

其中MyWater是我们的本地备份,可以下载,移植到其他服务器。

2.后服务器加载备份

sudo docker ps
sudo docker load --input MyWater.tar
docker run -d -p 8888:8888 -v /home/user/jupyter_notebooks:/home/jupyter_book 镜像id

3.镜像备份至镜像平台

这里国内常用的是阿里云镜像。具体使用请点击链接:

4.安装平台备份

这里国内常用的是阿里云镜像。具体使用请点击链接:
Docker保存,加载镜像及发布镜像到Docker Hub 阿里云

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/30906.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第一章 基础算法(二)——高精度,前缀和与差分

文章目录 高精度运算高精度加法高精度减法高精度乘法高精度除法 前缀和二维前缀和 差分二维差分 高精度练习题791. 高精度加法792. 高精度减法793. 高精度乘法794. 高精度除法 前缀和练习题795. 前缀和796. 子矩阵的和 差分练习题797. 差分798. 差分矩阵 高精度运算 两个大数做…

【Unity Shader】从入门到感慨(2)用C#画一个立方体

文章目录 一、构成一个立方需要多少个顶点?二、定义三角面的索引数组:三、定义UV坐标数组:四、最后构建Mesh:五、完整代码:一、构成一个立方需要多少个顶点? 这个问题是面试经常被问到的题。如上图,我们知道在几何中立方体有6个面,8个顶点。但在图形学中,顶点指的是模…

翻过那座山——Gitlab流水线任务疑难之编译有子模块的项目指南

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;新的征程&#xff0c;我们面对的不是…

QT入门基础知识

什么是QT QT是一个跨平台的C图像用户界面应用程序框架QT在1991年由奇趣科技开发QT的优点 跨平台,几乎支持所有平台接口简单&#xff0c;容易上手一定程度上简化了内存回收机制有很好的社区氛围可以进行嵌入式开发 QWidget QT注意事项 命名规范 类名 首字母大写&#xff0c;单…

golang vscode环境报错gopls was not able to find modules in your workspace的解决方式

目录 错误提示 分析 解决方式 方法一&#xff1a;将workspace与项目路径保持一致 方案二&#xff1a;使用go work指明纳入工作区的的module 总结 错误提示 golang从老版本升级到go1.20.5后打开vscode&#xff0c;发现代码不能自动补全了&#xff0c;而且vscode跳出一下的…

微服务基础介绍

Part1一、基本概念 微服务最主要的功能是根据业务拆分成一个一个的子服务&#xff0c;实现功能的去耦合&#xff0c;每一个微服务提供单个业务功能的服务&#xff0c;各司其职&#xff0c;从技术角度看就是一种灵活独立的单元&#xff0c;能够自行单独启动和关闭&#xff0c;一…

Docker学习笔记1

PaaS&#xff1a; 一、虚拟化分类&#xff1a; 虚拟化资源提供者&#xff1a; 1&#xff09;硬件平台虚拟化 2&#xff09;操作系统虚拟化 虚拟化实现方式&#xff1a; type I: 半虚拟化 type II&#xff1a;硬件辅助全虚拟化 type III&#xff1a; 软件全虚拟化&#xff1a; …

【C++】模版进阶

目录 一、非类型模版参数二、模板的特化1、概念2、函数模版特化3、类模板特化1.全特化2.偏特化3.类模板特化应用示例 三、模版分离编译1、什么是分离编译2、模板的分离编译3、模板的优缺点 一、非类型模版参数 模版参数分为类型模版参数与非类型模版参数 类型模版参数&#x…

[进阶]网络通信:UDP通信,一发一收、多发多收

UDP通信 特点&#xff1a;无连接、不可靠通信。不事先建立连接&#xff1b;发送端每次把要发送的数据&#xff08;限制在64KB内&#xff09;、接收端1P、等信息封装成一个数据包&#xff0c;发出去就不管了。Java提供了一个java.net.Datagramsocket类来实现UDP通信。 Datagram…

Springboot项目使用原生Websocket

目录 1.启用Websocket功能2.封装操作websocket session的工具3.保存websocket session的接口4.保存websocket session的类5.定义websocket 端点6.创建定时任务 ping websocket 客户端 1.启用Websocket功能 package com.xxx.robot.config;import org.springframework.context.a…

NSSCTF MOBILE [SWPU 2019]easyapp 详细题解

文章目录 一. 前言二. 安装安卓SDK三. 安装安卓模拟器(推荐夜神模拟器)四. 安装frida和objection五. 解题过程六. 总结 一. 前言 题目地址:[SWPU 2019]easyapp大佬题解[SWPU 2019]easyapp pwjcw的WriteUp 大佬的题解很简单,直接hook就可以看到返回值,但是我看了半天没看明白是…

Redis简介

Redis是基于内存&#xff0c;也可以基于磁盘持久化nosql数据库&#xff0c;使用c语言开发。 数据存储结构&#xff1a;key-value 安装环境准备 Redis使用c语言开发&#xff0c;需要使用gcc编译程序进行编译。 1&#xff09; 安装gcc a) 从磁盘镜像中进行安装&#xff1a;&…

决策树分类算法

#CSDN AI写作助手创作测评 目录 ID3算法 1.算法原理 2.代码实现 3.ID3算法的优缺点分析 C4.5算法 1.原理 2.优缺点 心得感受 决策树表示方法是应用最广泛的逻辑方法之一&#xff0c;它从一组无次序、无规则的事例中推理出决策树表示形式的分类规则。在决策树的内部…

Java集合详解

集合详解 1、集合&#xff0c;也可以说是容器。由两大接口派生而来&#xff0c;一个是collection&#xff0c;主要用于存储单一元素&#xff1b;另一个是map接口&#xff0c;主要用于存储键值对。 Collection接口 Map接口 2、集合和数组 在之前我们保存多个数据可以使用数组…

Tcl常用命令备忘录-正则命令篇

正则表达式是一种用于匹配、查找、替换文本中特定模式的工具。在Tcl脚本中&#xff0c;可以使用正则表达式对字符串进行匹配、查找和替换。 regexp 语法&#xff1a; regexp ?选项? 正则表达式 字符串 ?变量1 变量2 ...? 其中&#xff0c;?选项?为可选项&#xff0c;…

Spring Security OAuth2授权原理、流程与源码解读

文章目录 前言AuthorizationServerConfigurerAdapter(身份认证服务配置适配器)OAuth2AuthorizationServerConfiguration(OAuth2授权服务配置) EnableAuthorizationServer(开启身份认证服务)AuthorizationServerEndpointsConfigurations身份认证服务站点配置类AuthorizationEndp…

Qt编写精美输入法(历时十年迭代/可换肤/支持Qt4/5/6/win/linux/mac/嵌入式等)

一、前言 大概是从2012年就开始研究用Qt写输入法&#xff0c;因为项目需要&#xff0c;嵌入式板子上&#xff0c;没有对应的输入法&#xff0c;当初使用过很多NVR&#xff0c;里面也是鼠标按下弹出输入法面板进行输入&#xff0c;可以切换数字和字母及中文&#xff0c;于是借鉴…

jmeter如何进行http压力测试

目录 前言&#xff1a; 1、添加线程组&#xff1a; 2、添加采样器&#xff1a; 3、添加监视器 压力测试知识说明 前言&#xff1a; JMeter是一个基于Java的开源压力测试工具&#xff0c;可用于评估Web应用程序的性能&#xff0c;包括HTTP、HTTPS、FTP、SOAP、Restful、JD…

Oracle-高版本SQL优化分析(bind mismatch)

背景: 接到用户报障说一套Oracle19c数据库近期出现insert语句执行变慢的情况&#xff0c;执行一次数据插入需要1秒的时间&#xff0c;而且问题发生的数据库是跑在一体机上面&#xff0c;数据插入正常不应该这么慢&#xff0c;需要分析插入慢的原因 问题: 数据库近期出现insert…

StarRocks 文章收集

StarRocks在58的实践 StarRocks在58的实践 - 墨天轮StarRocks在58的实践 --2022-06-08https://www.modb.pro/db/639611 StarRocks之系统架构 StarRocks之系统架构 - 墨天轮https://www.modb.pro/db/610300 StarRocks小规模集群部署最佳实践(1/2) 0016.S StarRocks小规模集…