Docker 使用入门简单教程

任务驱动:由于参加挑战赛,官方要求使用Docker封装项目,所以不得不学怎么用。

Docker 通关实录:

by Gunhild & ccchennnn

0.一些基础知识与我的理解

镜像是处于静止状态的docker文件,
容器是处于启动状态的docker文件。
我们制作好镜像后,通过docker启动它变为容器,如果我们需要,我们完全可以从一个镜像启动多个容器。

我觉得docker和虚拟机的原理很像,它们都可以避免影响或被影响本机的情况下自行运行。不会受到本机软件环境的影响,只会受到本机硬件的约束。
以上是我浅显的理解,如果大家有什么更正确的看法欢迎在评论区评论。

1.首先是安装Docker

这是Docker官网:link

各个平台的用户都已经可以在这里下载对应平台的Docker应用。安装过程就不细说了,官网上很详细。
我是Linux平台的,接下来的演示会从Ubuntu18.04版本上进行

2.安装好Docker后,检验是否安装成功

安装好软件后,要测试一下基本的功能是否正常。接下来是一些测试

2.1 首先让docker输出它的版本号:docker version

诶,这时候可能部分用户会发现出问题了

在这里插入图片描述

怎么我报了一个permission denied的错误。

Tips1:在命令台操作docker时,基本都需要输入sudo,否则会有permission denied的报错

好的,我们继续。这是输入sudo后的正常信息。
在这里插入图片描述
这说明客户端和服务端都正常运行着。

2.2 输出当前计算机下的docker镜像目录:docker images 记得加sudo

在这里插入图片描述
这里默认会有一个hello-world。也算是每个程序员的初次彩蛋。第一个是我自己做好的项目镜像

2.3 重要的最后一步,检查ip。输入命令:ifconfig

docker拥有自己的虚拟ip地址,注意不要和本机ip冲突了
在这里插入图片描述
如果冲突,可以参照这篇文章去修改docker的ip,这是这个作者的解释。

docker启动时默认会创建一个docker0网桥,它在内核层连通了其他的物理或虚拟网卡,相当于将所有容器和其主机都放到同一个网络。但是部署在内网中的IP段存在有此网段的IP时,会导致冲突,
1:使用宿主机的ip也会有是无效的。
2:只要docker启动,便会造成局域网内其它主机访问本机失效,
3:关闭docker后,本机便可访问.
————————————————
版权声明:本文为CSDN博主「mahui_1980」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mahui_1980/article/details/115032655

3.做完前置检查工作,我们可以创建我们项目的镜像了

3.0 首先,明确我们的目标

  • 创建一个图像分割项目的docker镜像文件。基于Python及Pytorch框架
  • 要让这个docker镜像可以通过共享本地输入输出文件夹,得到图像的分割结果。

在这里插入图片描述
3.1 准备docker配置文件:Dockerfile 注意Dockerfile没有后缀名

Dockerfile是制作docker镜像的必备配置文件,创建docker的过程中,会根据这个配置导入环境
Dockerfile放在项目目录下:在这里插入图片描述
这是Dockerfile里面的内容:
在这里插入图片描述
接下来我们逐行解读
FROM 就是在docker里建立一个基本的编程语言内核
MAINTAINER 就是创建者的个人信息,这个不会影响docker创建过程
COPY . /workspace 注意!这个COPY后有个 . 代表目录下所有文件。
执行到这里时会复制Dockerfile所在目录下所有文件到Docker的workspace路径下。如图所示
在这里插入图片描述
WORKDIR 这就是设置工作路径的意思。可以调用这个目录下的文件
RUN 这一行是运行安装命令,在docker里通过已经在本机上导出的requirements.txt,安装项目所需的py库
怎么在本机导出requirements? 看这篇文章:link

3.2 制作Docker镜像

配置好Dockerfile后,我们开始建立镜像,先cd到项目目录下:在这里插入图片描述

建立名为docker name的镜像:
docker build --tag [docker name] .
例:docker build --tag fzu_312ch .
注意了~这里命令的结尾有一个独立的英文句号,漏掉就会报错

这是建立镜像的过程

在这里插入图片描述
安装完成后,我们通过docker images查看建立好的镜像。这里我的镜像名是fzu312,注意我这里的TAG是latest在这里插入图片描述
如果想要删除镜像,可以通过以下命令:

删除ID为Image ID的镜像:
docker rmi -f [Image ID]
例:docker rmi -f b23d73c135d8 加上-f是强制删除

4.使用镜像->容器

4.1 运行镜像为容器

命令如下:别忘了加上sudo

docker container run --name fzu312 /bin/bash -c "sh /workspace/predict.sh"
后面的/bin/bash -c "sh /workspace/predict.sh" 是运行镜像目录下的指定shell文件,shell文件可以写好一定的工作流程,直接执行项目。

4.2 硬件调用

由于我们跑深度学习的预测部分,需要使用gpu,这里我们要调用gpu.

调用本地GPU:--gpus "device=0"
调用所有GPU:--gpus=all

4.3 目录共享

docker是一个独立运行的封装环境,我们要想把本机中的文件放入docker,再把输出的文件从docker返回到本机中,则需要用到目录共享机制。docker的目录共享机制如下:

将本地目录挂载到镜像目录上,运行镜像:
--rm -v [本地绝对路径]:[docker绝对路径]
例:--rm -v /home/Documents/docker/input/:/workspace/input/ 挂载共享目录input

4.4 获取镜像内文件

将镜像内的文件复制到本地:
docker cp fzu:/path/filename /path/filename
例:docker cp fzu_312ch:/experiments/Unet_M1/result/ [您的本地目录]

4.5 设置镜像副本

docker tag newtag oldtag
例:docker tag take undertake

4.6 登录dockerhub及云存储

dockerhub是docker官方提供的云存储的docker镜像仓库,这样其他人就可以通过dockerhub下载你的docker镜像文件

登陆docker:需要在dockerhub上拥有账户,这是dockerhub的连接 link
docker login
然后会提示登录输入信息

上传docker镜像

将指定文件上传到docker hub:
docker push HUB_ID/[image name]:latest
例:docker push FFF123/fff:latest 上传指定文件
注意:上传到hub云端,要给镜像名加个hub用户名的前缀,比如张三/小狗
上传中容易遇到408网络超时错误,这时可以通过多试几次或者建立到腾讯的镜像源:百度

4.7 安装包导出

当你觉得云端存储不适合你,你也可以导出镜像文件为一个压缩文件形式供他人使用。

文件导出:
docker save > [image_name].tar.gz [image_name]:latest 其中 > 也可以换为 -o
例如:docker save > fff.tar.gz fff:latest
文件导入:
docker load < [image_name].tar.gz 其中 < 也可以换为 -o
例如:docker load < fff.tar.gz

5.常见报错

5.1 调用GPU时,报错:

docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
这个问题可以通过安装nvidia-container-toolkit来解决

  • 1写一个shell文件,如nvidia.sh,写入下面内容:

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey |
sudo apt-key add -
distribution=$(. /etc/os-release;echo I D ID IDVERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list |
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

  • 2运行nvidia.sh添加nvidia-docker的源,否则第三步会报错:
    E: Unable to locate package nvidia-container-toolkit
  • 3 安装nvidia-container-toolkit
    sudo apt-get install -y nvidia-container-toolkit
  • 4 重启docker即可:
    sudo systemctl restart docker

若还有其他报错,也会继续更新到这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值