CentOS上安装Docker引擎

一、前言

1、概述(什么是Docker)

  1. Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
  2. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
  3. 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

    2、Docker的应用场景

  4. Web 应用的自动化打包和发布。

  5. 自动化测试和持续集成、发布。
  6. 在服务型环境中部署和调整数据库或其他的后台应用。
  7. 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

    3、环境准备

  8. CentOS7.6(系统为64位、系统内核位3.10以上)

  9. JDK1.8

二、Docker安装部署

1、卸载旧版本Docker

  1. 旧版本的Docker被称为docker或docker-engine。如果安装了这些,请卸载它们以及相关的依赖项。

    1. sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
  2. 如果yum报告没有安装这些软件包,没关系。

  3. /var/lib/docker/的内容,包括图像、容器、卷和网络,将被保留。Docker Engine软件包现在称为docker-ce。

    2、离线安装Docker

  4. 如果您无法使用Docker的存储库安装Docker,您可以下载发布版本的.rpm文件并手动安装。每次升级Docker引擎时,都需要下载一个新文件。

  5. 转到https://download.docker.com/linux/centos/,选择您的CentOS版本。然后浏览到x86_64/stable/Packages/,并下载您想要安装的Docker版本的.rpm文件。要安装夜间或测试(预发布)软件包,请将上述URL中的“stable”一词更改为nightly或test。
  6. 需要下载一个selinux包:docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm和docker包:docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm,注意版本一定要对应,前面是centos的安装包。

image.png

  1. 安装Docker引擎,进入您下载Docker软件包的路径,使用yum进行rpm包安装。

    1. sudo yum install docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
    2. sudo yum install docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm

    image.png

    1. 在yum install 过程中可能遇到以下警告:

      1. Re-declaration of type docker_t
      2. Failed to create node
      3. Bad type declaration at /etc/selinux/targeted/tmp/modules/400/docker/cil:1
      4. /usr/sbin/semodule: Failed!
      5. Verifying : docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
    2. 这是一个已知的安装Docker过程的issue,在更高版本的Docker中可能已经得到了解决。

image.png
[

](https://blog.csdn.net/nklinsirui/article/details/80158997)

  1. Docker已安装,但尚未启动。创建docker组,但没有用户添加到组中。

    1. sudo groupadd docker

    image.png

    1. Docker守护进程绑定到Unix套接字,而不是TCP端口。默认情况下,Unix套接字归用户root所有,其他用户只能使用sudo访问它。Docker守护进程始终作为root用户运行。

如果您不想用sudo来预设docker命令,请创建一个名为docker的Unix组,并将其添加用户。当Docker守护进程启动时,它会创建一个由docker组成员访问的Unix套接字。

  1. 启动Docker

    1. sudo systemctl start docker
    2. sudo systemctl status docker

    image.png

  2. 通过运行hello-world映像来验证Docker引擎是否安装正确

    1. sudo docker run hello-world
    1. 此命令下载测试映像并在容器中运行。当容器运行时,它会打印消息并退出。这里由于服务器本身无法访问外网,连接报错。

image.png

  1. 更改Docker镜像源为国内镜像源

    1. 创建或修改 /etc/docker/daemon.json 文件,修改为如下形式

      1. {
      2. "registry-mirrors" : [
      3. "https://registry.docker-cn.com",
      4. "https://docker.mirrors.ustc.edu.cn",
      5. "http://hub-mirror.c.163.com",
      6. "https://cr.console.aliyun.com/"
      7. ]
      8. }
    2. 重启docker服务使配置生效

      1. systemctl restart docker.service

      3、离线镜像文件导入

  2. 内网环境没法pull镜像,但是docker本身可以将已有的镜像导出成tar文件,并且可以再次导入到docker,利用这一点,可以实现离线镜像文件的下载。

  3. 找一台可以联网的docker机器,并pull下载需要的镜像文件。然后使用如下命令将镜像文件导出:

    1. docker pull apache/nifi:1.9.0
    2. docker save apache/nifi -o apache_nifi.tar
  4. 将tar文件上传到内网docker服务器,使用如下命令导入镜像文件:

    1. docker load -i apache_nifi.tar

    image.png

  5. 查看导入的镜像文件:

    1. docker images

    image.png

  6. 通过上述方式,实现了内网环境下docker的安装和镜像文件下载。

    三、Docker操作

  7. docker -h

帮助

  1. 获取镜像
  1. sudo docker pull NAME[:TAG]
  2. sudo docker pull centos:latest
  1. 启动Container盒子
  1. sudo docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  2. sudp docker run -t -i contos /bin/bash
  1. 查看镜像列表,列出本地的所有images
  1. sudo docker images [OPTIONS] [NAME]
  2. sudo docker images centos
  1. 查看容器列表,可看到我们创建过的所有container

    1. sudo docker ps [OPTIONS]
    2. sudo docker ps -a
  2. 删除镜像,从本地删除一个已经下载的镜像

  1. sudo docker rmi IMAGE [IMAGE...]
  2. sudo docker rmi centos:latest
  1. 移除一个或多个容器实例
  1. sudo docker rm [OPTIONS] CONTAINER [CONTAINER...]
  1. 移除所有微运行的容器
  1. sudo docker rm sudo docker ps -aq
  1. 停止一个正在运行的容器

    1. sudo docker kill [OPTIONS] CONTAINER [CONTAINNER...]
    2. sudo docker kill 026e
  2. 重启一个正在运行的容器

    1. sudo docker restart [OPTIONS] contains[CONTAINER]
    2. sudo docker restart 026e
  3. 停止一个已经停止的容器

    1. sudo docker start [OPTIONS] CONTAINER [CONTAINER..]
    2. sudo docker start 026e

    四、Docker制作

  4. 我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

    1. cat Dockerfile
    1. FROM centos:6.7
    2. MAINTAINER Fisher "fisher@sudops.com"
    3. RUN /bin/echo 'root:123456' |chpasswd
    4. RUN useradd runoob
    5. RUN /bin/echo 'runoob:123456' |chpasswd
    6. RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
    7. EXPOSE 22
    8. EXPOSE 80
    9. CMD /usr/sbin/sshd -D
  5. 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

    1. FROM:指定使用哪个镜像源
    2. RUN :告诉docker 在镜像内执行命令,安装了什么。
    3. EXPOSE:暴露的端口号
  6. 使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

    1. docker build -t runoob/centos:6.7 .
    1. Sending build context to Docker daemon 17.92 kB
    2. Step 1 : FROM centos:6.7
    3. ---> d95b5ca17cc3
    4. Step 2 : MAINTAINER Fisher "fisher@sudops.com"
    5. ---> Using cache
    6. ---> 0c92299c6f03
    7. Step 3 : RUN /bin/echo 'root:123456' |chpasswd
    8. ---> Using cache
    9. ---> 0397ce2fbd0a
    10. Step 4 : RUN useradd runoob
    11. ......
  7. 参数说明:

    1. -t:指定要创建的目标镜像名
    2. .:Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

Docker离线安装官方参考文档:https://docs.docker.com/engine/install/centos/#install-from-a-package
Docker离线安装参考文档:https://www.cnblogs.com/shuhe-nd/p/13031531.html
Docker基本操作参考文档:https://www.cnblogs.com/iloverain/p/8980275.html
Docker离线镜像文件导入参考文档:https://blog.csdn.net/cjbfzxz/article/details/106683157