Docker保姆级命令教程

Docker容器
1.虚拟机和容器的对比:(容器本身就是软件,依附操作系统来运行)
1.1虚拟机缺点:资源占用多,步骤多,启动慢
1.2容器优势:启动快,资源占用少,体积小
2.Docker容器
2.1Docker概念:由Google公司推出的go语言开发,对进程进行封装隔离,属于操作系统层面的虚拟化封装技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
2.2框架:
2.2.1镜像:相当于一个root文件系统。
2.2.2容器:镜像和容器的关系就好比类和实例一样,镜像是静态定义的,而容器是运行时的实体(一个或多个)。容器可以被创建、启动、停止、删除和暂停。
2.2.3仓库:用来保存镜像。一个 Docker中可以包含多个仓库;每个仓库可以包含多个标签;每个标签对应一个镜像。
总结:镜像是类,容器是对象,存储类的是仓库。

3.Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker
4.Docker的用途:
(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
5.安装及Flask项目部署步骤
参考:https://blog.csdn.net/BigData_Mining/article/details/99681168https://blog.csdn.net/BigData_Mining/article/details/99681168
5.1卸载之前的旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
5.2更新apt包索引:
sudo apt-get update
5.3安装软件包以允许apt通过HTTPS使用存储库:
sudo apt-get install
apt-transport-https
ca-certificates
curl
gnupg-agent
software-properties-common
5.4安装Docker社区版
sudo apt-get install docker.io
5.4.1由于docker官网被封,会报连接网络超时的错误,需要指定网站。
sudo vim /etc/docker/daemon.json
5.4.2添加如下内容
{“registry-mirrors”: [“http://74ecfe5d.m.daocloud.io”],
“runtimes”: {
“nvidia”: {
“path”: “/usr/bin/nvidia-container-runtime”,
“runtimeArgs”: []
}
}}
5.4.3保存退出
systemctl daemon-reload
systemctl restart docker
5.5使用hello-world命令验证docker是否安装成功。
sudo docker run hello-world
注:如果本地没有hello-word镜像,docker会自动拉去
出现如下图片说明配置成功。

5.6在docker hub官网上查找自己所需要的镜像
上https://hub.docker.com/搜索,可在搜索框搜索你所需要镜像的条件。
如:输入tensorflow/serving,选择后复制如下命令。

5.7使用命令查看安装好的命令

sudo docker images
出现如下镜像列表:

5.8使用镜像创建容器,如:
docker run -it -p 8500:8500 tensorflow/serving:latest-devel
如下图说明进入了容器:

5.9进入另一个终端将项目copy到创建的容器中,例如:
sudo docker cp /home/user/zhaobing/docker/tensorflow-mnist/mnist_tfserving_model bafaaaa573b4:/
代码介绍:
左侧为项目在本机的地址
中间的为容器id。(可通过sudo docker ps -a查看容器id)
右侧(容器id后为要拷贝容器的目标地址)
5.91成功copy项目到容器后,可在容器内通过ls命令查看到项目
5.92在容器内运行要运行的文件

6.0 进入容器后找到项目,进入项目执行该执行的文件,根据报错解决错误。
6.1 将跑通的项目容器commit成镜像,命令如下:

sudo nvidia-docker commit 原容器id 新镜像名字:版本
6.3将新生成的镜像save到本地,命令如下

Sudo nvidia-docker save -0 保存的文件名.tar 原环境名:版本号
6.4 将.tar文件复制到另一个服务器,并且input到docker中,命令和显示结果如下:

6.5 sudo nvidia-docker images 查看镜像是否导入成功
6.6 run新镜像生成容器,命令如下:

6.7 sudo nvidia-docker ps 查看容器是否在运行
6.8 进入容器
6.9 找到项目,运行文件

  1. Docker常用命令:
    查看所有镜像:sudo docker images
    删除镜像:sudo docker image rm 镜像id
    查看所有容器:sudo docker ps -a
    查看在运行的容器:sudo docker ps
    停止运行的容器:sudo docker kill 容器id
    删除容器:sudo docker rm 容器id
    查看docker版本:docker version
    查看dockers帮助:docker --help
    启动容器:sudo docker start id
    进入容器:docker exec -it id /bin/bash
    构建新的镜像:sudo docker commit 原容器id 新镜像名字
    进入新的镜像:sudo docker run -it -p 8500:8500 镜像名字
    将镜像下载到本地:sudo docker save -o 保存的文件名.tar 原环境名:版本号
    将.tar文件input到docker容器:sudo nvidia-docker load --input 名.tar
    Ubuntu下的容器开机自启动:nvidia-docker update –restart=always 容器ID

docker启动:
systemctl start docker
service docker start
重启docker服务:
systemctl restart docker
sudo service docker restart
关闭docker:
systemctl stop docker
service docker stop
查看是否启动成功:
docker ps -a

  1. 错误记录:
    7.1
    此id为容器的id
    7.2
    无权限,命令前加sudo

7.3
ASCII错误,须在文件前加#encoding=utf-8(将文件导出,修改后再导入)
7.4

容器中的tensorflow版本和项目所需要的tensorflow版本不同,需要版本相同。
7.5

文件共享问题 sudo apt-get install -y python-qt4
7.6

若出现类似的缺少python包时,可通过pip install直接安装
7.7

进入容器运行文件时报这个错,表示已有进程存在,需要杀死

通过删除最新的内核以后,之前部署的dockers容器模型服务端调用报错:
requests.exceptions.ConnectionError: HTTPConnectionPool(host=‘192.168.0.121’, port=8008): Max retries exceeded with url: /lajijiance (Caused by NewConnectionError(‘<urllib3.connection.HTTPConnection object at 0x0000020BEDBDA128>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。’,))

主要原因就是删除了内核
解决方法:重新新建一个容器,

客户端调用dockers内的服务端报错:
requests.exceptions.ConnectionError: HTTPConnectionPool(host=‘192.168.0.121’, port=8001): Max retries exceeded with url: /lajijiance (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000020BEDBDA128>: Failed to establish a new connection: [WinError 10061]
原因:
容器可能只设置了一个port为8008,当改变容器内模型服务端的端口port为8001时,即使外面的客户端端口为8001也无法访问容器内容的服务端;
解决方法:
重新通过镜像新建一个容器
Nvidia-docker run -it -p 8008:8008 -p 8001:8001 hat/fire-py-gpu:1.1.1
通过-p增加端口号,有几个-p就有几个端口号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值