当前位置: 首页 > news >正文

【长篇博文】Docker学习笔记与深度学习环境的搭建和部署(一)

长篇博文记录学习流程不容易,请关注、转发、点赞、评论,谢谢!

docker学习笔记

  • 零、开篇介绍
    • 0.1、Docker介绍
    • 0.2、 Docker架构
  • 一、注册、登录、链接器下载与安装、远程访问ubuntu
    • 1.0、注册、登录
    • 1.1、连接器:FinalShell and Xshell
    • 1.2、安装链接器 远程链接ubuntu
  • 二、在Ubuntu上安装Docker Engine
    • 0)卸载以前的docker
    • 1)安装依赖包\ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
    • 2)其他命令方法(推荐上述方法):允许apt通过https使用repository安装软件包
    • 3)添加Docker官方GPG key
    • 4)验证key的指纹
    • 5)添加稳定版repository:
    • 6)安装最新版本的docker ce和containerd
    • 7)安装其他指定版本
    • 8)验证:docker --version
    • 9)查看镜像docker image
    • 10)镜像与容器的基本操作
      • ①:拉取镜像
      • ②:运行镜像
      • ③:再次查看本地的镜像
      • ④:查看正在运行的容器
      • ⑤:查看所有容器
      • ⑥:删除镜像
      • ⑦:创建和删除容器
      • ⑧:启动容器
      • ⑨:停止容器
      • ⑩:重启容器
    • 11)其他附加命令汇总:
      • 11.1) docker命令与镜像
      • 11.2)容器命令
      • 11.3)测试容器
        • 11.3.1、查看内部的centos:`ls`,该centos与外面法的没有半毛钱关系,用就完了。
        • 11.3.2、退出容器`exit,ls`查看,外面的与里面的centos完全不一样。
        • 11.3.3、查看正在运行的容器 + 历史运行过的容器(-a)
        • 11.3.4、显示最近创建的容器(-n=?)
        • 11.3.5、显示当前所有容器的编号(-aq)
        • 11.3.6、删除容器
        • 11.3.7、启动和停住容器
  • 三、常用容器命令
    • 3.1、后台启动容器
    • 3.2、查看日志
    • 3.3、查看容器元数据inspect
    • 3.4、进入当前正在运行的容器
    • 3.5、从容器内拷贝文件到我的主机上
  • 四、离线安装 docker
  • 五、搜索深度学习框架镜像
  • 参考文献

本文的最终目的是在docker下搭建深度学习环境,之前的所有操作是简单对docker的一些实现流程进行记录,不做更细致的分析。以下是在搭建深度学习环境之前所做操作。

零、开篇介绍

0.1、Docker介绍

Docker 是一种开源项目,用于将应用程序自动部署为可在云或本地运行的便携式独立容器。 Docker 也是一家公司,它与云、Linux 和 Windows 供应商(包括 Microsoft)协作,致力于推广和发展这项技术。

在这里插入图片描述
如上图所述,Docker 容器可以在任意位置运行:在客户数据中心本地、在外部服务提供商或在 Azure 云中。 Docker 映像容器还可以在 Linux 和 Windows 上本机运行。 但是,Windows 映像仅能在 Windows 主机上运行,Linux 映像可以在 Linux 主机和 Windows 主机上运行(到目前为止,使用 Hyper-V Linux VM),其中主机是指服务器或 VM。

开发人员可以在 Windows、Linux 或 macOS 上使用开发环境。 在开发计算机上,开发人员运行部署了 Docker 映像(包括应用及其依赖项)的 Docker 主机。 在 Linux 或 Mac 上进行开发的开发人员使用基于 Linux 的 Docker 主机,并且他们可以仅为 Linux 容器创建映像。 (在 Mac 上进行开发的开发人员可以从 macOS 中编辑代码或运行 Docker 命令行接口 (CLI),但在撰写本文时,容器不在 macOS 上直接运行。)在 Windows 上进行开发的开发人员可以为 Linux 或 Windows 容器创建映像。

