CentOS 系列安装 Docker

Docker 支持 CentOS6 及以后的版本。

CentOS6

对于 CentOS6,可以使用 EPEL 库安装 Docker,命令如下

[root@MSJTVL-MJSP-A35 opt]# yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
Loaded plugins: fastestmirror, security
Setting up Install Process
epel-release--.noarch.rpm | kB :
Examining /var/tmp/yum-root-dp2p3m/epel-release--.noarch.rpm: epel-release--.noarch
/var/tmp/yum-root-dp2p3m/epel-release--.noarch.rpm: does not update installed package.
Error: Nothing to do
[root@MSJTVL-MJSP-A35 opt]# yum install docker-io

CentOS7

CentOS7 系统 CentOS-Extras 库中已带 Docker,可以直接安装:

$ sudo yum install docker

安装之后启动 Docker 服务,并让它随系统启动自动加载。

[root@MSJTVL-MJSP-A35 opt]# service docker start
Starting cgconfig service: [ OK ]
Starting docker: [ OK ]
[root@MSJTVL-MJSP-A35 opt]# chkconfig docker on

Docker 镜像

镜像是 Docker 的三大组件之一

Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker 会从镜像仓库下载(默认是 Docker Hub 公共注册服务器中的仓库)。

下面介绍:

  • 从仓库获取镜像;
  • 管理本地主机上的镜像;
  • 介绍镜像实现的基本原理。

获取镜像

可以使用 docker pull 命令来从仓库获取所需要的镜像。

下面的例子将从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像。

[root@MSJTVL-MJSP-A35 docker]# docker pull ubuntu:12.04
12.04: Pulling from ubuntu
191c4e1e4400: Pull complete
fd04a9dc157f: Pull complete
be08d59fa177: Pull complete
ecf8c2069900: Pull complete
8ea067ad7a27: Pull complete
8ea067ad7a27: Pulling fs layer
Digest: sha256:57a83f4b4f43f2d008c8ceaa9663a6f7ecd061fefa80da8f32e0f22c7b923390
Status: Downloaded newer image for ubuntu:12.04

下载过程中,会输出获取镜像的每一层信息。

该命令实际上相当于 $ sudo docker pull registry.hub.docker.com/ubuntu:12.04 命令,即从注册服务器registry.hub.docker.com 中的 ubuntu 仓库来下载标记为 12.04 的镜像。

为了方便在后续工作中使用这个镜像,还可以使用docker tag 命令为本地镜像添加新的标签,例如:

