CentOS 7.x 安装Docker

一、Docker概述

Docker是一个开源的容器引擎,它有助于更快的交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用Docker,可更快地打包,测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。下面是Docker的架构图:
Docker的架构图

图中包含以下组件:

  • Docker daemon(Docker守护进程):Docker daemon是一个运行在宿主机(DOCKER_HOST)的后台进程。可通过客户端与之通信;
  • Client(Docker客户端):Docker客户端是Docker的用户界面,它可以接受用户命令和配置表示,并与Docker daemon通信。图中docker build等都是Docker的相关命令;
  • Images(Docker镜像):Docker镜像是一个只读模板,含创建Docker容器的说明,它与操作系统的安装光盘有点像
  • Container(容器): 镜像的运行实例,镜像与容器的关系类比面向对象中的类和对象;
  • Registry:是一个集中存储与分发镜像的服务。最常用的Docker Registry是官方的Docker Hub。

二、安装Docker

Docker官方建议将Docker运行在linux操作系统上。Docker包含多种安装方式,例如Yum安装、RPM安装、Shell安装等。下面介绍以Yum在CentOS7.x上进行安装。可以参考官方文档:https://docs.docker.com/v1.13/engine/installation/linux/centos/

1. 安装yun-utils,这样就能使用yun-config-manager工具设置Yum源。
$ sudo yum install -y yum-utils

如果出现以下信息:

已加载插件:fastestmirror, langpacks
/var/run/yum.pid 已被锁定,PID 为 3012 的另一个程序正在运行。
Another app is currently holding the yum lock; waiting for it to exit...
  另一个应用程序是:PackageKit
    内存:135 M RSS (1.4 GB VSZ)
    已启动: Sun Aug 19 10:35:25 2018 - 04:56之前
    状态  :睡眠中,进程ID:3012

需要执行

$ rm -rf /var/run/yum.pid
$ sudo yum install -y yum yum-utils
2. 添加Docker的Yum源
 $ sudo yum-config-manager --add-repo https://docs.docker.com/v1.13/engine/installation/linux/repo_files/centos/docker.repo   
3. 更新Yum索引
$ sudo yum makecache fast
4. 添加Yum仓库
$ tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
5. 安装最新版本Docker
$ sudo yum -y install docker-engine

在生产系统可能需要添加指定版本的Docker,可以使用如下命令:

$ yum list docker-engine.x86_64  --showduplicates |sort -r
  已加载插件:fastestmirror, langpacks
  已安装的软件包
  可安装的软件包
   * updates: ftp.sjtu.edu.cn
  Loading mirror speeds from cached hostfile
   * extras: mirrors.shu.edu.cn
  docker-engine.x86_64             1.9.1-1.el7.centos                  dockerrepo
  docker-engine.x86_64             1.9.0-1.el7.centos                  dockerrepo
  docker-engine.x86_64             1.8.3-1.el7.centos                  dockerrepo
  docker-engine.x86_64             1.8.2-1.el7.centos                  dockerrepo
  docker-engine.x86_64             1.8.1-1.el7.centos                  dockerrepo
  docker-engine.x86_64             1.8.0-1.el7.centos                  dockerrepo
  docker-engine.x86_64             1.7.1-1.el7.centos                  dockerrepo
  docker-engine.x86_64             17.05.0.ce-1.el7.centos             dockerrepo
  docker-engine.x86_64             17.05.0.ce-1.el7.centos             @dockerrepo
  docker-engine.x86_64             17.04.0.ce-1.el7.centos             dockerrepo
  docker-engine.x86_64             17.03.1.ce-1.el7.centos             dockerrepo
  docker-engine.x86_64             17.03.0.ce-1.el7.centos             dockerrepo
  docker-engine.x86_64             1.7.0-1.el7.centos                  dockerrepo
  docker-engine.x86_64             1.13.1-1.el7.centos                 dockerrepo
  docker-engine.x86_64             1.13.0-1.el7.centos                 dockerrepo
  docker-engine.x86_64             1.12.6-1.el7.centos                 dockerrepo
  docker-engine.x86_64             1.12.5-1.el7.centos                 dockerrepo
  docker-engine.x86_64             1.12.4-1.el7.centos                 dockerrepo
  docker-engine.x86_64             1.12.3-1.el7.centos                 dockerrepo
  docker-engine.x86_64             1.12.2-1.el7.centos                 dockerrepo
  docker-engine.x86_64             1.12.1-1.el7.centos                 dockerrepo
  docker-engine.x86_64             1.12.0-1.el7.centos                 dockerrepo
  docker-engine.x86_64             1.11.2-1.el7.centos                 dockerrepo
  docker-engine.x86_64             1.11.1-1.el7.centos                 dockerrepo
  docker-engine.x86_64             1.11.0-1.el7.centos                 dockerrepo
  docker-engine.x86_64             1.10.3-1.el7.centos                 dockerrepo
  docker-engine.x86_64             1.10.2-1.el7.centos                 dockerrepo
  docker-engine.x86_64             1.10.1-1.el7.centos                 dockerrepo
  docker-engine.x86_64             1.10.0-1.el7.centos                 dockerrepo

