6

Docker从哪儿下载?

由于我们访问Docker官网一般情况下会非常慢,所以我们不得不把目光投向国内的镜像站,还好,DaoCloud为我们扫清了一系列障碍,点击前往

你只需要以下步骤:

  • 注册一个DaoCloud账号

  • 进入下载页面,根据自己的系统下载合适的镜像包

  • 安装完成后配置Docker加速器

  • 打开命令行,执行docker version,观察Docker是否安装成功

入门锦囊

名词解释

  • Image

    • Image是一堆文件的集合体,从用户角度来看,它是一个镜像包,它的特征是只读的,它是别人(或者我们自己)构建好的一个环境,在Docker世界里,我们会经常寻找第三方包,来支持我们的工作,如nginx,centos,我们不修改它,我们基于它实例出的container进行工作。

  • container

    • Image是只读的,我们是不可能也没必要去修改Image的,我们要做的就是实例化Image,即称为container,我们所做的修改都是基于container的,如图所示,container其实就是Image的一份拷贝,但是多了一部分可读写的区域,我们就是对这部分进行加工处理的,container其实也是一系列文件,真正支持我们交互的是Running container,它多出了一个进程,此进程提供我们与container读写区域沟通的途径,我们才得以有机会运行Docker

container经过我们的处理就像在git仓库里修改了文件一样,将修改后的container打快照固化为Image,这便是Docker生态的流动源泉。起初,我们可能只是一个壳子,人们陆陆续续为其增添功能,并且固化,经过一系列的串行作业后,这个壳子镜像凝结了前人的智慧,傲娇地展示在我们面前。

命令解释

  • docker run [Image Name]

    • 检查本地是否有Image Name

    • 如果没有的话,则从远端仓库下载

    • 加载Image并且实例化container(实际上执行了 docker create && docker start

  • docker ps

    • 默认显示当前正在运行container

    • 加上-a可以显示创建过的所有的container

小提示:按住Ctrl + C 可以中断当前前台进程(占用着你的Shell,让你无法继续进行操作的那个进程)

Hello World 1

  1. 输入docker run hello-world,命令行会打印以下信息

$ docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
535020c3e8ad: Pull complete
af340544ed62: Pull complete
Digest: sha256:a68868bfe696c00866942e8f5ca39e3e31b79c1e50feaee4ce5e28df2f051d5c
Status: Downloaded newer image for hello-world:latest

Hello from Docker.

执行docker ps -a,将会显示一个列表,显示错乱往往是因为你的命令行工具太窄了,你可以试着全屏显示。我们启动过的所有的container将会在这里显示。

为什么不能直接执行docker ps?hello-world这个Image在创建好container以后,打印信息,然后自动stop这个container,所以它已经不在正在运行的container列表里了。

Hello World 2

  • 输入docker run centos /bin/echo 'hello world',这一步我们不仅仅启动了一个container,还传输了一个命令进去执行了。

    docker run centos /bin/echo 'Hello world'

    Hello world
  • 输入docker run -it centos可以启动一个交互性的centos,如同你正在远程ssh连接服务器。

神器容器在哪里?

目前为止,我们大约执行了3次docker run命令,不过目前看来,我们还是回到了自己的shell进程上,那么刚才执行的那些容器在哪里呢?我们试着再次输入docker ps -a,仔细观察打印出的数据,我们曾经启动过的容器都在这儿,虽然它们都不处于运行状态,观察最右边的NAMES字段,Docker会为每一个容器起一个名字,小猫小狗随机取,如果我们想自己起名的话,请在执行run命令时加上--name [you_define_name]参数试试看。

我们当然也可以再次唤醒我们的容器们,执行docker start [container_name]即可。

我们试着再次启动一个容器。

# 新建一个名为 小明 的容器
docker run -it --name xiaoming centos
# Ctrl + c 退出交互进程
docker stop xiaoming
# 查看最近创建的一个容器 -l -> latest 我们将会看到小明被打印了
docker ps -l
# 我们再次重启小明,但是发现回不到命令行交互模式了
docker start xiaoming

有时候,我们可能会有想进入容器内部,就像一直很熟悉的ssh连接一样,但是在Docker里,要尽量规避这种想法,我们可以通过docker exec去实现这种需求,详情见扩展阅读。

扩展阅读


LuckyJing
472 声望21 粉丝