为了在开发环境中承载容器,并提供其他开发人员工具,Docker 为 Windows 或 macOS 提供了 Docker 社区版 (CE)。 这些产品安装了承载容器所需的 VM(Docker 主机)。 Docker 还提供 Docker 企业版 (EE),该版本专为企业开发而设计,供生成、交付和在生产中运行大型业务关键型应用程序的 IT 团队使用。

若要运行 Windows 容器,有两种类型的运行时可供使用:

  • “Windows Server 容器”通过进程和命名空间隔离技术提供应用程序隔离 。 Windows Server 容器与容器主机和主机上运行的所有容器共享内核。

  • “Hyper-V 容器”通过在高度优化的虚拟机中运行各容器来扩展 Windows Server 容器提供的隔离 。 在此配置中,容器主机的内核不与 Hyper-V 容器共享,以提供更好的隔离。

这些容器的映像的创建和工作方式均相同。 区别在于,在运行 Hyper-V 容器的映像中创建容器的方式需要使用其他参数。 有关详细信息,请参阅 Hyper-V 容器。

0.2、 Docker架构

Docker使用客户端-服务器架构。Docker客户端与Docker守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。Docker客户端和守护程序可以 在同一系统上运行,或者您可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护程序在UNIX套接字或网络接口上使用REST API进行通信。另一个Docker客户端是Docker Compose,它使您可以处理由一组容器组成的应用程序。
在这里插入图片描述
三要素解释:
在这里插入图片描述

备注:以上解释不清晰没关系,下面跟着我的学习笔记看就可以了。

一、注册、登录、链接器下载与安装、远程访问ubuntu

1.0、注册、登录

自行注册,这里不做介绍
官网注册登录:
https://hub.docker.com/
在这里插入图片描述

1.1、连接器:FinalShell and Xshell

FinalShell SSH工具
或者
Xshell
推荐版本:Xshell 7破解版下载请看这篇文章的下载说明:
Ubuntu与Windows系统之间进行远程访问和文件的传输

1.2、安装链接器 远程链接ubuntu

FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求. 特色功能:
云端同步,免费海外服务器远程桌面加速,ssh加速,本地化命令输入框,支持自动补全,命令历史,自定义命令参数

Windows版下载地址:
http://www.hostbuf.com/downloads/finalshell_install.exe
macOS版下载地址: http://www.hostbuf.com/downloads/finalshell_install.pkg
mac版安装路径 /Applications/FinalShell.app/

配置文件路径 /Users/$USER/Library/FinalShell/
mac版卸载
删除安装目录 /Applications/FinalShell.app/

Linux版安装及教程:
http://www.hostbuf.com/t/1059.html

备注:安装如果出现如下提示,请直接到winpcap官网下载安装:
https://www.winpcap.org/install/
在这里插入图片描述
安装后打开,如下所示
在这里插入图片描述
本文使用连接器FinalShell链接我的ubuntu系统,链接方法同xshell,具体可参考我的博客文章:
Ubuntu与Windows进行SSH远程访问
在这里插入图片描述

二、在Ubuntu上安装Docker Engine

请参考官方教程:
https://docs.docker.com/engine/install/ubuntu/

0)卸载以前的docker

注意:如果你已经安装了docker可以考虑要不要下载

sudo apt-get purge docker

sudo apt-get purge docker-ce

sudo apt-get remove -y docker-*

sudo rm -rf /var/lib/docker
(慎重:这是镜像和容器的默认存储位置,不要误删)

(apt-get remove 会删除软件包而保留软件的配置文件
apt-get purge 会同时清除软件包和软件的配置文件)

1)安装依赖包\ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common

更新apt软件包索引并安装软件包以允许apt通过HTTPS使用存储库:

sudo apt-get update && sudo apt-get -y install yum apt-transport-https curl  ca-certificates gnupg-agent software-properties-common

2)其他命令方法(推荐上述方法):允许apt通过https使用repository安装软件包

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

