【长篇博文】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 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学习笔记与深度学习环境的搭建和部署(一)相关推荐
- 【长篇博文】Docker学习笔记与深度学习环境的搭建和部署(二)
长篇博文记录学习流程不容易,请关注.转发.点赞.评论,谢谢! 上一篇文章:Docker学习笔记与深度学习环境的搭建和部署(一) 文章末尾附加nvidia455.23.cuda11.1.cudnn8.0 ...
- 深度学习入门之PyTorch学习笔记:深度学习介绍
深度学习入门之PyTorch学习笔记:深度学习介绍 绪论 1 深度学习介绍 1.1 人工智能 1.2 数据挖掘.机器学习.深度学习 1.2.1 数据挖掘 1.2.2 机器学习 1.2.3 深度学习 第 ...
- ScalersTalk 机器学习小组第 21 周学习笔记(深度学习-10)
ScalersTalk 机器学习小组第 21 周学习笔记(深度学习-10) Scalers点评:机器学习小组是成长会的内部小组,这是成长会机器学习小组第21周学习笔记,也是深度学习第10次的复盘笔记 ...
- 学习笔记:深度学习(3)——卷积神经网络(CNN)理论篇
学习时间:2022.04.10~2022.04.12 文章目录 3. 卷积神经网络CNN 3.1 卷积神经网络的概念 3.1.1 什么是CNN? 3.1.2 为什么要用CNN? 3.1.3 人类的视觉 ...
- 学习笔记:深度学习(6)——基于深度学习的语言模型
学习时间:2022.04.22~2022.04.25 文章目录 5. 基于深度学习的语言模型 5.1 从NNLM到词嵌入 5.1.1 神经网络语言模型 NNLM 5.1.2 基于循环神经网络的语言模型 ...
- 深度学习入门之PyTorch学习笔记:深度学习框架
深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 2.1 深度学习框架介绍 2.1.1 TensorFlow 2.1.2 Caffe 2.1.3 Theano 2.1.4 ...
- [深度学习笔记(1)]深度学习入门
本系列是博主刚开始接触深度学习时写的一些笔记,写的很早了一直没有上传,趁着假期上传一下,作为分享,希望能帮助到你. 目录 前言 一.什么是深度学习 二.深度学习的应用 三.深度神经网络的难题 3.1 ...
- 吴恩达深度学习代码_吴恩达深度学习笔记(58)-深度学习框架Tensorflow
TensorFlow 有很多很棒的深度学习编程框架,其中一个是TensorFlow,很期待帮助你开始学习使用TensorFlow,我想在这个笔记中向你展示TensorFlow程序的基本结构,然后让你自 ...
- 2.1)深度学习笔记:深度学习的实践层面
目录 1)Train/Dev/Test sets 2)Bias/Variance 3)Regularization(重点) 4)Why regularization reduces overfitti ...
- 学习笔记:深度学习中的正则化
点击上方"视学算法",星标公众号 重磅干货,第一时间送达 作者:草yang年华 一.正则化介绍 问题:为什么要正则化? NFL(没有免费的午餐)定理: 没有一种ML算法总是比别的好 ...
最新文章
- js 定时器(setTimeout/setInterval)出现变量未定义(xxx is not defined) 的解决方法
- JVM的监控工具之jinfo
- 幸福的2016-----年终总结
- Spark RDD使用详解3--Value型Transformation算子
- OK335xS psplash make-image-header.sh hacking
- 山东师范大学志愿推荐系统邀请码_快看点邀请码填写HGC1QK快看点邀请码填写HGC1QK快看点邀请码大家千万不要乱填写哦...
- matlab 中 t=0:t:(n-1)t;k=0:n-1,《MATLAB语言与应用》练习题答案
- MySQL安装错误——Access denied for user 'root'@'localhost' (using password: YES)
- Anchor-free新思路,统一目标检测、实例分割、姿态估计三种任务
- 软件自动化测试题,软件自动化测试模拟题.doc
- 信创产业已成现象级新风口 代码“源头”安全该如何守护?
- Professional ASP.NET 2.0之跨页提交-Cross Page Posting
- 区块链技术指南学习(一)未来已来
- vant中修改用户的头像
- Mirth Linux(Centos)无界面安装及配置,可作为服务总线用,功能超强,就不细说了
- WebService接口大全
- codeforces 1728E
- 关于选课系统的的界面设计、类图设计、数据库设计。
- OpenGL ES EGL eglCreateContext
- CGB2005 JT-1