第一列是软件包名称,第二列是版本字符串,第三列是仓库名称。可以使用以下命令安装指定版本的Docker

$ sudo yum -y install docker-engine-<VERSION_STRING>

例如:

$ sudo yum -y install docker-engine-1.10.0
6. 启动Docker
$ sudo systemctl start docker
7. 验证Docker是否安装正确
$ sudo docker run hello-world

如果看到如下结结果,则说明安装正确。

  Unable to find image 'hello-world:latest' locally
  latest: Pulling from library/hello-world
  9db2ca6ccae0: Pull complete
  Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
  Status: Downloaded newer image for hello-world:latest

  Hello from Docker!
  This message shows that your installation appears to be working correctly.

  To generate this message, Docker took the following steps:
   1. The Docker client contacted the Docker daemon.
   2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
      (amd64)
   3. The Docker daemon created a new container from that image which runs the
      executable that produces the output you are currently reading.
   4. The Docker daemon streamed that output to the Docker client, which sent it
      to your terminal.

  To try something more ambitious, you can run an Ubuntu container with:
   $ docker run -it ubuntu bash

  Share images, automate workflows, and more with a free Docker ID:
   https://hub.docker.com/

  For more examples and ideas, visit:
   https://docs.docker.com/engine/userguide/
8. 查看Docker的版本
$ docker version

三、配置镜像加速器

国内访问Docker Hub的速度很不稳定,有时甚至连接不上,可以配置镜像加速器解决这个问题。国内很多云服务商提供镜像加速的服务,我们使用阿里云加速器https://cr.console.aliyun.com/cn-hangzhou/mirrors
执行以下命令:

$ sudo mkdir -p /etc/docker
$ sudo tee /etc/docker/daemon.json <<-'EOF'
 {
   "registry-mirrors": ["https://pzadm966.mirror.aliyuncs.com"]
 }
 EOF
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

四、Docker常用命令

Docker有很多的命令,这些命令有足浴控制Docker的行为。

4.1 Docker镜像常用命令

下面是Docker镜像常用的命令

1. 搜索镜像

可以在Docker Hub主页上搜索镜像,可以通过docker search命令搜索:
cmd
$ docker search [OPTIONS] TERM

OPTIONS说明:

  • –automated : 只列出 automated build类型的镜像;
  • –no-trunc : 显示完整的镜像描述;
  • -s : 列出收藏数不小于指定值的镜像

