跳到主要内容

Docker 安装经验与常用命令

阅读需 9 分钟

文章首先分享 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 系统,建议更新到较新的应用程序。

官方资料:在Windows上安装Docker Toolbox

toolbox

我相信你已经默默下定决心要使用 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或更高版本)

推荐阅读:Windows10家庭版的功能中没有Hyper-V的解决方法

开启 Hyper-V。

win 键,输入“功能”,打开“启用或者关闭 Windows 功能”。勾选“Hyper-V”,确定,系统会重启。

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

settings

② 在 Daemon -> Registry mirrors 内填写阿里云提供的地址,然后点击下方的 Apply 应用重启。

填写其他镜像源地址同理。

daemonBasic

如果点击 Basic 按钮,会切换到 Advanced 模式,区别只是换成 JSON 格式了。

daemonAdvanced

3. 修改了源,依旧超时失败?

阿里云提供加速的只有一部分,并不是 Dokcer hub 所有的源。

如果在阿里云镜像中心->镜像搜索,没有找到该镜像, 就会从 Docker hub 下载,所以会慢。

可以多设置几个镜像源来解决此问题。

这个郁闷我好久!一直以为是哪里出问题了。

四、简单体验

打开一个终端。

以下内容是按着逻辑顺序进行的,建议采用相同的顺序去体验。

1. 拉取镜像 pull

我们先用一个小镜像体验一下 docker,只有 1.84kb。

docker pull hello-world

helloworld

这里你也许会困惑,软件有多个版本怎么办,我能不能指定版本?

注意上图中红框内的文字,推荐阅读:Docker命令-docker pull

此外建议再拉取一个 alpine,一个只有 5MB 的 Linux 操作系统,之后的体验会用到。

docker pull alpine

2. 查看镜像 images

来看看我们已有的镜像。

docker images

images

3. 创建容器 create / run

接下来就是使用镜像来创建容器。可用一个镜像创建多个容器。

create 命令:创建一个的容器但不启动它,返回容器 ID。

run 命令:创建一个的容器并启动它,只需要在第一次运行时使用。

两者语法一致,区别仅在于是否启动。

建议加上 --name 参数,给容器指定名称,会默认自动生成名称。

//仅创建新容器
docker create hello-world
//创建新容器并指定名称为“myHello”
docker run --name="myHello" hello-world
//创新新容器并启动它
docker run hello-world

createAndRun

4. 查看所有容器 ps -a

你会发现,出现了多个 hello-world 容器。

container id :容器 ID,这里有一个小技巧:如果使用 ID 对容器操作,不需要输入完整的 ID 内容,你可以只输入一部分,保证其唯一即可。在第9小节会对其进行演示。

command :运行容器时需要使用(可能功能描述不完全)。

status :容器的状态,这里能显示出 createrun 命令的区别。

names :容器名称,方便对容器操作,后续均用名称来操作容器。

docker ps -a

ps_a

5. 启动容器 start

容器已经创建完成了,我通过名称来启动它。

因为 myHello 一启动输出文字结束后就会退出,就不启动运行了。

docker start test //启动 alpine 容器

start

来了。

启动 alpine 的 test 容器后,就直接退出了?

经过对比,验证操作,我发现了一点不同:创建 test 容器时,使用的是 create 命令。难道必须初次启动?

于是我使用 run 命令重试等等方式,依旧失败

start2

最后是这样解决的:

图中为 test3 是因为没删掉失败的 testtest2,而代码中是先删除testtest2,再用成功的方法新建 test ,便于后文的操作。

此外测试 ubuntu 也是同样的情况,同样的解决方案。

docker run -it --name="test" alpine //新建 test,后续会解释“-it”
docker start test //启动 test 容器

start3

6. 查看运行容器 ps

想看看我们是否已经启动成功?前文已使用多次此命令。

docker ps //列出正在运行的容器
docker ps -a //列出所有容器,包括未运行的
docker ps -a -q //静默模式,仅显示所有容器ID

ps

7. 执行命令 exec

容器已经成功运行了, 要怎么进入容器呢?

exec 是在运行的容器中执行命令。

其中-itexec 命令的参数 -i-t 的缩写,这两个参数在第5小节start 最后部分出现过,前者是保持 stdin (标准输入)打开,后者是打开一个伪终端,两个一般是在一起使用的。

test 是容器名称,/bin/sh 是该容器的 command 的内容。

执行后就进入容器内了,内部的具体操作请看第五章alpine。

docker exec -it test /bin/sh
// ctrl+D 退出

exec

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) //停止所有容器

stop

9. 删除容器 rm

与容器挥手说再见。注意每个删除命令的不同之处~

顺便演示在第4小节start 中说的小技巧:名称、部分ID。

// 删除 myHello 容器
docker rm myHello
// 删除所有容器
docker rm $(docker ps -a -q)

rm

10. 删除镜像 rmi

比删除镜像多了一个 iimage 的含义。

docker rmi hello-world

rmi

11. 帮助 --help

所有命令都可以通过 --help 参数来查看手册。

docker --help
docker pull --help
...

help

五、Alpine

这是一个只有 5MB 的 Linux 容器镜像,非常适合作为基础镜像,建议了解,但大部分内容与 Docker 无关。

1. 包管理器 apk

它的包管理器叫做 apk,部分会在下面的内容详细说明。

// 基础命令
apk update //更新最新本地镜像源
apk upgrade //升级软件
apk add //新增软件
apk search //查找所以可用软件包
apk info //列出所有已安装的软件包

apk

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

repositories

③ 更新源,如图:

可以看出注释掉了最后一行,所以更新后就没有此源了。

apk update //更新源

更新源

3. 安装软件

① 首先查找包,用 node 来测试,如图。

可以在网站上查到所有的包。

阿里云地址:http://mirrors.aliyun.com/alpine

官方地址:https://pkgs.alpinelinux.org/packages

apk search //查找所有可用软件包
apk search -v nodejs //以软件包名查找软件包

search

② 安装软件,如图。

apk add nodejs //安装软件,这里的node没有自带npm,需要另行下载。

add

此外还有用 Dockerfile 来定制镜像,感兴趣的朋友可以去了解了解。

六、最后

查了查日记,了解 Docker 差不多是在 18 年 5 月份,之后就记录了安装很麻烦哈哈哈。

现在入门了些,再慢慢研究,以后使用、部署程序就会很方便了。

暂时未加入评论功能,请在对应公众号文章下或 GitHub Issues下留言反馈。