文章首先分享 Docker 在 Windows 平台上的安装经验,其次通过逻辑顺序来展现 Docker 常用命令,最后分享一个大小只有 5MB 的 Linux 操作系统。
一、简介
docker 是什么?
我的个人理解:类似于虚拟机,但又与其不同。是容器,运行独立的软件,可以方便地部署。
强烈推荐此三张图片:docker容器与虚拟机有什么区别?
官方描述:我们为您提供了一个完整的集装箱解决方案-无论您是谁,无论您在您集装箱化之旅的哪里。We have a complete container solution for you - no matter who you are and where you are on your containerization journey.
二、安装
以 windows 平台安装为例,mac 基本相同,linux 应该无需我多言。
1. 阅读官方文档
这是最简单最详细最高效的方法。
官方文档:
<https://docs.docker.com/docker-for-windows/>
内容比较全,建议认真读,很多问题在文档中都有提及。如果看见全英文有点头大..翻译后的效果还是很不错的。
2. 安装包
在 Windows 下安装 Docker,有两种安装包,它们的名字不同,效果也不同。
建议使用新版安装包 Docker Desktop for Windows,而不是旧版安装包 Docker Toolbox。
很多教程,开篇就是安装 Docker Toolbox,在我最初接触 Docker 的时候,那酸爽。而且,官方也并不推荐:Docker Toolbox 适用于较旧的 Mac 和 Windows 系统,建议更新到较新的应用程序。
我相信你已经默默下定决心要使用 Docker Desktop for Windows 了,但是有一个新的问题,请看下一小节 Hyper-V。
3. Hyper-V
Docker Desktop for Windows 很棒,但它需要 Hyper-V 这个虚拟机。
问题在于 Windows 10 家庭版不带 Hyper-V ,只能选择 Docker Toolbox 来安装,利用 Virutal Box 建立 Linux 虚拟机,在虚拟机中安装 Docker。
建议升级系统为专业版,使用 Hyper-V。
系统要求:Windows 10 64位:Pro,Enterprise或Education(1607周年更新,Build 14393或更高版本)
开启 Hyper-V。
按
win
键,输入“功能”,打开“启用或者关闭 Windows 功能”。勾选“Hyper-V”,确定,系统会重启。
4. Docker Desktop for Windows
如果电脑支持 Hyper-V,直接下载 Docker Desktop for Windows 安装包就好了。
安装时不要勾选:use windows containers instead of linux containers
官方地址:https://www.docker.com/get-started
百度云地址:链接:https://pan.baidu.com/s/1BaCwrgIpuOar9J3Tcbmf0w 提取码:pvqi
百度云分享的是官方的安装包,鉴于官方的速度,百度可能更快点。
版本v2.0.0.31259,下载时间:2019-04-13。
三、更换镜像源
普遍情况下使用 docker 官方镜像源会非常慢,所以需要更换镜像源地址。
1. 获取加速器地址
阿里云提供了容器镜像服务,在镜像中心->镜像加速器,有加速器地址,这是专属你的地址,如图。
2. 设置源地址
接下来对 Docker 进行设置。
① 右键小鲸鱼,打开设置,如图。
注:建议使用 Linux containers(默认) ,不要切换为 Windows containers
② 在 Daemon -> Registry mirrors 内填写阿里云提供的地址,然后点击下方的 Apply
应用重启。
填写其他镜像源地址同理。
如果点击 Basic
按钮,会切换到 Advanced
模式,区别只是换成 JSON
格式了。
3. 修改了源,依旧超时失败?
阿里云提供加速的只有一部分,并不是 Dokcer hub 所有的源。
如果在阿里云镜像中心->镜像搜索,没有找到该镜像, 就会从 Docker hub 下载,所以会慢。
可以多设置几个镜像源来解决此问题。
这个郁闷我好久!一直以为是哪里出问题了。
四、简单体验
打开一个终端。
以下内容是按着逻辑顺序进行的,建议采用相同的顺序去体验。
1. 拉取镜像 pull
我们先用一个小镜像体验一下 docker,只有 1.84kb。
docker pull hello-world
这里你也许会困惑,软件有多个版本怎么办,我能不能指定版本?
注意上图中红框内的文字,推荐阅读:Docker命令-docker pull
此外建议再拉取一个 alpine,一个只有 5MB 的 Linux 操作系统,之后的体验会用到。
docker pull alpine
2. 查看镜像 images
来看看我们已有的镜像。
docker images
3. 创建容器 create / run
接下来就是使用镜像来创建容器。可用一个镜像创建多个容器。
create
命令:创建一个新的容器但不启动它,返回容器 ID。
run
命令:创建一个新的容器并启动它,只需要在第一次运行时使用。
两者语法一致,区别仅在于是否启动。
建议加上
--name
参数,给容器指定名称,会默认自动生成名称。
//仅创建新容器
docker create hello-world
//创建新容器并指定名称为“myHello”
docker run --name="myHello" hello-world
//创新新容器并启动它
docker run hello-world
4. 查看所有容器 ps -a
你会发现,出现了多个 hello-world 容器。
container id
:容器 ID,这里有一个小技巧:如果使用 ID 对容器操作,不需要输入完整的 ID 内容,你可以只输入一部分,保证其唯一即可。在第9小节会对其进行演示。
command
:运行容器时需要使用(可能功能描述不完全)。
status
:容器的状态,这里能显示出 create
和 run
命令的区别。
names
:容器名称,方便对容器操作,后续均用名称来操作容器。
docker ps -a
5. 启动容器 start
容器已经创建完成了,我通过名称来启动它。
因为
myHello
一启动输出文字结束后就会退出,就不启动运行了。
docker start test //启动 alpine 容器
坑来了。
启动 alpine 的 test
容器后,就直接退出了?
经过对比,验证操作,我发现了一点不同:创建 test
容器时,使用的是 create
命令。难道必须初次启动?
于是我使用 run
命令重试等等方式,依旧失败。
最后是这样解决的:
图中为
test3
是因为没删掉失败的test
和test2
,而代码中是先删除test
和test2
,再用成功的方法新建test
,便于后文的操作。此外测试 ubuntu 也是同样的情况,同样的解决方案。
docker run -it --name="test" alpine //新建 test,后续会解释“-it”
docker start test //启动 test 容器
6. 查看运行容器 ps
想看看我们是否已经启动成功?前文已使用多次此命令。
docker ps //列出正在运行的容器
docker ps -a //列出所有容器,包括未运行的
docker ps -a -q //静默模式,仅显示所有容器ID
7. 执行命令 exec
容器已经成功运行了, 要怎么进入容器呢?
exec
是在运行的容器中执行命令。
其中-it
是 exec
命令的参数 -i
和 -t
的缩写,这两个参数在第5小节start
最后部分出现过,前者是保持 stdin
(标准输入)打开,后者是打开一个伪终端,两个一般是在一起使用的。
test
是容器名称,/bin/sh
是该容器的 command
的内容。
执行后就进入容器内了,内部的具体操作请看第五章alpine。
docker exec -it test /bin/sh
// ctrl+D 退出
8. 暂停关闭容器 pause / stop
让容器休息一下。注意图中 Status 状态的变化。
docker pause test //暂停 test 容器
docker unpause test //恢复 myHello
docker restart test //重启 myHello 容器
docker stop test //停止运行 test 容器
docker stop $(docker ps -a -q) //停止所有容器
9. 删除容器 rm
与容器挥手说再见。注意每个删除命令的不同之处~
顺便演示在第4小节
start
中说的小技巧:名称、部分ID。
// 删除 myHello 容器
docker rm myHello
// 删除所有容器
docker rm $(docker ps -a -q)
10. 删除镜像 rmi
比删除镜像多了一个 i
,image
的含义。
docker rmi hello-world
11. 帮助 --help
所有命令都可以通过 --help
参数来查看手册。
docker --help
docker pull --help
...
五、Alpine
这是一个只有 5MB 的 Linux 容器镜像,非常适合作为基础镜像,建议了解,但大部分内容与 Docker 无关。
1. 包管理器 apk
它的包管理器叫做 apk,部分会在下面的内容详细说明。
// 基础命令
apk update //更新最新本地镜像源
apk upgrade //升级软件
apk add //新增软件
apk search //查找所以可用软件包
apk info //列出所有已安装的软件包
2. 换源
依旧是因为速度原因,不过 alpine 的源方便一些。
① 打开源文件:
vi /etc/apk/repositories
② 增加两行内容,如图:
这是 vi 编辑器,vim 是它的升级版本。
界面按
i
后才可以输入文字,退出的时候按ESC
,再输入:wq
保存退出。#
是注释。
// 这里的 v3.9 版本号以原内容为标准。目前采用的是阿里源,添加其他源同理。
http://mirrors.aliyun.com/alpine/v3.9/main
http://mirrors.aliyun.com/alpine/v3.9/community
③ 更新源,如图:
可以看出注释掉了最后一行,所以更新后就没有此源了。
apk update //更新源
3. 安装软件
① 首先查找包,用 node
来测试,如图。
可以在网站上查到所有的包。
apk search //查找所有可用软件包
apk search -v nodejs //以软件包名查找软件包
② 安装软件,如图。
apk add nodejs //安装软件,这里的node没有自带npm,需要另行下载。
此外还有用 Dockerfile 来定制镜像,感兴趣的朋友可以去了解了解。
六、最后
查了查日记,了解 Docker 差不多是在 18 年 5 月份,之后就记录了安装很麻烦哈哈哈。
现在入门了些,再慢慢研究,以后使用、部署程序就会很方便了。