3)添加Docker官方GPG key

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

(国内阿里云版 sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -)

4)验证key的指纹

sudo apt-key fingerprint 0EBFCD88

正常输出为:

sudo apt-key fingerprint 0EBFCD88
pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>

5)添加稳定版repository:

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

备注:该方法添加后安装速度慢,有报错的问题,具体报错请自行百度。
国内阿里云版:推荐安装

sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

记得先更新以下,否则报错:

sudo apt-get update

6)安装最新版本的docker ce和containerd

sudo apt-get install docker-ce docker-ce-cli containerd.io

在这里插入图片描述
(如果您启用了多个Docker存储库,则在apt-get install或apt-get update命令中未指定版本的情况下安装或更新将始终安装尽可能高的版本)

7)安装其他指定版本

查看可获取的版本 sudo apt-cache madison docker-ce
在这里插入图片描述

8)验证:docker --version

docker -v
docker --version
docker version
Docker version 20.10.3, build 48d30b5

9)查看镜像docker image

 sudo docker images

如果没有任何镜像,下面拉取一个简单的镜像。
在这里插入图片描述
注意:如果以上镜像查询报错:

Cannot connect to the Docker daemon at 
unix:///var/run/docker.sock. Is the docker daemon running?

我们查询以下当前docker状态:

service docker start

出现了如下两处报错:
在这里插入图片描述

解决办法:
先安装一个包:sudo apt install daemon
然后输入命令:su root 进入 /etc/docker(命令:vim /etc/docker/daemon.json),编辑daemon.json文件:

(注意:如果没有daemon.json文件就自己touch daemon.json新建一个,编辑daemon.json文件:)

加入这段代码:

{
 "registry-mirrors": ["https://registry.docker-cn.com"]
}

再次查询状态报错情况,解决问题:systemctl status docker.service
在这里插入图片描述
然后重启docker、查询镜像、查询版本:

systemctl restart docker.service #无报错
sudo docker images
docker version

执行结果如下,解决问题:
在这里插入图片描述
在这里插入图片描述

10)镜像与容器的基本操作

①:拉取镜像

(使用该命令会从远程仓库拉取镜像到本地,并且如果本地已有该镜像会覆盖)

docker pull hello-world

关于ubuntu镜像的拉取请参考官网:
https://hub.docker.com/_/ubuntu?tab=tags&page=1&ordering=last_updated

②:运行镜像

(使用该命令会创建新的容器,相当于每次执行会翻模一次,除了ID不同其他都相同)

(该命令如果本地没有该镜像的话执行该命令相当于:先后执行 pull+run 两个命令)

docker run hello-world

③:再次查看本地的镜像

docker images

执行上面的命令之后输出如下:
镜像名称 版本 ID 创建时间 大小
在这里插入图片描述

④:查看正在运行的容器

(如果容器没事可做会被docker关闭运行状态,因为hello-world打印输出之后就没事可做了,所以执行下面的命令看不到hello-world容器)

docker container ls

简化命令:docker ps

⑤:查看所有容器

(下面的命令可以查看所有容器包括正在运行的、已经结束的)

docker container ls -a

简化命令:docker ps -a
执行上面的命令输出如下:
容器 ID 镜像名称 启动容器时运行的命令 容器的创建时间 容器的状态 容器的端口 容器名称
在这里插入图片描述

⑥:删除镜像

(删除镜像要输入镜像ID,可以只输入前一段能区分就行了)

docker rmi -f 你的镜像ID

执行上面的命令,如果出现 :Error response from daemon: conflict: unable to delete bf756fb1ae65 (must be forced) - image is being used by stopped container 4d102af792af
说明这个镜像还在被容器依赖,这时要先删除它创建的容器(包括已经停止的容器)才能删除该镜像,也可以强制删除:

docker images rm -f bf756

⑦:创建和删除容器

创建容器:

sudo docker container run --name 容器名 -it 镜像 /bin/bash

