docker的安装和使用

docker的核心概念

docker的大部分操作主要是围绕着它的三大核心概念-----镜像、容器和仓库展开。
镜像:docdker镜像类似于虚拟机镜像,可以理解为一个只读的模板。镜像是创建docker容器的基础。
容器:容器是镜像创建的运行实例,可以将启动、开始、停止、删除,这些容器之间是彼此隔离、互不可见的。

安装过程中出错可以参考安装连接

docker安装

ubuntu环境下安装docker
docker目前只能运行在64为的平台上,并且要求内核不能低于3.1.0.
用户可以使用uname -a查看自己的内核详细信息

docker目前支持的最低版本是ubuntu12.04LTS。

  1. docker安装步骤:

     #安装apt-transport-https包支持HTTPS协议源
     sudo apt-get install apt-transport-https
     #添加源的gpg秘钥
     sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
     #添加Docker的官方apt软件源,保存到/etc/apt/sources.list.d/docker.list中
     sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
     #更新源
     sudo apt-get update
     #安装docker
     sudo apt-get install -y docker-engine
     #启动docker
     sudo service docker start
    

如果安装的过程中有较旧的版本安装的过程中会提醒是否先删除,直接删除即可。除了手动添加源进行安装,官方版本也给出自动化安装的方式:

sudo curl -sSL https://get.docker.com/ | sh
  1. 安装nvidia-docker

普通的docker环境不支持gpu,因此我们需要一个nvidia-docker的版本.

wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb

sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb

验证是否安装成功:

nvidia-docker run –rm nvidia/cuda nvidia-smi

使用上述代码查看是否能安装成功,如果输出本机上的GPU信息说明nvidai-docker安装成功。

利用官方的 nvidia/cuda:9.0-base 镜像进行安装

sudo nvidia-docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
#创建容器
sudo nvidia-docker run -it  nvidia/cuda:9.0-base
#由于官方镜像不完整因此需要安装cuda
apt install cuda-toolkit-9-0

然后根据需要安装pytorch或者是tensorflow等一些系列的安装包。

  1. 如何让容器中能够使用GPU

第一种方法:安装nvidia-docker,并在镜像下启动容器的时候使用nvidia-docker
例如:(容器中必须安装有cuda亲测有效)

	sudo nvidia-docker run -it -v /home/fengms/testv:/home/testv \
	face_recongnition:cpu
	sudo nvidia-docker run -dit -p 8082:8082 -v /home/fengms/testv:/home/testv \
	face_recongnition:cpu
	#其中的-v为指定的外挂磁盘空间,同步修改。建议使用, -p 增加端口映射

第二种方法:将宿主机的nvdiia文件映射到docker内。(有可能需要安装nvidia驱动以及cuda和cudnn未尝试)

sudo docker run -it \
--device /dev/nvidia0:/dev/nvidia0 \
--device /dev/nvidiactl:/dev/nvidiactl \
--device /dev/nvidia-modeset:/dev/nvidia-modeset \
--device /dev/nvidia-uvm:/dev/nvidia-uvm \
-v ${basepath}/data:/data \
-v ${basepath}/sendiee:/opt/sendiee \
-p9100:9100 -p8002:8002 -p9001:9001 -p27017:27017 -p8080:8080 \
pycaffe:1.1

第三种方法:在运行docker run的时候加入命令–privileged=true

docker run -it --privileged=true ubuntu:14.04
# 我这里说一下 privileged 参数功能,设置为true的时候,让docker的root拥有真正root的权限,可以调用宿主机硬件等,甚至可以让你在docker中使用docker

docker的完整操作过程

首先需要设置镜像,镜像可以通过自己创建或者是从仓库中下载镜像

