原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。
前言
我这里学的有限,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 阿里云