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

本文详细介绍了Docker的基本使用,包括安装、管理镜像和容器,以及如何使用Docker部署Jupyter环境,还涉及镜像加速和在阿里云上的应用。此外,文章还讲解了如何在容器内更换软件源和备份移植镜像。
摘要由CSDN通过智能技术生成

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



前言

我这里学的有限,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

run具有很多参数,其中-d(–detach)参数不会进入容器,包括-h(–hostname)主机名、-p(–publish)端口映射、–name容器名称、-v(–volume)目录挂载等主要参数。–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 -it <容器 name> /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

在这里插入图片描述

三、docker容器更换软件源(linux源为阿里)

# 1.进入容器
docker exec -it <容器 ID> /bin/bash

# 命令行更换源
sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list
sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list

在这里插入图片描述

四、部署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

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配置

# 1.进入容器
docker exec -it <容器 ID> /bin/bash
# 生成配置文件,默认位置:/root/.jupyter/jupyter_notebook_config.py
jupyter notebook --generate-config

# 启动ipython
ipython
# 键入如下命令
from notebook.auth import passwd
# 生成秘钥 密码:tianyi2023
passwd() 
# 退出Python,先保存秘钥
exit
# 2.退出容器
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
# 3.再次进入容器
docker exec -it <容器 ID> /bin/bash
# 后台启动
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 阿里云

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我辈李想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值