和安装其他软件一样,安装Docker也需要一些基本的前提条件。Docker要求的条件具体如下:

  • 运行64位CPU构架的计算机(目前只能是x86_64和amd64),Docker目前不支持32位CPU。
  • 运行Linux3.8或更高版本的内核。
  • 内核必须支持一种适合的存储驱动(storage driver),例如:
    • Device Manager;
    • AUFS;
    • vfs;
    • btrfs;
    • 默认存储驱动通常是Device Manager。
  • 内核必须支持并开启cgroup和命名空间(namespace)功能。

在Centos 6上安装docker

安装前的准备:

  • 内核检测
# uname -a
Linux docker 2.6.32-696.1.1.el6.x86_64 #1 SMP Tue Apr 11 17:13:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

通过uname命令来确认是否安装了3.8或更高的内核版本,一些老板本的2.6.x或其后的内核也能够运行Docker,但运行结果会有很大的不同。而且,如果你需要就老版本内核寻求帮助时,通常大家会建议你升到更高版本的内核。所以这里我们需要升级我们的内核版本。

如何更新内核可以参考http://www.cnblogs.com/Bourbon-tian/p/6868850.html

  • 检查Device Mapper

我们这里使用Device Mapper作为Docker的存储驱动,为Docker提供存储能力。

# ls -l /sys/class/misc/device-mapper
lrwxrwxrwx 1 root root 0 May 12 2017 /sys/class/misc/device-mapper -> ../../devices/virtual/misc/device-mapper

同样,也可以在/proc/devices文件中检测是否有device-mapper条目:

# grep device-mapper /proc/devices
253 device-mapper

如果没有检测到Device Mapper,我们也可以试着安装device-mapper软件包:

# yum install -y device-mapper
## 安装完成后,还需要加载dm_mod模块
# modprobe dm_mod
## 模块加载完,我们就应该可以找到/sys/class/misc/device-mapper条目了。

安装Docker:

# rpm -Uvh http://ftp.cuhk.edu.hk/pub/linux/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum install docker-io
# /etc/init.d/docker start

运行第一个容器

首先,我们会查看Docker是否能正常工作,功能是否正常:

# docker info

info命令会返回所有容器和镜像(镜像即是Docker用来构建容器的“构建块”)的数量、Docker使用的执行驱动和存储驱动(execution and storage driver),以及Docker的基本配置。

接下来通过docker run命令创建容器,docker run命令提供了Docker容器的创建到启动的功能。

# docker run -i -t ubuntu /bin/bash
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • ubuntu: 告诉Docker基于什么镜像来创建容器,它由Docker Hub Registry 提供。

我们可以用ubuntu基础镜像(以及类似的fedora,debian,centos等镜像)为基础,构建自己的镜像,这里我们基于此基础镜像启动了一个容器,并且没有对容器进行任何改动。

Docker首先会检查本地是否存在ubuntu镜像,如果本地还没有该镜像的话,那么Docker就会连接官方维护的Docker Hub Registry,查看Docker Hub中是否有该镜像。一旦找到,则会下载该镜像并将其保存到本地宿主机中。随后,Docker在文件系统内部用这个镜像创建了一个新容器。该容器拥有自己的网络、IP地址,以及一个用来和宿主机进行通信的桥接网络接口。最后,我们告诉Docker在新容器中要运行什么命令,在本例中我们在容器中运行/bin/bash命令启动了一个Bash Shell。

当容器创建完成后,Docker就会执行容器中的/bin/bash命令,这时我们就可以看到容器内的shell了:

root@f4d39b81dd5d:/#

使用第一个容器:

现在,我们已经以root用户登录到了新容器中,容器的IDf4d39b81dd5d,这是一个完整的Ubuntu系统,你可以用它来做任何事情

