Docker 入门(一):安装篇

Docker 是一个开源的容器引擎,它有助于更快地交付应用。Docker 可将应用程序和基础设施层分离,并将基础设施当做程序一样进行管理。安装篇介绍 Docker 的安装,并介绍 Docker 镜像加速器和 Docker 常用命令

Docker


安装

演示在 CentOs 上安装 Docker,其他操作系统上的安装可参考官方文档

系统要求

  • CentOs 7.x
  • 64 位

卸载旧版本

旧版本的 Docker 被叫做 docker 或者 docker-engine 。如果先前有安装,需要卸载掉它和它的相关依赖

1
2
3
4
5
6
7
8
9
10
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

yum 报告没有任何一个包被安装,那更好

/var/lib/docker 下的图像、容器、卷和网络会被保留。Then,新版的 Docker 叫做 docker-ce

开始安装

你可以使用 3 种方式安装 Docker

  • 建立 Docker 仓库,通过仓库安装。安装和升级都很简单,这也是官方推荐的方式

  • RPM 安装包的方式手动安装,而且完全手动管理升级

  • 使用自动化脚本安装

使用仓库安装

安装 Docker 之前,你需要先建立 Docker 仓库

建立仓库

  1. 安装 yum-utils ,这样可以使用 yum-config-manager 工具设置 Yum 源

    1
    sudo yum install -y yum-utils
  2. 使用以下命令来建立仓库

    1
    2
    3
    4

    sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
  3. 可选项:开启 edgetest 仓库。他们默认是关闭的

    1
    2
    3
    sudo yum-config-manager --enable docker-ce-edge

    sudo yum-config-manager --enable docker-ce-test

    类似地,可以使用以下命令来关闭他们

    1
    sudo yum-config-manager --disable docker-ce-edge

安装 Docker CE

  1. 使用以下命令安装最新版本,或调到下一步安装指定版本

    1
    sudo yum install docker-ce
  2. 如要安装指定版本,先列出所有可用版本,然后从中选择需要的版本

    a. 排序并列出你仓库中可用的版本。根据版本号来排序。

    1
    2
    3
    $ yum list docker-ce --showduplicates | sort -r

    docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable

    b. 以安装上面例子中列出的版本为例,执行以下命令

    1
    sudo yum install docker-ce-<docker-ce-18.03.0.ce>

    至此,Docker 已经安装好了,但是还没有启动

  3. 启动 Docker

    1
    sudo systemctl start docker
  4. 通过运行 hello-world 镜像来检验是否安装成功

    1
    sudo docker run hello-world

    这条命令会容器中下载并运行一个测试镜像。当容器正常运行后,终端会输出一些信息然后退出。

升级 Docker

升级 Docker 其实就是按照以上教程再安装需要的版本

使用 RPM 安装包安装

如果无法自动安装,或觉得自动安装太慢(一般 30min ),你可以下载 .rpm 包手动安装

下载安装包

  1. 前往地址 https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ 下载所需 .rpm

    如需下载 edge 版本,将路径中的 stable 换成 edge 便可

  2. 使用 yum 安装

    后面路径改为包的放置目录

    1
    sudo yum install /path/to/package.rpm
  3. 启动 docker

    1
    sudo systemctl start docker
  4. 通过运行 hello-world 镜像来检验是否安装成功

    1
    sudo docker run hello-world

    这条命令会容器中下载并运行一个测试镜像。当容器正常运行后,终端会输出一些信息然后退出。

使用脚本安装

请查阅官网文档。(字太多了,而且用的较少,就不翻译了)

卸载

  1. 卸载 docker

    1
    sudo yum remove docker-ce
  2. 删除/var/lib/docker 下的图像、容器、卷和自定义配置文件等

    1
    sudo rm -rf /var/lib/docker

配置镜像加速器

国内访问 Docker Hub 不稳定,所以需要配置镜像加速器。常用的加速器有阿里云加速器、DaoCloudy 加速器等,用法大致类似,这里以阿里云为例

  1. 登录阿里云,进入加速器控制台
  2. 复制并执行给出的代码,修改 daemon 配置文件 /etc/docker/daemon.json

    1
    2
    3
    4
    5
    6
    7
    8
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
    "registry-mirrors": ["https://********.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker

    其中 * 号的 8 位每个账号都是不同的

Docker 常用命令

  1. 查询 Docker 各种信息

    查看帮助文档、查看命令文档

    1
    2
    docker
    docker container --help

    查看 Docker 版本和信息

    1
    2
    3
    docker --version
    docker version
    docker info
  2. 运行镜像和查看运行的镜像

    测试/执行 Docker 镜像

    1
    docker run hello-world

    列出所有镜像,以下两个命令相同

    1
    2
    docker image ls
    docker images
  3. 获取和删除镜像

    以搜索 java 镜像为例

    1
    docker search java

    能看到类似以下结果。每一列分别是名字、描述、收藏数、是否是官方仓库、是否自动构建的镜像仓库

    1
    2
    NAME    DESCRIPTION     STARS   OFFICIAL   AUTOMATED
    java Java is a co… 1693 [OK]

    以下命令从 Docker Registry 上下载镜像

    1
    docker pull java

    以下第一个命令删除名为 hello-world 的镜像,或第二个命令删除所有镜像

    1
    2
    docker rmi hello-world
    docker rmi -f $(docker images)

    -f 参数表示强制删除

  4. 启动、停止、重启容器

    以下命令在终端打印 Hello World 字样,就行直接执行 /bin/echo 'Hello World' 一样

    1
    docker run java /bin/echo 'Hello World'

    执行下面的命令启动一个 Nginx 容器。-d 使其在后台运行,-p 映射容器的 80 端口到主机的 91 端口

    1
    docker run -d -p 91:80 nginx

    访问宿主机的 91 端口,能看到内容为 “Welcome to Nginx!”的页面

    Welcome to Nginx

    以下的命令查看所有容器。命令 docker ps 与其作用相同。-all-a 参数使已经关闭的容器也显示出来,-aq 参数使命令只显示容器 ID

    1
    2
    3
    4
    $ docker container ls --all

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    fbee2b39d7fd nginx:my "nginx …" 16 seconds ago Up 11 seconds 0.0.0.0:92->80/tcp optimistic_brahmagupta

    docker stop 命令停止容器,或改成 kill 强制停止

    1
    docker stop fbee2b39d7fd

    fbee2b39d7fd 是容器 ID。其实以上命令这样写 docker stop f 便可。容器 ID 输入具有辨识度的前几位就行

    docker start 命令启动已经停止的容器

    1
    docker start f

    docker restart 命令重启容器。实际是先执行了 docker stop,然后执行了 docker start

  5. 进入、删除容器

    docker attach 命令进入容器。但是这一命令不太方便。多个窗口同时 attach 到同一个容器时,所有窗口会同步显示。一个窗口堵塞,其他窗口也会无法执行操作

    对进入容器更加详尽的讲解,请看这篇博客

    docker rm fbee2b39d7fd 命令删除指定容器,同样的,ID 具有辨识度即可。-f 强制删除正在运行的容器

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

后记

翻译自 Docker 官方文档

借鉴《Spring Cloud与Docker微服务架构实战》/周立