美文网首页
Docker 学习笔记

Docker 学习笔记

作者: kviccn | 来源:发表于2017-02-10 17:24 被阅读278次

    参考书籍 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地址]<仓库名>:<标签>
    
    • Docker Registry地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub。
    • 仓库名:如之前所说,这里的仓库名是两段式名称,既 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。

    例如:

    $ 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 是运行容器的命令

    • -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
    • --rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
    • ubuntu:14.04:这是指用 ubuntu:14.04 镜像为基础来启动容器。
    • bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash

    进入容器后,我们可以在 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 被覆盖了 
    

    相关文章

      网友评论

          本文标题:Docker 学习笔记

          本文链接:https://www.haomeiwen.com/subject/bnqrittx.html