1、docker是什么
docker包含三部分:镜像、容器和仓库。
容器打包好某环境,包括操作系统、库、资源等配置;镜像是容器的备份,不含任何程序的一个环境配置copy;仓库存储若干容器。
真正使用时,仓库里存储若干镜像(image),用户可以从仓库直接pull镜像(image)到本地,再启动容器实例化某镜像
2、docker的好处
最直接的好处:docker可以让某容器在A机器配置好,而后在B机器运行。尤其是对于一些保密单位,可以在自己机器配好环境,导出为tar文件,而后在内网机运行。
3、docker安装和配置
docker安装及环境容器上传_祥瑞的技术博客-CSDN博客_docker容器安装环境
cnblogs.com/miaoying/p/13438258.html
4、docker初体验教程
先找到镜像
sudo docker (image) pull *
再把镜像实例化为容器
sudo docker (container) run *
4.1配置GAT
例如 ,GAT需要配置3.5.2的python+cuda9.0+tensorflow1.6.0
内网机无法提供tensorflow1.6.0,因此外网配置一个3.5.2+1.6.0的容器,再打包成tar
首先,复制镜像
xxfan@nlp-Demo:~/py35_tf16$ sudo docker image pull python:3.5.2
sudo: unable to resolve host nlp-Demo
3.5.2: Pulling from library/python
5040bd298390: Pull complete
fce5728aad85: Pull complete
76610ec20bf5: Pull complete
52f3db4b5710: Pull complete
45b2a7e03e44: Pull complete
3117a9af6796: Pull complete
76ec9d6ced3b: Pull complete
其次,根据镜像复现一个容器,-i参数是交互参数,-t是终端。而容器执行的第一个操作是/bin/bash,可以直接在bash里操作。
#证明已经在容器内,容器的编码是dcea478ba4ec。
xxfan@nlp-Demo:~/py35_tf16$ sudo docker container run -it python:3.5.2 /bin/bash
sudo: unable to resolve host nlp-Demo
root@dcea478ba4ec:/#
关机后再次启动docker,用restart重启,attach连接上docker
xxfan@nlp-Demo:~$ sudo docker container restart dcea478ba4ec
sudo: unable to resolve host nlp-Demo
dcea478ba4ec
xxfan@nlp-Demo:~$ sudo docker attach dcea478ba4ec
sudo: unable to resolve host nlp-Demo
下载完后打包为tar:先commit提交为镜像,再查看确定生成镜像成功
sudo docker commit -a "user_name" -m "tar_name" container_id image_name
xxfan@nlp-Demo:~$ sudo docker commit -a "fanxx" -m "py35tf16" dcea478ba4ec tmf-web:202193
sudo: unable to resolve host nlp-Demo
[sudo] password for xxfan:
sha256:ed9719afdba6806f20e9c8143b085105a2a45843897b24f8dbd0ca89e6f682be
xxfan@nlp-Demo:~$ sudo docker image ls
然后save为tar格式
xxfan@nlp-Demo:~$ sudo docker save -o py35tf16.tar tmf-web:202193
同理。导出时:
docker load -i *.tar
fanxiaoxuan@nlp:~$ sudo docker load -i py35tf16.tar
[sudo] fanxiaoxuan 的密码:
a2ae92ffcd29: Loading layer 128.9MB/128.9MB
0eb22bfb707d: Loading layer 45.18MB/45.18MB
30339f20ced0: Loading layer 126.6MB/126.6MB
f55f65539fab: Loading layer 330.5MB/330.5MB
311f330fa783: Loading layer 8.104MB/8.104MB
de4f53fbd5e1: Loading layer 67.84MB/67.84MB
1cc2f45986fd: Loading layer 5.12kB/5.12kB
04f58001cb46: Loading layer 1.457GB/1.457GB
Loaded image: tmf-web:202193
查看是否有镜像:docker images|grep *
fanxiaoxuan@nlp:~$ sudo docker images|grep tmf-web
tmf-web 202193 ed9719afdba6 3 days ago 2.14GB
根据镜像生成容器:docker run -it image_name /bin/bash
fanxiaoxuan@nlp:~$ sudo docker container run -it tmf-web:202193 /bin/bash
root@e5631444cfe4:/#
如果是通过对已经在运行的容器,想进入容器,就执行docker exec -it container_name /bin/bash
注意而后发现此时生成的容器无法驱动nvidia,因此重新生成了一个新容器
fanxiaoxuan@nlp:~$ lspci | grep VGA
07:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1)
08:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1)
fanxiaoxuan@nlp:~$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:03.2/0000:08:00.0 ==
vendor : NVIDIA Corporation
modalias : pci:v000010DEd00001B06sv00001458sd0000376Bbc03sc00i00
manual_install: True
driver : nvidia-418 - third-party free
driver : nvidia-410 - third-party free
driver : nvidia-430 - third-party free recommended
driver : nvidia-384 - distro non-free
driver : nvidia-415 - third-party free
driver : xserver-xorg-video-nouveau - distro free builtin
啧,docker居然需要配置ls这种基础命令:
export PATH=/usr/bin:/usr/local/bin/:/usr/sbin/:/usr/local/sbin/:/bin:/sbin/
停止容器:docker stop container_id
删除容器:docker rm contariner_id
删除镜像:docker rmi image_id
5、vscode+docker+dockerfile配置好后,打包在其他平台:(注意:dockerfile在代码的根目录下。)
由于所用的应用大多数是python文件,因此用FROM直接拉取的包为python的包。
WORKDIR是工作目录,以下命令均在docker里执行。
COPY . .是把当前目录下所有文件拷贝到docker里的.
(以下为dockerfile的文件里写的内容)
FROM python:3.5.1
WORKDIR /docker_dir
COPY . .
RUN pip install -r requirements.txt
CMD ["/bin/bash","run.sh"]
#/bin/bash无法在windows环境下运行。硬件不支持。
【防错提醒:在外环境下,试一下pip install -r requirements.txt,查看pip能否执行安装命令。如果找不到库,类似:Could not find a version that satisfies the requirement sklearn==0.20.2 (from -r requirements.txt (line 4)) (from versions: 0.0)这类错误,说明pip现在已经不支持直接安装,建议自己下载好,再在docker里单独安装】
为了生成image,需要在shell里执行:docker build -t docker-name:tags .
【防错提醒:不要随意添加docker镜像加速器!不要随意添加docker镜像加速器!会把docker引擎搞崩的!】
生成好的image,打包为tar文件:
docker images #列出所有images
显示如图所示
docker save the_images:the_tags > path/name.tar #把the_images、标签为the_tags的这个镜像打包,放到路径path下,名称为name.tar
docker save -o 名称.tar ImagesId或镜像名:标签名
6、docker占用c盘空间,将其挪到其他位置。
步骤1:停掉并清空所有image和容器:在desktop-上方爬虫状的按钮-Clean/Purge Data
步骤2:wsl处理:
通过对文件夹下内容查看,确定了现在D盘的该路径是存储磁盘镜像文件。