删除容器:
(删除容器和删除镜像差不多 ,输入容器ID前几位就行了)

docker container rm 4d102

简化命令:docker rm 4d102
如果出现:Error response from daemon: You cannot remove a running container a7… Stop the container before attempting removal or force remove
说明该容器正在运行需要先停止运行才能删除,也可以强制删除:

dockers container rm -f 4d102

简化命令:docker rm -f 4d102

⑧:启动容器

(启动容器 ,输入容器ID前几位就行了。可以同时启动多个ID ,空格分隔开来)

docker container start 4d102

简化命令:docker start 4d102

⑨:停止容器

(停止容器 ,输入容器ID前几位就行了。可以同时启动多个ID ,空格分隔开来)

docker container stop af749

简化命令:docker stop af749

⑩:重启容器

(重启容器 ,输入容器ID前几位就行了。可以同时启动多个ID ,空格分隔开来)

docker container restart af7451

简化命令:docker restart af7451

11)其他附加命令汇总:

11.1) docker命令与镜像

docker images #查看现有镜像
docker images -aq #查看所有镜像的id
docker info #查看镜像信息
docker 命令  --help #查看指定命令的帮助,即使用方法
docker images -q #查看镜像id
docker images -aq #查镜像所有id
docker search mysql #搜索指定镜像
docker search mysql --filter=STARS=3000 #过滤指定STARS范围镜像
docker pull --help #拉取或下载新的镜像
docker pull mysql  #例如:拉取镜像mysql
docker pull mysql:5.7 #拉取指定版本的镜像
docker rmi -f 镜像id   #删除镜像
docker rmi -f $(docker images -aq) #删除所有镜像

备注:其他安装命令请参考官方文档:
https://docs.docker.com/reference/

11.2)容器命令

说明:有了镜像才能创建容器,例如linux,centos

docker pull centos

新建容器并启动(参看如下run命令参数)

 docker run 「可选参数」 image
 --name="Name"  #容器名字  例如tomcat01,02..等等,用来区分容器
 -d     #后台运行方式
 -p     #指定容器端口号 -p 8000:8000
 		#-p几种使用方式如下:
 		 	-p ip:主机端口号:容器端口号
 		 	-p:主机端口号:容器端口号
 		 	容器端口
 -P   #随机指定端口

11.3)测试容器

root@ovo:/home/zkpark# docker images 
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    300e315adb2f   2 months ago   209MB
root@ovo:/home/zkpark# docker run -it centos /bin/bash
[root@c93585ebe465 /]# 

以上的ovo是主机名,执行docker run -it centos /bin/bash之后主机名称变成里面镜像的容器(主机名:c93585ebe465)

11.3.1、查看内部的centos:ls,该centos与外面法的没有半毛钱关系,用就完了。

