docker安装 nvidia-docker安装 拉取ubuntu镜像 部署paddlepaddleOCR项目
- 1、docker安装
- 设置存储库:
- 安装DOCKER CE:
- 2、 nvidia-docker安装
- nvidia-docker部署问题
- 3、配置本机Docker运行镜像加速器
- 4、docker常用指令
- 1、帮助命令
- 2、镜像命令
- 3、查找镜像命令
- 4、拉取镜像指令
- 5、删除镜像指令
- 6、创建容器指令
- 7、列出当前所有正在运行的容器
- 8、退出容器
- 9 、启动容器
- 10、重启容器
- 11、停止容器
- 12、删除已停止的容器
- 13、查看容器日志
- 14、查看容器内的进程
- 15、查看容器内部细节
- 16、进入正在运行的容器并以命令行交互(进入容器先先启动容器)
- 16、数据拷贝
- 17、将容器转化为镜像
- 18、Docker容器数据卷
- 19、利用Dockerfile构建镜像
- 20、查看镜像被其他哪些镜像所依赖的指令
- 使用dockerfile文件构建ubuntu镜像
- 1、新建文件夹
- 2、创建Dockerfile文件,文件内容如下
- 3、创建provision.sh脚本,内容如下:
- 4、创建镜像
- 使用docker exec -it 在不进入容器内部的情况下执行指令:
- 5、拉取paddlepaddle的docker镜像
- 6、将本地镜像推送到阿里云
1、docker安装
以ubuntu为例
设置存储库:
# 1. 更新apt包索引
sudo apt-get update
# 2. 安装包以允许apt通过HTTPS使用存储库
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 3. 添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 4. 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88通过搜索指纹的最后8个字符,验证您现在拥有带指纹的密钥 。一般都是一样的秘钥
sudo apt-key fingerprint 0EBFCD88
"""
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
"""
# 5. 设置稳定存储库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
安装DOCKER CE:
# 1. 更新apt包索引
sudo apt-get update
# 2. 安装最新版本的Docker CE和containerd,或者转到下一步安装特定版本
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 3. 列出当前仓库可用版本
apt-cache madison docker-ce
# 4. 根据显示的版本选择其中一个进行安装,比如目前我写这篇最新的为5:18.09.1~3-0~ubuntu-xenial
sudo apt-get install docker-ce=5:18.09.1~3-0~ubuntu-xenial docker-ce-cli=5:18.09.1~3-0~ubuntu-xenial containerd.io
当安装成功后,我们可以利用docker -version进行查看当前情况
$ docker -version
unknown shorthand flag: 'e' in -ersion
See 'docker --help'.
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/root/.docker")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal")
(default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default
"/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
Management Commands:
builder Manage builds
checkpoint Manage checkpoints
config Manage Docker configs
container Manage containers
engine Manage the docker engine
image Manage images
manifest Manage Docker image manifests and manifest lists
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
Commands:
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
deploy Deploy a new stack or update an existing stack
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
Run 'docker COMMAND --help' for more information on a command.
2、 nvidia-docker安装
curl https://get.docker.com | sh
sudo systemctl start docker && sudo systemctl enable docker
# 设置stable存储库和GPG密钥:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
# 要访问experimental诸如WSL上的CUDA或A100上的新MIG功能之类的功能,您可能需要将experimental分支添加到存储库列表中.
# 可加可不加
curl -s -L https://nvidia.github.io/nvidia-container-runtime/experimental/$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
# nvidia-docker2更新软件包清单后,安装软件包(和依赖项):
sudo apt-get update
sudo apt-get install -y nvidia-docker2
# 设置默认运行时后,重新启动Docker守护程序以完成安装:
sudo systemctl restart docker
到此如果没有什么没问题,ubuntu的nvidia-docker就此安装成功
nvidia-docker部署问题
我们可以运行nvidia给的测试镜像
# nvidia-docker:nvidia-container-toolkit的安装方式
docker run --gpus=all --rm nvidia/cuda:10.0-base nvidia-smi
# nvidia-docker2
docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all --rm nvidia/cuda:10.0-base nvidia-smi
or
nvidia-docker run -e NVIDIA_VISIBLE_DEVICES=all --rm nvidia/cuda:10.0-base nvidia-smi
3、配置本机Docker运行镜像加速器
鉴于国内网络问题,后续拉取Docker镜像十分缓慢,我们可以需要配置加速器来解决,
4、docker常用指令
1、帮助命令
docker Version # 查看docker版本信息
docker info # 查看docke详细信息
docker --help
2、镜像命令
docker images 列出本机上的镜像
3、查找镜像命令
docker search 某个XXX镜像的名字
4、拉取镜像指令
docker pull 某个镜像的名字
5、删除镜像指令
docker rmi 某个XXX镜像的名字ID
6、创建容器指令
docker run -it -d -p 11883:45055 --restart=always --name 容器名 镜像ID /bin/bash ./run.sh
#-d 后台运行 -p 指定端口映射 11883 主机端口 45055容器端口 --restart=always 容器开机自启动
# /bin/bash ./run.sh 容器启动时自动运行脚本
举例:
nvidia-docker run --runtime=nvidia -it -p 8888:8081 --name gqr_ocr d07b41e8c86f /bin/bash
# gqr_ocr :为容器名;d07b41e8c86f:为镜像ID
全面的写法举例:
docker run -d -p 9080:8080 -name myt9
-v /zyuse/mydockerfiletomcat9/test:/usrlocal/apache-tomcat9.0.8/webapps/test
-v /zzyyuse/mydockerfile/tomcat9/tomcat9logs/:/usrlocal/apache-tomcat-9.0.8/logs -privileged=true zzyytomcat9
7、列出当前所有正在运行的容器
docker ps [OPTIONS]
8、退出容器
两种退出方式
exit # 容器停止退出
ctrl+P+Q # 容器不停止退出
9 、启动容器
docker start 容器ID或容器签名
10、重启容器
docker restart 容器ID或容器签名
11、停止容器
docker stop 容器ID或容器签名
12、删除已停止的容器
docker rm -f 容器ID # -f:表示强制删除
一次性删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
13、查看容器日志
docker logs -f -t --tail 容器ID
# -t 是加入时间戳
# -f 跟随最新的日志打印
# --tail 数字显示最后多少条
14、查看容器内的进程
docker top 容器ID
15、查看容器内部细节
docker inspect 容器ID
16、进入正在运行的容器并以命令行交互(进入容器先先启动容器)
docker start 容器ID或名称
docker exec -it 容器ID或容器名 /bin/bash # 进入容器指令
16、数据拷贝
docker cp 本地文件路径 容器id:路径 # 本地到容器
docker cp 容器id:文件路径 本地路径 # 容器到本地
17、将容器转化为镜像
docker commit 容器名称 镜像名称
18、Docker容器数据卷
docker run -it -v /宿主机绝对路径目录:/容器内目录 --name 容器名 镜像名
容器间传递共享(–volumes -from)
19、利用Dockerfile构建镜像
Dockerfile是用来构建Docker镜像的构建文件,由一系列命令和参数构成的脚本
20、查看镜像被其他哪些镜像所依赖的指令
当删除镜像时会出现以下报错,主要原因是该镜像被其他镜像所依赖,需要查找出依赖于该镜像的其它镜像
docker rmi 593b81400043
Error response from daemon: conflict: unable to delete 593b81400043 (cannot be forced) - image has dependent child images
查询语句:
docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=xxxxxx)
其中 xxxxxx 是报错 image 的 id,在文章开头的例子中就是 6ec9a5a0fc9f。从列表中查找到之后就可以核对并删除这些 image。
使用dockerfile文件构建ubuntu镜像
步骤
1、新建文件夹
mkdir docker_test
cd docker_test
2、创建Dockerfile文件,文件内容如下
FROM ubuntu:16.04
MAINTAINER LXY
ENV LANG C.UTF-8
#执行镜像中的provision.sh脚本
COPY provision.sh /home/
RUN chmod a+x /home/provision.sh
RUN /home/provision.sh
#解决时区问题
RUN apt-get update -y && apt-get upgrade -y
# 安装,中国用户填写[Asia/Shanghai] ,表示亚洲/上海 ,东八区
RUN apt-get install -y tzdata && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3、创建provision.sh脚本,内容如下:
#!/bin/bash
set -e
apt-get update
#安装vim
#apt-get -y install vim
#解决vim中文乱码
#vim /etc/vim/vimrc
#set fileencodings=utf-8,gbk,utf-16le,cp1252,iso-8859-15,ucs-bom
#set termencoding=utf-8
#set encoding=utf-8
#
#安装sqlite3
apt-get install libsqlite3-dev
apt-get -y install gcc
#解决ssl No module named _ssl
apt-get install libssl-dev -y
#
apt-get install make
apt-get -y install zlib*
#安装wget
apt-get -y install wget
#下载python
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
#解压tgz
tar -xvzf Python-3.6.5.tgz
#
cd Python-3.6.5
./configure --with-ssl
make && make install
ln -sf /usr/local/bin/python3 /usr/bin/python
#解决opencv 报错
apt-get -y install libgl1-mesa-glx
apt-get install -y libglib2.0-dev
#删除安装文件
#rm -R Python*
#升级pip
python3 -m pip install --upgrade pip
pip3 install -r requirements.txt -i https://pypi.douban.com/simple
#mysql
#cd /home
#wget https://dev.mysql.com/get/mysql-apt-config_0.8.15-1_all.deb
#中文编码问题
#export LANG=C.UTF-8
#解决cv2 问题
#apt-get -y install libgl1-mesa-glx
#python -V
#升级pip
#python -m pip install --upgrade pip
4、创建镜像
docker build -t image_name .
# image_name 为创建的镜像名称,. 表示当前目录(docker_test)
# 执行该命令会自动按照Dockerfile文件中的内容生成镜像
使用docker exec -it 在不进入容器内部的情况下执行指令:
docker exec watch_ocr bash -c "cd /home/docker_data/googosoft_OCR && python3 server.py ";
5、拉取paddlepaddle的docker镜像
# 切换到工作目录下
cd /home/Projects
# 首次运行需创建一个docker容器,再次运行时不需要运行当前命令
# 创建一个名字为ppocr的docker容器,并将当前目录映射到容器的/paddle目录下
如果您希望在CPU环境下使用docker,使用docker而不是nvidia-docker创建docker
sudo docker run --name ppocr -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda9.0-cudnn7-dev /bin/bash
如果使用CUDA9,请运行以下命令创建容器
sudo nvidia-docker run --name ppocr -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda9.0-cudnn7-dev /bin/bash
如果使用CUDA10,请运行以下命令创建容器
sudo nvidia-docker run --name ppocr -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda10.0-cudnn7-dev /bin/bash
您也可以访问[DockerHub](https://hub.docker.com/r/paddlepaddle/paddle/tags/)获取与您机器适配的镜像。
# ctrl+P+Q可退出docker,重新进入docker使用如下命令
sudo docker container exec -it ppocr /bin/bash
# 下载CUDA9 docker的压缩文件,并解压
wget https://paddleocr.bj.bcebos.com/docker/docker_pdocr_cuda9.tar.gz
# 为减少下载时间,上传的docker image是压缩过的,需要解压使用
tar zxf docker_pdocr_cuda9.tar.gz
# 创建image
docker load < docker_pdocr_cuda9.tar
# 完成上述步骤后通过docker images检查是否加载了下载的镜像
docker images
# 执行docker images后如果有下面的输出,即可按照按照 步骤1 创建docker环境。
hub.baidubce.com/paddlepaddle/paddle latest-gpu-cuda9.0-cudnn7-dev f56310dcc829
python3 -m pip install --upgrade pip
如果您的机器安装的是CUDA9或CUDA10,请运行以下命令安装
python3 -m pip install paddlepaddle-gpu==2.0.0b0 -i https://mirror.baidu.com/pypi/simple
如果您的机器是CPU,请运行以下命令安装
python3 -m pip install paddlepaddle==2.0.0b0 -i https://mirror.baidu.com/pypi/simple
更多的版本需求,请参照[安装文档](https://www.paddlepaddle.org.cn/install/quick)中的说明进行操作。
【推荐】git clone https://github.com/PaddlePaddle/PaddleOCR
如果因为网络问题无法pull成功,也可选择使用码云上的托管:
git clone https://gitee.com/paddlepaddle/PaddleOCR
注:码云托管代码可能无法实时同步本github项目更新,存在3~5天延时,请优先使用推荐方式。
cd PaddleOCR
python3 -m pip install -r requirements.txt
6、将本地镜像推送到阿里云
创建镜像仓库:
点击下图中的 “管理” 按钮:
登录阿里云账号
$ sudo docker login --username=gqr0911 registry.cn-hangzhou.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/googosoft/googosoft_project:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/googosoft/googosoft_project:[镜像版本号]