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
  1. 添加Docker的Yum源
 $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo   
  1. 更新Yum索引
$ sudo yum makecache fast
  1. 添加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
  1. 安装最新版本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
  1. 启动Docker
$ sudo systemctl start docker
  1. 验证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/

  1. 查看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命令搜索:

$ 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:表示是否是自动构建的镜像仓库
  1. 下载镜像
$ 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镜像
  1. 列出镜像
$ 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
  1. 删除本地镜像
$ 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:<name|id> 四种类型;

例如:

$ docker run -d -p 91:80 nginx
  1. 列出容器
$ docker ps [OPTIONS]

OPTIONS说明(常用):

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

OPTIONS说明(常用):

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容