[root@c93585ebe465 /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

11.3.2、退出容器exit,ls查看,外面的与里面的centos完全不一样。

#从容器退回主机
[root@c93585ebe465 /]# exit
exit
root@ovo:/home/zkpark# ls
anaconda3         Documents         labelImg-master.zip       Pictures  sensors         Templates
cudnn_samples_v8  Downloads         Music                     pkg       snap            Videos
Desktop           examples.desktop  NVIDIA_CUDA-11.1_Samples  Public    Sunlogin Files

11.3.3、查看正在运行的容器 + 历史运行过的容器(-a)

root@ovo:/home/zkpark# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@ovo:/home/zkpark# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS                     PORTS     NAMES
c93585ebe465   centos         "/bin/bash"   10 minutes ago   Exited (0) 4 minutes ago             angry_ishizaka
774ad7e38706   8185511cd5ad   "/bin/bash"   7 hours ago      Exited (127) 7 hours ago             magical_newton
d2c65059207f   8185511cd5ad   "/bin/bash"   7 hours ago      Exited (127) 7 hours ago             sweet_booth
64372a2d67b3   bf756fb1ae65   "/hello"      7 hours ago      Exited (0) 7 hours ago               romantic_black
root@ovo:/home/zkpark# 

11.3.4、显示最近创建的容器(-n=?)

root@ovo:/home/zkpark# docker ps -a -n=1
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                     PORTS     NAMES
c93585ebe465   centos    "/bin/bash"   14 minutes ago   Exited (0) 7 minutes ago             angry_ishizaka

11.3.5、显示当前所有容器的编号(-aq)

root@ovo:/home/zkpark# docker ps -aq
c93585ebe465
774ad7e38706
d2c65059207f
64372a2d67b3

11.3.6、删除容器

exit #直接容器停止退出
Ctrl+P+Q #容器不停止退出

测试容器不停止退出

root@ovo:/home/zkpark# docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@ovo:/home/zkpark# docker run -it centos /bin/bash
[root@169315a9d569 /]# root@ovo:/home/zkpark# docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS              PORTS     NAMES
169315a9d569   centos    "/bin/bash"   About a minute ago   Up About a minute             nifty_carson
#可以发现容器不停止,但退出到了主机ovo

删除容器

docker rm 容器id  #删除指定容器,注意:不能删除正在运行的容器,强制可使用夏明下面的命令
docker rm -f $(docker ps -aq)   #删除所有容器

11.3.7、启动和停住容器

docker start 容器id  #启动容器
docker restart 容器id #重启容器		
docker stop 容器id    # 停止当前容器
docker kill 容器id    #强制杀死或杀死当前容器

测试:

root@ovo:/home/zkpark# docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS              PORTS     NAMES
138ff6337f8c   centos    "/bin/bash"   About a minute ago   Up About a minute             compassionate_joliot
root@ovo:/home/zkpark# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS              PORTS     NAMES
138ff6337f8c   centos    "/bin/bash"   About a minute ago   Up About a minute             compassionate_joliot
root@ovo:/home/zkpark# docker start 138ff6337f8c
138ff6337f8c
root@ovo:/home/zkpark# docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
138ff6337f8c   centos    "/bin/bash"   2 minutes ago   Up 2 minutes             compassionate_joliot
root@ovo:/home/zkpark# docker stop 138ff6337f8c
138ff6337f8c
root@ovo:/home/zkpark# docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

三、常用容器命令

3.1、后台启动容器

root@ovo:/home/zkpark# docker run -d centos
f5be3b9f4b96578085c0f56ee532280d4188644395e098d381c07b3074439ee8
root@ovo:/home/zkpark# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@ovo:/home/zkpark#

注意:docker ps停止的坑是因为没有运行前台进程,因此必须要一个前台,启动后台则可解决。

3.2、查看日志

docker logs -f -t --tail 容器id,#当前新容器肯定没有日志

"while ture; do echo ovo; sleep 1" #编写shell脚本 :while循环,1秒钟输出一次

docker run -d centos /bin/sh -c "while true; do echo ovo; sleep 1;done"

测试打印日志:

root@ovo:/home/zkpark# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS     NAMES
8cb7a7f817b7   centos    "/bin/sh -c 'while t…"   About a minute ago   Up About a minute             tender_poitras
921b60e303bd   centos    "/bin/bash"              19 minutes ago       Up 6 minutes                  angry_hellman
root@ovo:/home/zkpark# docker logs -tf --tail 10 8cb7a7f817b7
2021-02-15T15:06:01.586502680Z ovo
2021-02-15T15:06:02.590388655Z ovo
2021-02-15T15:06:03.594217560Z ovo
2021-02-15T15:06:04.598020313Z ovo
2021-02-15T15:06:05.601914849Z ovo

说明:

-tf #显示日志
--tail 条数    #显示指定条数

查看当前容器进程信息ps

root@ovo:/home/zkpark# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
8cb7a7f817b7   centos    "/bin/sh -c 'while t…"   6 minutes ago    Up 6 minutes              tender_poitras
921b60e303bd   centos    "/bin/bash"              24 minutes ago   Up 11 minutes             angry_hellman
root@ovo:/home/zkpark# docker top --help

Usage:  docker top CONTAINER [ps OPTIONS]

Display the running processes of a container
root@ovo:/home/zkpark# docker top 8cb7a7f817b7
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                2811                29792               0                   23:11               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root                29792               29764               0                   23:04               ?                   00:00:00            /bin/sh -c while true; do echo ovo; sleep 1;done

3.3、查看容器元数据inspect

root@ovo:/home/zkpark# docker inspect --help

Usage:  docker inspect [OPTIONS] NAME|ID [NAME|ID...]

Return low-level information on Docker objects

Options:
  -f, --format string   Format the output using the given Go template
  -s, --size            Display total file sizes if the type is container
      --type string     Return JSON for specified type
root@ovo:/home/zkpark# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                        PORTS     NAMES
8cb7a7f817b7   centos    "/bin/sh -c 'while t…"   9 minutes ago    Up 9 minutes                            tender_poitras
c6d68124ee72   centos    "/bin/sh -c 'while t…"   10 minutes ago   Exited (0) 10 minutes ago               amazing_kalam
6bb714fd8327   centos    "/bin/bash -c 'while…"   11 minutes ago   Exited (0) 11 minutes ago               awesome_bartik
a29c4383c424   centos    "/bin/bash -c 'while…"   14 minutes ago   Exited (0) 14 minutes ago               magical_williamson
a0d9a79981b0   centos    "/bin/bash -C 'while…"   16 minutes ago   Exited (127) 16 minutes ago             agitated_dewdney
921b60e303bd   centos    "/bin/bash"              27 minutes ago   Up 14 minutes                           angry_hellman
f5be3b9f4b96   centos    "/bin/bash"              34 minutes ago   Exited (0) 34 minutes ago               mystifying_matsumoto
138ff6337f8c   centos    "/bin/bash"              39 minutes ago   Exited (127) 36 minutes ago             compassionate_joliot
root@ovo:/home/zkpark# docker inspect 8cb7a7f817b7
[
    {
        "Id": "8cb7a7f817b714905738c6b0e4e0b85632d722b2927653f1d02f8eb159c1aa6a",
        "Created": "2021-02-15T15:04:30.825240912Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true; do echo ovo; sleep 1;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 29792,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-02-15T15:04:32.246849677Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
        "ResolvConfPath": "/var/lib/docker/containers/8cb7a7f817b714905738c6b0e4e0b85632d722b2927653f1d02f8eb159c1aa6a/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/8cb7a7f817b714905738c6b0e4e0b85632d722b2927653f1d02f8eb159c1aa6a/hostname",
        "HostsPath": "/var/lib/docker/containers/8cb7a7f817b714905738c6b0e4e0b85632d722b2927653f1d02f8eb159c1aa6a/hosts",
        "LogPath": "/var/lib/docker/containers/8cb7a7f817b714905738c6b0e4e0b85632d722b2927653f1d02f8eb159c1aa6a/8cb7a7f817b714905738c6b0e4e0b85632d722b2927653f1d02f8eb159c1aa6a-json.log",
        "Name": "/tender_poitras",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/e793bd21bb6911e256983fa8976107691e8c42436660ded1d536f8f6d615e2d2-init/diff:/var/lib/docker/overlay2/54a1db4bcf11e959eb888f33270bf97f31a3a6a7a4037a4cff12fc0a9b08cfdf/diff",
                "MergedDir": "/var/lib/docker/overlay2/e793bd21bb6911e256983fa8976107691e8c42436660ded1d536f8f6d615e2d2/merged",
                "UpperDir": "/var/lib/docker/overlay2/e793bd21bb6911e256983fa8976107691e8c42436660ded1d536f8f6d615e2d2/diff",
                "WorkDir": "/var/lib/docker/overlay2/e793bd21bb6911e256983fa8976107691e8c42436660ded1d536f8f6d615e2d2/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "8cb7a7f817b7",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "while true; do echo ovo; sleep 1;done"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20201204",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "faa7f146562458df9f9da906087ff31838155efd2c46ab9ca86c3fe2a2f9fcc9",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/faa7f1465624",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "59467700f0e362a4ce2a59d3e78b54af93ceca38aa8556e3d312872fd38bedbe",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "4d571276e6668c0a7540d3c5bb9894ded1d4cde16c46a0112030707ee925426e",
                    "EndpointID": "59467700f0e362a4ce2a59d3e78b54af93ceca38aa8556e3d312872fd38bedbe",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }
        }
    }
]