# 获取该容器的主机名
root@f4d39b81dd5d:/# hostname
f4d39b81dd5d ------------------------------------------------------- # 查看/etc/hosts 文件
root@f4d39b81dd5d:/# cat /etc/hosts
172.17.0.1 f4d39b81dd5d
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters ------------------------------------------------------- # 如果新装的Ubuntu没有ifconfig命令和ping命令,则我们需要手动安装
root@f4d39b81dd5d:/# apt-get update
# ifconfig
root@f4d39b81dd5d:/# apt install net-tools
# ping
root@f4d39b81dd5d:/# apt install iputils-ping # 接下来我们就可以通过ifconfig来看看容器的网络配置情况
root@f4d39b81dd5d:/# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:01
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:9323 errors:0 dropped:0 overruns:0 frame:0
TX packets:7266 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:26015244 (26.0 MB) TX bytes:508075 (508.0 KB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) ------------------------------------------------------- # 我们还可以查看容器中运行的进程
root@f4d39b81dd5d:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 18300 2108 ? Ss 04:29 0:00 /bin/bash
root 337 0.0 0.1 34416 1464 ? R+ 04:39 0:00 ps -aux ------------------------------------------------------- # 再尝试安装一个vim
root@f4d39b81dd5d:/# apt-get install vim

当所有工作都结束时,输入exit,就可以返回到宿主机的命令提示符了。这时容器已经停止运行了!只有在指定的/bin/bash命令处于运行状态的时候,我们容器才会相应地处于运行状态。一旦退出容器,/bin/bash 命令也就结束了,这时容器也随之停止运行。但容器仍是存在的,我们可以用docker ps -a命令查看当前系统中容器的列表:

# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f4d39b81dd5d ubuntu "/bin/bash" 25 minutes ago Exited (0) 2 minutes ago clever_noyce

默认情况下,当执行docker ps命令时,只能看到正在运行的容器。

-a 参数则是列出所有容器,包括正在运行和已经停止的。

-l 参数列出最后一次运行的容器,包括正在运行和已经停止的。

