Docker使用介绍

Docker使用介绍

img

1. 要解决的问题:

解决环境配置的难题,开发中经常需要配置各种环境,比如配置各种深度学习框架、某个工程代码的编译环境、部署ftp服务等等,常见的方案就是虚拟化技术!

2. 什么是Docker

docker是一种操作系统层面的虚拟化技术,一种目前很流行的Linux容器解决方案。

image

3. 重要概念
3.1 Container(容器)

一个虚拟化出来的操作空间,Container与主机及其他Container相互隔离;

3.2 Image(镜像)

按层打包的应用程序及依赖,可以看做是容器的模板,用来生成容器,一个容器实例也可以打包提交成新的镜像;

3.2.1 DockerHub

存储镜像仓库的网站,包含了常用的镜像;如果说Image是一个类的话,Container就是这个类的一个实例,我们就在这个实例中开展工作;或者可以把Image理解为一个模板,是只读的,Container是基于这个模板创造出来的,是可写的。

4. 镜像命令
4.1 拉取镜像

获得镜像Image的方式之一,是从DockerHub拉取,直接下载到本地主机上:(从外网拉取前,请先用docker images查看一下已有的images,如有可用的则无需拉取)

这个示例,从dockerhub拉取了用户mxnet的python仓库中标签为gpu的镜像:

docker pull mxnet/python:gpu

镜像体积一般很大,网易也有镜像站点,拉取方式如下:

docker pull hub-mirror.c.163.com/mxnet/python:gpu
4.2 查看镜像
docker images           查看docker镜像
docker images -a        列出本地所有的镜像
docker images -q        只显示镜像ID
docker images -qa       列出所有镜像ID
4.3 删除镜像
docker rmi redis                       单个镜像删除
docker rmi -f redis                    强制删除(针对基于镜像有运行的容器进程)
docker rmi -f redis tomcat nginx       多个镜像删除,不同镜像间以空格间隔
docker rmi -f $(docker images -q)      删除本地全部镜像
4.4 镜像的导入导出
docker save -o 要保存的文件名 要保存的镜像名/镜像ID      镜像导出为本地文件
docker save -o java8.tar lwieske/java-8             镜像导出示例
docker load --input 文件                             从本地文件加载镜像
docker load < 文件名                                 镜像导入另一种方式
docker push 镜像名:TAG                             镜像上传到仓库

注:

  • 镜像导出为本地文件,之后使用SSH工具将导出的本地文件上传到另一台服务器,之后通过命令载入镜像,适用于将镜像复制到另一台服务器使用

  • push命令是上传到仓库,一般是官方仓库,具体上传过程查看Docker容器镜像上传到DockerHub仓库

4.5 修改镜像名
docker tag 镜像ID/镜像名 新镜像名称:TAG    
5. 容器命令
5.1 创建容器
  • 查看docker的版本:
docker version

https://note.youdao.com/yws/public/resource/35430aadcea93c7b0924c932f0900801/xmlnote/729C1BF0E0BF457C8E7D2C7523B4F159/5860

  • 如果版本在19.03以下,则需要使用nvidia-docker插件来建立容器,命令:
nvidia-docker run -it --name dc -v /home/dc/:/root -v /home/data:/mnt/data -p 9006:6006 --shm-size 10240m dee7dd8c55a7 bin/bash

解释:

  • nvidia-docker:使用了nvidia插件方式建立容器,nvidia插件使docker能支持GPU;
  • run:建新的容器
  • -t:–tty,为创建的容器分配一个伪tty,相当于提供了交互式shell;
  • -i:–interactive,保持标准输入始终开启着,保证容器能收到STDIN;
  • --name:这个容器的名字,建议加上自己标识,明确是谁的容器;
  • -v:挂载一个host的目录到容器内,容器内的/root目录相当于host的/home/dc/目录,可以挂载多个目录
  • -p:端口映射,容器的6006端口映射到主机的9006,使用tensorboard的时候用得到,具体内容见另一篇博客本地浏览器访问Docker容器内的tensorboard可视化内容
  • --shm-size 1024m :可选的,有时候shared-memory不足,可以通过这个参数指定;
  • dee7dd8c55a7:镜像ID,也可选择镜像名
  • 如果版本在19.03及以上(最新版本),这些版本的docker已经原生支持nvidia的gpu,这样建立容器,与旧版只有一部分的差异:
docker run --gpus all -it --name dc -v /home/dc/:/root -v /data3:/data3 -p 9006:6006 --shm-size 10240m dee7dd8c55a7 /bin/bash
5.2 查看容器及重命名
docker ps                         列出当前所有正在运行的容器
docker ps -a                      列出所有的容器
docker ps -l                      列出最近创建的容器
docker ps -q                      只显示容器ID
docker top 容器ID或容器名称         查看容器内运行的进程
docker inspect 容器ID或容器名称     查看容器内部细节
docker rename 旧的 新的            容器重命名
5.3 进入容器

进入容器,使用shell交互

  • 如果按照5.1命令建立容器,接着按回车即可进入容器;
  • 其他情况下,需要知道容器名字/容器ID,通过ssh客户端连上docker主机(常用命令)
docker attach 容器名/容器ID                   进到容器内,正在运行的
docker exec -it 容器名/容器ID /bin/bash       进到容器内,新建一个

需要注意的是,容器有开启和停止状态,开启状态时,容器内的进程才在运行,停止状态的容器文件不变;

开启状态的容器才可以attach进去,开启一个已停止的容器并attach进去,输入:

docker start -i 容器名/容器ID
5.4 容器的启动与退出
docker start 容器ID/容器名称          启动容器
docker restart 容器ID/容器名称        重新启动容器
docker stop 容器ID/容器名称           停止容器
docker kill 容器ID/容器名称           强制停止容器
Ctrl+p+q                            只退出容器,不停止容器
exit                                退出并停止容器
5.5 容器的删除
docker rm 容器ID或容器名称              删除容器
docker rm -f 容器ID或容器名称           强制删除容器
docker rm -f $(docker ps -aq)        删除多个容器

注:建立容器后,这个容器相关的文件会一直存在于主机上,占用存储空间

删除容器意味着除了存储在挂载目录的内容,其他的一切都会被删除,即这个虚拟环境被销毁

5.6 容器的提交

DockerHub拉取的镜像一般都是最小环境,缺少一些我们需要的程序,在新建的容器里面,我们安装了一些程序或者设置了一些环境变量,并且希望长期保留这个环境,那么可以把这个容器提交为一个镜像,使用:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -a "dc" -m "dc_data" 4813edd4476f dc1004/dc:v1
创建一个新的镜像,-a 作者 -m 文字说明   原来的容器id 镜像名:标签

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值