创建镜像的方法主要有三种:基于已有的镜像的容器创建、基于本地模板导入、基于Dckerfile创建。
以下是部分操作:

  1. 搜索镜像
    docker search # 在docker index中搜索image
    –automated=false 仅显示自动创建的镜像
    –no-trunc=false 输出信息不截断显示
    -s 0 指定仅显示评价为指定星级的镜像

  2. 下载镜像

     	docker pull <image> # 从docker registry server 中下拉image
     	还可通过指定标签下载某镜像
     	 docker pull [:TAG]
     	 docker pull centos:7
    
  3. 查看镜像/删除

     docker images: # 列出images
     docker images -a # 列出所有的images(包含历史)
     docker ps -a #列出本机所有容器
     docker rmi <image ID>: # 删除一个或多个image
     docker rm  # 删除容器
     ps:删除镜像之前必须删除掉所有的镜像对应的容器
    
  4. 基于已有的容器创建镜像

      #使用docker commit命令在已有的容器的基础上提交创建新的容器
      sudo docker -it  ubuntu:14.04 /bin/bash
      ..............
      docker commit ID newname:newtag #ID为容器的ID,后接自己命名的镜像名字和标签
    
  5. 存出和载入镜像

     存出本地镜像文件为.tar
     docker save -o ubuntu_14.04.tar ubuntu:14.04
     导入镜像到本地镜像库
     docker load --input ubuntu_14.04.tar或者
     docker load < ubuntu_14.04.tar
    
  6. 上传镜像

    用户在dockerhub网站注册后,即可上传自制的镜像。
    docker push NAME[:TAG]
    
创建完进镜像后可以在镜像的基础上创建容器
容器是镜像的一个运行实例,不同的是它带有额外的可写层。

可认为docker容器就是独立运行的一个或一组应用,以及它们所运行的必需环境。
  1. 创建(使用镜像创建容器):

    首先得查看镜像的REPOSITORY和TAG

    docker run -it REPOSITORY:TAG 
    #等价于先执行docker create 再执行docker start 命令	
    

其中-t选项让docker分配一个伪终端并绑定到容器的标准输入上, -i则让容器的标准输入保持打开。若要在后台以守护态(daemonized)形式运行,可加参数-d

在执行docker run来创建并启动容器时,后台运行的标准包括:

检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启动一个容器
分配一个文件系统,并在只读的镜像层外面挂载一层可读可写层
从宿主机配置的网桥接口中桥接一个虚拟接口到容器
从地址池配置一个ip地址给容器
执行用户指定的应用程序
执行完毕后容器被终止

docker start/stop/restart [container]#:开启/停止/重启container

  1. 启动容器

     docker ps #查看在运行中的容器
     docker start [容器id的前两个字母]
    
  2. 退出和终止容器

     在容器中运行exit退出容器同时也可以使用快捷键control+D
     docker stop [容器id的前两个字母] #终止容器
    
  3. 进入容器:

     docker attach [container_id] 
     #连接一个正在运行的container实例(即实例须为start状态,可以多个 窗口同时attach 一个container实例),但当某个窗口因命令阻塞时,其它窗口也无法执行了。
    

exec可直接在容器内运行的命令。docker exec -ti [container_id] /bin/bash

  1. 删除容器:

    docker rm <container…> #:删除一个或多个container
    docker rm docker ps -a -q #:删除所有的container
    docker ps -a -q | xargs docker rm #:同上, 删除所有的container

docker -rm
-f 强制中止并运行的容器
-l 删除容器的连接,但保留容器
-v 删除容器挂载的数据卷

  1. 修改容器:

     docker commit <container> [repo:tag] 
     # 将一个container固化为一个新的image,后面的repo:tag可选。
    
  2. 导入和导出容器:

    docker export CONTAINER > test.tar
    #导出到一个文件,不管是否处于运行状态。
    cat test.tar | docker import - centos:latest
    #导入为镜像
    

(docker仓库中的镜像下载链接)[https://hub.docker.com/search?q=pytorch%20face&type=image]

(修改docker的默认存放路径)[https://www.cnblogs.com/jakaBlog/p/10538382.html]

(在docker镜像上安装GPU显卡驱动)[https://blog.youkuaiyun.com/renhanchi/article/details/75808029]

在docker中安装cuda的时候一定要测试查看是否安装成功
测试代码:

cd /usr/local/cuda/samples/1_Utilities/deviceQuery #由自己电脑目录决定
make
sudo ./deviceQuery
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值