-n 参数列出最近创建的n个容器。(# docker ps -n 5  则表示列出最近创建的5个容器)

容器命名:

Docker会为我们创建的每一个容器自动生成一个随机的名称,如果想为容器命名,则可以用--name标志来实现。一个合法的容器名称只能包含以下字符:

  • 小写字母a~z;
  • 大写字母A~Z;
  • 数字0-9;
  • 下划线、
  • 圆点、
  • 横线(如果用正则表示来表示这些符号,就是[a-zA-Z0-9_.-])。
# docker run --name SetName -i -t ubuntu /bin/bash
root@78679e02be1c:/# exit

容器的名称有助于分辨容器,当构建容器和应用程序之间的逻辑连接时,容器的名称也有助于从逻辑上理解连接关系。具体的名称(如web、db)比容器ID和随机容器名好记多。我推荐大家都使用容器名称,以更加方便地管理容器。

容器的命名必须是唯一的。如果我们试图创建两个名称相同的容器,则命令将会失败。如果要使用的容器名称已经存在,可以先用docker rm命令删除已有的同名容器后,再来创建新的容器。

重启已经停止的容器:

SetName容器已经停止了,如果想重新启动这个容器,则可以同过docker start + 容器名或者是容器的ID来启动一个已经停止的容器

## 回归刚刚我们所讲的知识,通过ps -a 查看所有已创建容器
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78679e02be1c ubuntu "/bin/bash" 9 minutes ago Exited (0) 9 minutes ago SetName
f4d39b81dd5d ubuntu "/bin/bash" 54 minutes ago Exited (0) 32 minutes ago clever_noyce ## 通过容器名启动容器
# docker start SetName
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78679e02be1c ubuntu "/bin/bash" 11 minutes ago Up 21 seconds SetName ## 我们也可以通过ID来启动容器
# docker start 78679e02be1c
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78679e02be1c ubuntu "/bin/bash" 12 minutes ago Up 2 seconds SetName

我们也可以使用docker restart命令来重启一个容器。 

附着到容器上:

和启动容器一样,我们可以通过docker attach + 容器名或ID 重新附着到容器的会话上。

# docker attach SetName
root@78679e02be1c:/# # docker attach 78679e02be1c
root@78679e02be1c:/# ## 你可能需要按一下回车键才能进入会话。

docker入门——安装及简单操作的更多相关文章

  1. Docker入门到实践——简单操作

    1.对比传统虚拟机总结 特性 容器 虚拟机 启动 秒级 分钟级 硬盘使用 一般为MB 一般为GB 性能 接近原生 弱于 系统支持量 单机支持上千个容器 一般几十个 2.基本概念 Docker包括三个基 ...

  2. docker的安装和简单配置

    docker的安装和简单配置 docker是balabalabala...懒得介绍. 国内安装docker很蛋疼,按照官方配置好了软件源之后,几十MB的安装文件下载要半天,没办法,docker默认的软 ...

  3. 【ZooKeeper】ZooKeeper安装及简单操作

    ZooKeeper介绍 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一 ...

  4. Docker harbor 安装和基础操作

    目录 简介 离线安装 配置文件 安装 查看 访问测试 及 简单操作 创建一个用户 创建一个测试仓库 创建测试仓库 测试上传和下载镜像 上传 下载镜像测试 简介 Docker容器应用的开发和运行离不开可 ...

  5. storm安装以及简单操作

    storm的安装比较简单,下面以storm的单节点为例说明storm的安装步骤. 1.storm的下载 进入storm的官方网站http://storm.apache.org/,点击download按 ...

  6. MySQL安装和简单操作

    MySQL数据库安装与配置详解 MySQL的安装请参考下面这篇博客,讲述的非常详细,各种截图也很清晰.http://www.cnblogs.com/sshoub/p/4321640.html MySQ ...

  7. Docker入门 安装Tomcat以及报404解决方案

    时间:2020/1/18 17:34:09 浏览:24 来源:互联网 记录简单的在Docker 上安装Tomcat 首先我是在云服务器上(Centos系统)安装的Docker,我们需要在https:/ ...

  8. RabbitMQ安装以及简单操作应用(针对Windows和C#)

    1.RabbitMQ安装 1.1下载并安装Erlang https://www.erlang.org/downloads 一直点next就安装好了.我直接使用了默认的安装目录.否则的话,应该需要配置一 ...

  9. Docker的安装及简单使用

    1.  Docker的安装 (这里的“安装docker”其实就是安装Docker Engine) $ sudo apt-get intasll docker.io note: apt-get是ubun ...

随机推荐

  1. jQuery九宫格图片拉伸变大代码

    之前看到网上有jQuery九宫格图片拉伸变大代码只可以动六张图片,我改了改做了九张图片都可以做的 图片的布局 成品就是每一个图片都可以动看到大图 css样式 <style> /*九宫格*/ ...

  2. js判断对象为空

    http://www.jb51.net/article/42713.htm var isEmptyValue = function(value) { var type; if(value == nul ...

  3. springboot整合jsp模板

    springboot整合jsp模板 在使用springboot框架里使用jsp的时候,页面模板使用jsp在pom.xnl中需要引入相关的依赖,否则在controller中无法返回到指定页面 〇.搭建s ...

  4. docker run 的背后的故事(zz)

    当利用docker run来创建并启动容器的时候,docker后台标准的操作包括: 1.检查本地是否存在指定的镜像,不存在就从公有仓库下载. 当我依瓢画葫芦的运行: sudo docker run - ...

  5. 利用beamer做幻灯片插入EPS图片的方法

      可以利用epstopdf宏包,在命令行下利用pdflatex带"-shell-escape"参数编译. 先插入epstopdf宏包:\usepackage{graphicx}\ ...

  6. nodejs获取ASP.Net WebAPI(IIS Windows验证)

    处理了很多天,终于使用Nodejs可以发出请求至WebAPI,能够正常处理数据了 首先加入npm包 npm install httpntlm 在app.js中加入代码 var httpntlm = r ...

  7. 利用ipv6技术,废旧笔记本变成互联网server

    如果你家的路由器已经get到了ipv6地址,并且你家的电脑也获取了有效的ipv6地址,在广域网的设备可以访问到.那恭喜你,再配合我这个ddns,你可以完美地把你家的电脑当服务器使用. 1.确保你家的宽 ...

  8. python 连接数据库练习

    #!/usr/bin/python# -*- coding:utf-8 -*-import logginglogging.basicConfig(level=logging.INFO)import m ...

  9. 在Strust2 使用datatimepicker 标签引发的一系列问题

    问题:出现无法识别的问题 原因:Strust2.1开始,对于ajax类的标签不再使用<%@ taglib prefix="s" uri="/struts-tags& ...

  10. 【Treap】BZOJ1588-[HNOI2002]营业额统计

    [题目大意][借用别人的概括]给出一个n个数的数列a,对于第i个元素ai定义fi=min(abs(ai-aj)),(1<=j<i),其中f1=a1.输出sum(fi) (1<=i&l ...