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

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 dockersudo apt-get purge docker-cesudo 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-22Key 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 --helpUsage:  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 --helpUsage:  docker inspect [OPTIONS] NAME|ID [NAME|ID...]Return low-level information on Docker objectsOptions:-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

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

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

    长篇博文记录学习流程不容易,请关注.转发.点赞.评论,谢谢! 上一篇文章:Docker学习笔记与深度学习环境的搭建和部署(一) 文章末尾附加nvidia455.23.cuda11.1.cudnn8.0 ...

  2. 深度学习入门之PyTorch学习笔记:深度学习介绍

    深度学习入门之PyTorch学习笔记:深度学习介绍 绪论 1 深度学习介绍 1.1 人工智能 1.2 数据挖掘.机器学习.深度学习 1.2.1 数据挖掘 1.2.2 机器学习 1.2.3 深度学习 第 ...

  3. ScalersTalk 机器学习小组第 21 周学习笔记(深度学习-10)

    ScalersTalk 机器学习小组第 21 周学习笔记(深度学习-10) Scalers点评:机器学习小组是成长会的内部小组,这是成长会机器学习小组第21周学习笔记,也是深度学习第10次的复盘笔记 ...

  4. 学习笔记:深度学习(3)——卷积神经网络(CNN)理论篇

    学习时间:2022.04.10~2022.04.12 文章目录 3. 卷积神经网络CNN 3.1 卷积神经网络的概念 3.1.1 什么是CNN? 3.1.2 为什么要用CNN? 3.1.3 人类的视觉 ...

  5. 学习笔记:深度学习(6)——基于深度学习的语言模型

    学习时间:2022.04.22~2022.04.25 文章目录 5. 基于深度学习的语言模型 5.1 从NNLM到词嵌入 5.1.1 神经网络语言模型 NNLM 5.1.2 基于循环神经网络的语言模型 ...

  6. 深度学习入门之PyTorch学习笔记:深度学习框架

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 2.1 深度学习框架介绍 2.1.1 TensorFlow 2.1.2 Caffe 2.1.3 Theano 2.1.4 ...

  7. [深度学习笔记(1)]深度学习入门

    本系列是博主刚开始接触深度学习时写的一些笔记,写的很早了一直没有上传,趁着假期上传一下,作为分享,希望能帮助到你. 目录 前言 一.什么是深度学习 二.深度学习的应用 三.深度神经网络的难题 3.1 ...

  8. 吴恩达深度学习代码_吴恩达深度学习笔记(58)-深度学习框架Tensorflow

    TensorFlow 有很多很棒的深度学习编程框架,其中一个是TensorFlow,很期待帮助你开始学习使用TensorFlow,我想在这个笔记中向你展示TensorFlow程序的基本结构,然后让你自 ...

  9. 2.1)深度学习笔记:深度学习的实践层面

    目录 1)Train/Dev/Test sets 2)Bias/Variance 3)Regularization(重点) 4)Why regularization reduces overfitti ...

  10. 学习笔记:深度学习中的正则化

    点击上方"视学算法",星标公众号 重磅干货,第一时间送达 作者:草yang年华 一.正则化介绍 问题:为什么要正则化? NFL(没有免费的午餐)定理: 没有一种ML算法总是比别的好 ...

最新文章

  1. js 定时器(setTimeout/setInterval)出现变量未定义(xxx is not defined) 的解决方法
  2. JVM的监控工具之jinfo
  3. 幸福的2016-----年终总结
  4. Spark RDD使用详解3--Value型Transformation算子
  5. OK335xS psplash make-image-header.sh hacking
  6. 山东师范大学志愿推荐系统邀请码_快看点邀请码填写HGC1QK快看点邀请码填写HGC1QK快看点邀请码大家千万不要乱填写哦...
  7. matlab 中 t=0:t:(n-1)t;k=0:n-1,《MATLAB语言与应用》练习题答案
  8. MySQL安装错误——Access denied for user 'root'@'localhost' (using password: YES)
  9. Anchor-free新思路,统一目标检测、实例分割、姿态估计三种任务
  10. 软件自动化测试题,软件自动化测试模拟题.doc
  11. 信创产业已成现象级新风口 代码“源头”安全该如何守护?
  12. Professional ASP.NET 2.0之跨页提交-Cross Page Posting
  13. 区块链技术指南学习(一)未来已来
  14. vant中修改用户的头像
  15. Mirth Linux(Centos)无界面安装及配置,可作为服务总线用,功能超强,就不细说了
  16. WebService接口大全
  17. codeforces 1728E
  18. 关于选课系统的的界面设计、类图设计、数据库设计。
  19. OpenGL ES EGL eglCreateContext
  20. CGB2005 JT-1

热门文章

  1. java 一年有多少周_Java获取一年有多少周、某周的第一天和最后一天.
  2. Arduino 使用 LCD1602 显示屏IIC驱动
  3. 电脑版微信提示音mp3_短的微信提示音什么好?40首好听的微信提示音试听下载...
  4. 深空天体反差指数计算
  5. 6s微信连接不上服务器失败是什么原因,6s手机微信打不开怎么回事
  6. 天行健,君子以自强不息
  7. 亲身经历:程序人生路上的荆棘与感动
  8. 【BZOJ】P4238 电压
  9. 快速爬取腾讯招聘信息
  10. PS之立体台球制作步骤