例如:

 $ docker search -s 10 java
  Flag --stars has been deprecated, use --filter=stars=3 instead
  NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
  node                                         Node.js is a JavaScript-based platform for...   6014      [OK]
  tomcat                                       Apache Tomcat is an open source implementa...   1985      [OK]
  java                                         Java is a concurrent, class-based, and obj...   1809      [OK]
  openjdk                                      OpenJDK is an open-source implementation o...   1138      [OK]
  ghost                                        Ghost is a free and open source blogging p...   807       [OK]
  anapsix/alpine-java                          Oracle Java 8 (and 7) with GLIBC 2.23 over...   341                  [OK]
  jetty                                        Jetty provides a Web server and javax.serv...   263       [OK]
  couchdb                                      CouchDB is a database that uses JSON for d...   221       [OK]
  tomee                                        Apache TomEE is an all-Apache Java EE cert...   55        [OK]
  ibmjava                                      Official IBM® SDK, Java™ Technology Editio...   52        [OK]
  groovy                                       Apache Groovy is a multi-faceted language ...   50        [OK]
  lwieske/java-8                               Oracle Java 8 Container - Full + Slim - Ba...   40                   [OK]
  cloudbees/jnlp-slave-with-java-build-tools   Extends cloudbees/java-build-tools docker ...   19                   [OK]
  zabbix/zabbix-java-gateway                   Zabbix Java Gateway                             13                   [OK]
  davidcaste/alpine-java-unlimited-jce         Oracle Java 8 (and 7) with GLIBC 2.21 over...   11                   [OK]
  frekele/java                                 docker run --rm --name java frekele/java        10                   [OK]

该表格包含五列,含义如下:

  • NAME:镜像仓库名称
  • DESCRIPTION:镜像仓库描述
  • STARS: 镜像仓库收藏数
  • OFFICAL: 是否为官方库
  • AUTOMATED:表示是否是自动构建的镜像仓库
2. 下载镜像
$ docker pull [OPTIONS] NAME[:TAG]

OPTIONS说明:

  • -a :拉取所有 tagged 镜像
  • –disable-content-trust :忽略镜像的校验,默认开启

例如:

 $ docker pull java   #从Docker Hub中下载最新版本的Java镜像
 $ docker pull reg.itmuch.com/java:8    #从指定Registry中下载标签为8的Java镜像
3. 列出镜像
$ docker images [OPTIONS] [REPOSITORY[:TAG]

OPTIONS说明:  

  • -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
  • –digests :显示镜像的摘要信息
  • -f :显示满足条件的镜像;
  • –format :指定返回值的模板文件;
  • –no-trunc :显示完整的镜像信息;
  • q :只显示镜像ID

    例如:

    [root@simon01 yum.repos.d]# docker images java
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    java                latest              d23bdf5b1b1b        19 months ago       643MB
4. 删除本地镜像
$ docker rmi [OPTIONS] IMAGE [IMAGE...]

OPTIONS说明:  

  • -f :强制删除;
  • –no-prune :不移除该镜像的过程镜像,默认移除;

4.2 Docker容器常用命令

下面是Docker容器常用的命令

1. 新建并启动容器
$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明(常用):

  • -d: 后台运行容器,并返回容器ID;
  • –name=”nginx-lb”: 为容器指定一个名称;
  • -i:以交互模式运行容器,通常与 -t 同时使用;
  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • -P: 随机端口映射;
  • -p: 指定端口映射,有以下四种格式
    • ip:hostPort:containerPort
    • ip::containerPort
    • hostPort:containerPort
    • containerPort
    • –net=”bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container:
  $ docker run -d -p 91:80 nginx
2. 列出容器
$ docker ps [OPTIONS]

OPTIONS说明(常用):

  • -a :显示所有的容器,包括未运行的。
  • -f :根据条件过滤显示的内容。
  • –format :指定返回值的模板文件。
  • -l :显示最近创建的容器。
  • -n :列出最近创建的n个容器。
  • –no-trunc :不截断输出。
  • -q :静默模式,只显示容器编号。
  • -s :显示总的文件大小。
3. 停止容器
$ docker stop CONTAINER_ID/CONTAIN_NAME
4. 强制停止容器
$ docker kill CONTAINER_ID/CONTAIN_NAME
5. 启动已停止容器
$ docker start CONTAINER_ID/CONTAIN_NAME
6. 重启容器
$ docker restart CONTAINER_ID/CONTAIN_NAME
7. 进入容器
$ docker exec -it CONTAINER_ID bash
8. 删除容器
$ docker rm [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS说明(常用):

  • -f :通过SIGKILL信号强制删除一个运行中的容器
  • -l :移除容器间的网络连接,而非容器本身
  • -v :-v 删除与容器关联的卷

更多命令见Docker的官方文档:https://docs.docker.com/edge/engine/reference/commandline/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值