3.4、进入当前正在运行的容器

#通常使用后台运行方式启动容器
docker exec -it 容器id bashshell  

测试

root@ovo:/home/zkpark# docker exec -it 8cb7a7f817b7 /bin/bash
[root@8cb7a7f817b7 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@8cb7a7f817b7 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 15:04 ?        00:00:00 /bin/sh -c while true; do echo ovo; sleep 1;done
root       956     0  0 15:20 pts/0    00:00:00 /bin/bash
root      1031     1  0 15:21 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root      1032   956  0 15:21 pts/0    00:00:00 ps -ef
[root@8cb7a7f817b7 /]# 

第二种进入容器的方式:

#docker attach 容器id
docker attach 8cb7a7f817b7  #由于之前写过死循环,所以只能强制退出,但是这表明这也是一种进入容器的方法

说明:

docker exec #进入容器开启新的终端,可以在里面操作 
docker attach #进入容器开启终端,不会启动新的进程,如果之前写过死循环则会继续运行

3.5、从容器内拷贝文件到我的主机上

docker cp 容器id:/home/需要拷贝的文件  拷贝到主机指定home路径下

测试:

root@ovo:/home# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
2340d00498b5   centos    "/bin/bash"   3 minutes ago   Up 3 minutes             crazy_panini
root@ovo:/home# docker attach 2340d00498b5
[root@2340d00498b5 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@2340d00498b5 /]# cd home  
[root@2340d00498b5 home]# ls
[root@2340d00498b5 home]# touch ovo.py
[root@2340d00498b5 home]# ls
ovo.py
[root@2340d00498b5 home]# exit  
exit
root@ovo:/home# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                     PORTS     NAMES
2340d00498b5   centos    "/bin/bash"   5 minutes ago   Exited (0) 6 seconds ago             crazy_panini
root@ovo:/home# docker cp 2340d00498b5:/home/ovo.py /home
root@ovo:/home# ls
lost+found  ovo.py  zkpark

类似地,如果是文件夹也可以拷贝过去,测试结果如下:

root@ovo:/home# docker start 2340d00498b5
2340d00498b5
root@ovo:/home# docker attach 2340d00498b5
[root@2340d00498b5 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@2340d00498b5 /]# cd /home
[root@2340d00498b5 home]# mkdir zkpy
[root@2340d00498b5 home]# ls
ovo.py  zkpy
[root@2340d00498b5 home]# docker cp 2340d00498b5:/home/zkpy /home
bash: docker: command not found
[root@2340d00498b5 home]# read escape sequence
root@ovo:/home# docker cp 2340d00498b5:/home/zkpy /home
root@ovo:/home# ls
lost+found  ovo.py  zkpark  zkpy

docker 命令小总结:
在这里插入图片描述

四、离线安装 docker

1、下载离线包,网址:
https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/
离线安装docker需要下载3个包:containerd.io ,docker-ce-cli,docker-ce

2、下载完毕后拷贝到ubuntu上用 dpkg 命令安装,先安装 containerd.io 跟 docker-ce-cli,最后安装docker-ce,命令

sudo dpkg -i xxxx.deb

在这里插入图片描述
安装完之后,其他操作同前面的步骤。

五、搜索深度学习框架镜像

搜索深度学习框架镜像,可根据需求拉取镜像即可。
在这里插入图片描述

备注1:重新开机启动docker可能出现的问题:

Cannot connect to the Docker daemon at 
unix:///var/run/docker.sock. Is the docker daemon running?"

解决办法:

su root # 先切换到root用户, 再执行以下命令
systemctl enable docker # 开机自动启动docker
systemctl start docker # 启动docker
systemctl restart docker # 重启dokcer

备注2:如果不想使用docker,可卸载:

卸载Docker Engine,CLI和Containerd软件包:

sudo apt-get purge docker-ce docker-ce-cli containerd.io

主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷:

sudo rm -rf /var/lib/docker

您必须手动删除所有已编辑的配置文件。

备注3:如果拉取和创建镜像的速度很慢,解决的办法如下:

参考这篇文章:
https://blog.csdn.net/weixin_43569697/article/details/89279225
最后是重新加载文件和重启docker(不要忘记这两步)

sudo systemctl daemon-reload//重新加载
sudo systemctl restart docker//重启

案例:重新穿件一个镜像,测试一下速度快不快。

 sudo docker run -it ubuntu:16.04 /bin/bash

首先docker rmi时指定名称,而非image id,然后再执行docker rmi -f image idj即可:

docker rmi 你的镜像名:TAG
docker rmi -f 你的镜像ID

在这里插入图片描述

参考文献

https://docs.microsoft.com/zh-cn/dotnet/architecture/containerized-lifecycle/what-is-docker
https://www.cnblogs.com/walker-lin/p/11214127.html
https://www.jianshu.com/p/53af55f97c7d
https://blog.51cto.com/13643643/2156982
https://www.bilibili.com/video/BV1og4y1q7M4?p=5

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 两个小时学会DirectDraw编程 (转载)
  • 【长篇博文】Docker学习笔记与深度学习环境的搭建和部署(二)
  • 从系统中取得指定资源图像(转载)
  • 【长篇博文】Docker学习笔记(四):镜像的分层、打包、双向绑定、导入导出、Dockerfile的构建、部署与发布
  • PyTorch1.8-gpu和TensorFlow-gpu-2.5已发布【附下载地址和安装教程】
  • 2004年7月19日
  • 使用TensorRT提高GPU上的YOLOv4对象检测速度
  • 论文《Focal Loss for Dense Object Detection》Detectron2的安装与测试(测试案例:全景分割、姿态估计、实例分割、目标检测 - Faster R-CNN)
  • 反叛之冰:Internet Communications Engine
  • 【经典视觉算法推荐】Focal Loss 论文公式推导及主要贡献
  • 2004年7月20日
  • YOLO自带的图像数据增强方法
  • 好久没来了
  • 企业微信点餐接口文档
  • 观十面埋伏有感(爆强!) (转自猛禽的blog)
  • 深入了解以太坊
  • 收藏网友的 源程序下载网
  • Android 架构优化~MVP 架构改造
  • IOS评论框不贴底(ios12新bug)
  • k个最大的数及变种小结
  • socket.io+express实现聊天室的思考(三)
  • V4L2视频输入框架概述
  • Webpack 4 学习01(基础配置)
  • 包装类对象
  • 从零开始学习部署
  • 对象管理器(defineProperty)学习笔记
  • 关于List、List?、ListObject的区别
  • 什么软件可以剪辑音乐?
  • 用 Swift 编写面向协议的视图
  • C# - 为值类型重定义相等性
  • HanLP分词命名实体提取详解
  • ​iOS安全加固方法及实现
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # 飞书APP集成平台-数字化落地
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #android不同版本废弃api,新api。
  • #git 撤消对文件的更改
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (篇九)MySQL常用内置函数
  • (七)Flink Watermark
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (杂交版)植物大战僵尸
  • (正则)提取页面里的img标签
  • (转)程序员技术练级攻略
  • ****三次握手和四次挥手
  • .NET C# 配置 Options
  • .net dataexcel 脚本公式 函数源码
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET企业级应用架构设计系列之结尾篇
  • .net中的Queue和Stack
  • @cacheable 是否缓存成功_Spring Cache缓存注解