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. C#图片保存与读取,以及图片另存

    照片的保存与读取 /// <summary> /// 图片转二进制 /// </summary> /// <param name="imgPhoto" ...

  2. .NET Core整合log4net以及全局异常捕获实现

    在使用log4net之前先安装log4net.这里操作很简单,通过nuget下载并安装log4net很方便.如下图. log4net配置 <?xml version="1.0" ...

  3. Asp.Net MVC实现优酷(youku)Web的上传

    优酷第三方上传API没有.NET版本的SDK,让从事.NET开发人员要实现开放平台上传文件无从下手.本文经过一天的预读优酷文档,以NET方式实现了视频上传. 参考: 优酷开放文档 http://ope ...

  4. c#透明TextBox

    在 http://www.codeproject.com/KB/edit/AlphaBlendedTextControls.aspx 的基础上增加了水印文字 代码如下: public class Te ...

  5. MotionManager 陀螺仪实现方式

      题外话:   权利的游戏开播了,引用一句话:   布兰:一个人如果还把,他还能勇敢么?   奈德:人在害怕时候的勇敢,才是真的勇敢.     回归正题:   说下关于 CMMotionManage ...

  6. Oracle expdp/impdp 使用示例

    1. 创建目录 使用数据泵之前,需要创建一个存放文件的目录. 这个目录要写入Oracle的数据字典中才能识别. (1)先查看一下已经存在的目录: SQL> col owner format a5 ...

  7. RSA der加密 p12解密以及配合AES使用详解

    在前面的文章中我有说过AES和RSA这两种加密方式,正好在前段时间再项目中有使用到,在这里再把这两种加密方式综合在一起写一下,具体到他们的使用,以及RSA各种加密文件的生成. 一: RSA各种加密相关 ...

  8. python算法与数据结构-循环链表(39)

    一.循环链表的介绍 上一篇我们已经讲过单链表,本篇给大家讲解循单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点,其基本操作和单链表思路一样. 常用的操 ...

  9. Android native进程间通信实例-binder篇之——简单的单工通信

    网上找了很多binder相关文章,大部分都是在跟踪binder实现源代码,然后再把框架代码贴出来,看着实在费力. 这篇文章从实际出发,直接用一个案例下手,后续想了解binder相关原理的话,可以参考& ...

  10. python trojan development 1st —— use python to send mail and caputre the screen then combine them

    import smtplib from email.mime.text import MIMEText msg_from='1@qq.com' #发送方邮箱 passwd='bd' #填入发送方邮箱的 ...