长篇博文记录学习流程不容易,请关注、转发、点赞、评论
,谢谢!
docker学习笔记
- 零、开篇介绍
- 一、注册、登录、链接器下载与安装、远程访问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)其他附加命令汇总:
- 三、常用容器命令
- 四、离线安装 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