60Docker 学习笔记(CentOS 7.1)

Posted Ray

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了60Docker 学习笔记(CentOS 7.1)相关的知识,希望对你有一定的参考价值。

#基本概念

##Docker 包括三个基本概念
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
理解了这三个概念,就理解了 Docker 的整个生命周期。
- - -
##Docker 镜像
>Docker 镜像就是一个只读的模板。
例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器。
Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
**注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层**
##Docker 容器
Docker 利用容器来运行应用。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
*注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
##Docker 仓库

仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 
Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool等,可以提供大陆用户更稳定快速的访问。
当然,用户也可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用 
push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
**注:Docker 仓库的概念跟 
Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。**

#安装方式

##安装EPEL

 >EPEL 是yum的一个软件源,里面包含了许多基本源里没有的软件。(安装需要连接网络)
 安装了这个源后,就可以使用yum来安装 docker了。
```yum install epel-release-7```
安装过程需要交互,输入“y”按回车就可以了。
验证是否安装成功:
```yum repolist```

- - -

##安装Docker-io

>```yum -y install docker-io```
配置开机自启动:
```chkconfig docker on```
完成后,启动服务:
```service docker start```
- - -

##应用Docker

>通过下面命令来验证doecker是否安装成功:
```docker info```
出现下面类似内容,则表示安装成功:

使用下面命令网络仓库下载需要镜像:
  1. ```docker pull centos:latest ``` #下载centos
  2. ```docker pull ubutun:latest``` #下载ubutun
使用下面命令查看当前镜像:
```docker images```

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

- 来自于哪个仓库,比如 docker.io/ubuntu
- 镜像的标记,比如latest
- 它的 ID 号(唯一)07f8e8c5e660
- 创建时间 
- 镜像大小
__使用docker完成“hello world":__
  1. ```docker run ubuntu:07f8e8c5e660 /bin/echo \'hello world\'```
  2. ```docker run centos:fd44297e2ddb /bin/echo \'hello docker\'```



>>**进入交互式容器:**
```sudo docker run -t -i ubuntu:07f8e8c5e660 /bin/bash```
*-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
*-i 则让容器的标准输入保持打开。

修改已有镜像:
使用交互模式在已有的centos镜像中安装 gem 应用,exit退出后,使用 docker commit来提交更新后的副本
```docker commit -m "add gem" -a "Ray" 032c501e000f docker.io/centos:v2```
* -m 来指定提交的说明信息,跟我们使用的版本控制工具一样;
* -a 可以指定更新的用户信息;
* 之后是用来创建镜像的容器的 ID;
* 最后指定目标镜像的仓库名和 tag 信息,创建成功后会返回这个镜像的 ID 信息。
__可以通过 docker images 查看新创建的镜像:__

可以再通过 docker run 打开新创建的镜像:
```docker run -t -i centos:v2 /bin/bash```

#利用dockerfile来创建镜像

使用 docker commit 来扩展一个镜像比较简单,但是不方便在一个团队中分享。
我们可以使用 docker build来创建一个新的镜像。
为此,首先需要创建一个 Dockerfile,包含一些如何创建镜像的指令,新建一个目录和一个 Dockerfile
  1. ```[root@localhost ~]# cd /opt/```
  2. ```[root@localhost opt]# ```
  3. ```[root@localhost opt]# mkdir ubuntu```
  4. ```[root@localhost opt]# cd ubuntu/```
  5. ```[root@localhost ubuntu]# touch Dockerfile```
**Dockerfile 中每一条指令都创建镜像的一层,例如:**
>```sh
# This is a comment
MAINTAINER Ray <tsbc@docker.com>
FROM ubuntu:latest
RUN apt-get -qqy install ruby ruby-dev
RUN apt-get -qq update```
* * *
***Dockerfile 基本的语法是***
使用#来注释
*FROM 指令告诉 Docker 使用哪个镜像作为基础
*RUN开头的指令会在创建中运行,比如安装一个软件包,在这里使用 apt-get 来安装了一些软件编写完成 Dockerfile 后可以使用 docker build 来生成镜像。
```docker build -t="ubuntu:latest" .```
其中 -t 标记来添加 tag,指定新的镜像的用户信息。
.” 是 Dockerfile 所在的路径(当前目录),也可以替换为一个具体的 Dockerfile 的路径。
可以看到 build 进程在执行操作。
>*注意一个镜像不能超过 127 层
它要做的第一件事情就是上传这个 Dockerfile 内容,因为所有的操作都要依据 Dockerfile 来进行。 
然后,Dockerfile 中的指令被一条一条的执行,每一步都创建了一个新的容器,在容器中执行指令并提交修改(就跟之前介绍过的 docker commit 一样)。
当所有的指令都执行完毕之后,返回了最终的镜像 id。所有的中间步骤所产生的容器都被删除和清理了。
** 此外,还可以利用 ADD 命令复制本地文件到镜像;  (需要再做尝试)**
** 用 EXPOSE 命令来向外部开放端口;**
** 用 CMD 命令来描述容器启动后运行的程序等。**

#从本地文件系统导入
要从本地文件系统导入一个镜像,可以使用 openvz(容器虚拟化的先锋技术)的模板来创建: openvz 的模板下载地址为 templates 
比如,先下载了一个 centos-7-x86_64-minimal.tar.gz 的镜像,之后使用以下命令导入:
```
cat centos-7-x86_64-minimal.tar.gz | docker import - centos:v7.mini```
然后查看导入的镜像:

##上传镜像
>用户可以通过 docker push 命令,把自己创建的镜像上传到仓库中来共享。
```docker push docker.io/ubuntu```

##存出镜像
>如果要导出镜像到本地文件,可以使用 docker save 命令。
```docker save -o ubuntu.14.0.4.tar docker.io/ubuntu:latest```

##载入镜像
>可以使用 docker load 从导出的本地文件中再导入到本地镜像库,例如
```docker load --input ubuntu.14.0.4.tar```
或者
```docker load < ubuntu.14.0.4.tar```

##移除本地镜像
>可以用 docker rmi 移除, 注意 docker rm 是移除容器
  1. ```docker rmi docker.io/ubuntu```
  2. ```docker rmi 07f8e8c5e660 ```

#Docker 容器
容器是 Docker 又一核心概念。
简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。
守护态运行
```docker run -d ubuntu:ruby /bin/sh -c "while true; do echo hello world; sleep 1; done"```
容器启动后会返回一个唯一的 id,也可以通过 docker ps 命令来查看容器信息。
```docker ps```

要获取容器的输出信息,可以通过 docker logs 命令。
``` docker logs goofy_cori```
##终止容器

(c)2006-2024 SYSTEM All Rights Reserved IT常识