[root@MSJTVL-MJSP-A35 docker]# docker tag ubuntu:12.04 unbutn:02.09
[root@MSJTVL-MJSP-A35 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 12.04 8ea067ad7a27 weeks ago 103.6 MB
unbutn 02.09 8ea067ad7a27 weeks ago 103.6 MB

列出本地镜像

使用 docker images 显示本地已有的镜像。

[root@MSJTVL-MJSP-A35 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 12.04 8ea067ad7a27 7 weeks ago 103.6 MB
unbutn 02.09 8ea067ad7a27 7 weeks ago 103.6 MB

在列出信息中,可以看到几个字段信息

  • 来自于哪个仓库,比如 ubuntu
  • 镜像的标记,比如 12.04
  • 它的 ID 号(唯一)
  • 创建时间
  • 镜像大小

其中镜像的 ID 唯一标识了镜像,注意到 ubuntu:12.04 和 ubuntu:02.09 具有相同的镜像 ID,说明它们实际上是同一镜像。

TAG 信息用来标记来自同一个仓库的不同镜像。例如 ubuntu 仓库中有多个镜像,通过 TAG 信息来区分发行版本,例如 10.0412.0412.1013.0414.04 等。例如下面的命令指定使用镜像 ubuntu:12.04 来启动一个容器。

[root@MSJTVL-MJSP-A35 docker]# docker run -t -i ubuntu:12.04 /bin/bash
root@d67d32057f1c:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin selinux srv sys tmp usr var
root@d67d32057f1c:/# pwd
/
root@d67d32057f1c:/# id
uid=(root) gid=(root) groups=(root)
root@d67d32057f1c:/# ip a
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc noqueue state UP
link/ether ::ac::: brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/ scope global eth0
inet6 fe80:::acff:fe11:/ scope link
valid_lft forever preferred_lft forever
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
inet6 ::/ scope host
valid_lft forever preferred_lft forever
root@d67d32057f1c:/# exit

如果不指定具体的标记,则默认使用latest标记信息。

创建镜像

创建镜像的方法有三种:基于已有镜像的容器创建,基于本地模板导入,基于Dockerfile创建

接下来重点介绍前两种,最后一种基于Dockerfile创建的方法将在后续的专门详细介绍

基于已有镜像的容器创建

该方法主要使用docker commit命令,其命令格式为docker commit[OPTIONS]CONTAINER[REPOSUTORY[:TAG]] 主要选项包括:

·-a,--author="作者信息"

·-m,--message="提交信息"

·-p,--pause=true提交时暂停容器运行

下面演示如何使用命令创建新的镜像。

首先启动一个镜像,并在其中进行修改操作,例如创建一个test文件,之后退出:

[root@MSJTVL-MJSP-A35 docker]# docker run -t -i ubuntu:12.04 /bin/bash
root@5b098fe766ca:/# touch test
root@5b098fe766ca:/# exit
exit
[root@MSJTVL-MJSP-A35 docker]#

注:记住容器的ID:5b098fe766ca。

此时该容器跟原Ubuntu:12.04镜像相比,已经发生了改变,可以使用docker commit命令来提交一个新的镜像。提交时可以使用ID或者名称来指定容器

[root@MSJTVL-MJSP-A35 docker]# docker commit -m "Added a new file" -a "Docker Tian" 5b098fe766ca test
1a67c55ea39412ca5f64b9b56050683dd5d269ef0c6c037412d1a20b033d6c3d
[root@MSJTVL-MJSP-A35 docker]#

此时查看本地镜像列表,即可看到先创建的镜像:

[root@MSJTVL-MJSP-A35 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
test latest 1a67c55ea394 About a minute ago 103.6 MB
ubuntu 12.04 8ea067ad7a27 weeks ago 103.6 MB
unbutn 02.09 8ea067ad7a27 weeks ago 103.6 MB

基于本地模板导入

也可以直接从一个操作系统模板文件导入一个镜像。在这里,推荐使用Open VZ提供的模板创建。在OPENVZ模板的下载地址为:https://openvz.org/Download/template/precreated

比如,笔者现在一个下载一个centos的模板压缩包后,可以使用以下的命令导入,并且查看新导入的镜像,已经在本地存在了:

[root@MSJTVL-MJSP-A35 docker]# cat centos--x86-minimal.tar.gz |docker import - centos:14.04
2197ed1032f71381bf4746f2423aea5b22f9dacd7407c1794ea36d0b6a70a84e
[root@MSJTVL-MJSP-A35 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos 14.04 2197ed1032f7 minutes ago 512.1 MB
test latest 1a67c55ea394 hours ago 103.6 MB
ubuntu 12.04 8ea067ad7a27 weeks ago 103.6 MB
unbutn 02.09 8ea067ad7a27 weeks ago 103.6 MB

存出和载入镜像

可以使用docker save 和docker load命令来存出和载入镜像。

存出镜像

如果要存出镜像到本地文件,可以使用docker save命令。例如ubuntu:12.04镜像为文件ubuntu_12.04.tar

[root@MSJTVL-MJSP-A35 docker]# docker save -o ubuntu_12..tar ubuntu:12.04
[root@MSJTVL-MJSP-A35 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos 14.04 2197ed1032f7 minutes ago 512.1 MB
test latest 1a67c55ea394 hours ago 103.6 MB
ubuntu 12.04 8ea067ad7a27 weeks ago 103.6 MB
unbutn 02.09 8ea067ad7a27 weeks ago 103.6 MB
<none> <none> 511136ea3c5a years ago B
[root@MSJTVL-MJSP-A35 docker]# ll
total
-rw-r--r-- root root Feb : centos--x86-minimal.tar.gz
-rw-r--r-- root root Feb : ubuntu_12..tar
[root@MSJTVL-MJSP-A35 docker]#

导入镜像

可以使用docker load从存出的本地文件中再导入到本地镜像库,例如从文件ubuntu_12.04.tar到入镜像到本地镜像列表,如下所示:

[root@MSJTVL-MJSP-A35 docker]# docker load --input ubuntu_12..tar 

Docker学习第二天的更多相关文章

  1. Docker学习第二天-容器

    Docker 容器 容器是 Docker 又一核心概念. 简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境.对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环 ...

  2. Docker学习第二天(Docker容器管理)

    简介 emmmm Docker 容器管理 推荐文章:容器技术概述 run里面的子选项 1.使用run命令创建容器 docker container run -it ubuntu /bin/bash / ...

  3. docker学习笔记(一)—— ubuntu16.04下安装docker

    docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...

  4. Docker 入门 第二部分: 容器

    目录 Docker 入门 第二部分: 容器 先决条件 介绍 你的新开发环境 使用 Dockerfile 定义一个容器 Dockerfile 应用本身 requirements.txt app.py 构 ...

  5. docker学习教程

    我们的docker学习教程可以分为以下几个部分,分别是: 第一:docker基础学习 第二:docker日志管理 第三:docker监控管理 第四:docker三剑客之一:docker-machine ...

  6. [转帖]Docker学习之Dockerfile命令详解

    Docker学习之Dockerfile命令详解 https://it.baiked.com/system/docker/2436.html 图挺好的 前言 之前,制作镜像的伪姿势搭建已经见过了,今天介 ...

  7. DOCKER 学习笔记7 Docker Machine 在阿里云实例化ECS 以及本地Windows 实例化虚拟机实战

    前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ...

  8. DOCKER 学习笔记7 Docker Machine 建立虚拟机实战,以及错误总结

    前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ...

  9. Docker学习(六)——Dockerfile文件详解

    Docker学习(六)--Dockerfile文件详解 一.环境介绍 1.Dockerfile中所用的所有文件一定要和Dockerfile文件在同一级父目录下,可以为Dockerfile父目录的子目录 ...

随机推荐

  1. Linux命令扫盲 之 sar

    今天在读<大规模Web服务开发技术>一书的时候,书中提到了sar这个命令,感觉很有用,有必要整理学习一下.(对于一位Linux初学者,不能放过任何一个学习机会 :P) 打开自己的CentO ...

  2. 【shell】递归函数----调用自身的函数

    什么是递归函数? 一句话,调用自己的函数称为递归函数! #!/bin/bash declare -i count checkoutCount(){ read -p "Enter an cou ...

  3. 八荣八耻 IT版

    八荣八耻 IT版以可配置为荣,以硬编码为耻:以系统互备为荣,以系统单点为耻:以随时可重启为荣,以不能迁移为耻:以整体交付为荣,以部分交付为耻:以无状态为荣,以有状态为耻:以标准化为荣,以特殊化为耻:以 ...

  4. Win10《芒果TV》商店版2016-2017春节大礼,每日前100名用户免费领取7天VIP

    告别2016,喜迎2017,鸡年大吉,春节期间,每天登录Win10<芒果TV>商店版的前100位用户可领取一张芒果TV会员7天体验卡,先到先得. 芒果TV会员权益: 1.全站免广告 2.自 ...

  5. Android零基础入门第62节:搜索框组件SearchView

    原文:Android零基础入门第62节:搜索框组件SearchView 一.SearchView概述 SearchView是搜索框组件,它可以让用户在文本框内输入文字,并允许通过监听器监控用户输入,当 ...

  6. C++/CLI 中使用 ref 和 out

    void fun(int^ % i){} // C# ref void fun([out]int^ % i) {} // C# out

  7. WPF Build Action

    None: The file is not included in the project output group and is not compiled in the build process. ...

  8. 深入理解 Win32 PE 文件格式 Matt Pietrek(慢慢体会)

    这篇文章假定你熟悉C++和Win32. 概述 理解可移植可执行文件格式(PE)可以更好地了解操作系统.如果你知道DLL和EXE中都有些什么东西,那么你就是一个知识渊博的程序员.这一系列文章的第一部分, ...

  9. 不同格式图片相互转换的开源库分享(使用CxImage,并有VC6的配置过程)

    不同格式图片相互转换的开源库分享 一.背景 笔者在项目的开发中,需要调用windows下的COM接口SetIconLocation来实现桌面快捷方式.而我们项目中给定的图片格式为png格式,SetIc ...

  10. Delphi结束进程模块

    function KillTask(ExeFileName: string): integer; const PROCESS_TERMINATE = $0001; var ContinueLoop: ...