Docker 学习笔记

2017-02-10  本文已影响278人  kviccn

参考书籍 Docker —— 从入门到实践
本文只记录重要步骤,更详细的内容请在原书中查看

安装

Ubuntu、Debian 系列安装 Docker

尽量使用最新的发行版,本文使用的版本为Ubuntu Xenial 16.04 (LTS)

使用脚本自动安装

Docker 官方为了简化安装流程,提供了一套安装脚本,Ubuntu 和 Debian 系统可以使用这套脚本安装:

curl -sSL https://get.docker.com/ | sh

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker 安装在系统中。

不过,由于伟大的墙的原因,在国内使用这个脚本可能会出现下载出错的情况。
本文使用的是 DaoCloud 提供的安装脚本

DaoCloud 提供的安装脚本 curl -sSL https://get.daocloud.io/docker | sh

启动 Docker 引擎

$ sudo systemctl enable docker
$ sudo systemctl start docker

建立 docker 用户组

默认情况下,docker命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

建立 docker 组:

$ sudo groupadd docker

将当前用户加入 docker 组:

$ sudo usermod -aG docker $USER

镜像加速器

国内访问 Docker Hub 有时会遇到困难,此时可以配置镜像加速器。
本文使用 DaoCloud 提供的加速器

输入如下命令:

$ sudo curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s 服务提供商分配给你的地址
例如: http://4e76bd89.m.daocloud.io

然后重启 docker 服务即可

$ sudo systemctl restart docker.service

镜像

获取镜像

获取镜像的命令是 docker pull 格式为:

$ sudo docker pull [选项] [Docker Registry地址]<仓库名>:<标签>

例如:

$ sudo docker pull ubuntu:14.04

上面的命令中没有给出 Docker Registry 地址,因此将会从 Docker Hub 获取镜像。而镜像名称是 ubuntu:14.04,因此将会获取官方镜像 library/ubuntu 仓库中标签为 14.04 的镜像。

运行

有了镜像后,我们就可以以这个镜像为基础启动一个容器来运行。以上面的 ubuntu:14.04 为例,如果我们打算启动里面的 bash 并且进行交互式操作的话,可以执行下面的命令。

$ sudo docker run -it --rm ubuntu:14.04 bash
root@08ce449494db:/# cat /etc/os-release 
NAME="Ubuntu"
VERSION="14.04.5 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.5 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
root@08ce449494db:/# exit
exit
$ 

docker run 是运行容器的命令

进入容器后,我们可以在 Shell 下操作,执行任何所需的命令。这里,我们执行了 cat /etc/os-release,这是 Linux 常用的查看当前系统版本的命令,从返回的结果可以看到容器内是 Ubuntu 14.04.5 LTS 系统。

最后我们通过 exit 退出了这个容器。

列出镜像

要想列出已经下载下来的镜像,可以使用 docker images 命令。

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               f49eec89601e        12 days ago         129 MB
ubuntu              latest              f49eec89601e        12 days ago         129 MB
ubuntu              14.04               b969ab9f929b        12 days ago         188 MB

列表包含了仓库名、标签、镜像 ID、创建时间以及所占用的空间。

镜像 ID 是镜像的唯一标识,一个镜像可以对应多个标签。因此,在上面的例子中,我们可以看到 ubuntu:16.04ubuntu:latest 拥有相同的 ID,因为它们对应的是同一个镜像。

列出部分镜像

不加任何参数的情况下,docker images 会列出所有顶级镜像,但是有时候我们只希望列出部分镜像。docker images 有好几个参数可以帮助做到这个事情。

根据仓库名列出镜像

$ sudo docker images ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               f49eec89601e        12 days ago         129 MB
ubuntu              latest              f49eec89601e        12 days ago         129 MB
ubuntu              14.04               b969ab9f929b        12 days ago         188 MB

列出特定的某个镜像,也就是说指定仓库名和标签

$ sudo docker images ubuntu:16.04
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               f49eec89601e        12 days ago         129 MB

除此以外,docker images 还支持强大的过滤器参数 --filter,或者简写 -f。比如,我们希望看到在 ubuntu:14.04 之后建立的镜像,可以用下面的命令:

$ sudo docker images -f since=ubuntu:14.04
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               f49eec89601e        12 days ago         129 MB
ubuntu              latest              f49eec89601e        12 days ago         129 MB

想查看某个位置之前的镜像也可以,只需要把 since 换成 before 即可。

以特定格式显示

默认情况下,docker images 会输出一个完整的表格,但是我们并非所有时候都会需要这些内容。比如,我们需要利用 docker images 把所有镜像的 ID 列出来,然后交给 docker rmi 命令作为参数来删除指定的这些镜像,这个时候就用到了 -q 参数。

$ sudo docker images -q
f49eec89601e
f49eec89601e
b969ab9f929b

利用 commit 理解镜像构成(预留)

此处先省略一万字_
............................................................

使用 Dockerfile 定制镜像


临时内容:
Dockerfile 中有 CMD 时,容器启动时则执行该 CMD,如果在启动时加入参数则会覆盖掉原来的 CMD,如果 Dockerfile 中有 ENTRYPOINT,则 CMD 作为参数传递给 ENTRYPOINT。


Dockerfile:
FROM ubuntu:16.04
RUN apt-get update \
    && apt-get install -y curl \
    && rm -rf /var/lib/apt/lists/*
CMD [ "curl", "-s", "http://ip.cn" ]

$ docker run myip // 此时容器内执行的是命令 curl -s http://ip.cn
$ docker run myip echo "Hello" // 此时容器内执行的是命令 echo "Hello",CMD 被覆盖了 
上一篇下一篇

猜你喜欢

热点阅读