ps:本博文为整理博文,是楼主在学习过程中整理的资源便于以后学习,借鉴的资源都已在文末标出。
一:Docker介绍
Docker(中文:码头工人) 基于Go语言并遵从Apache2.0协议开源的应用容器引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。容器引擎与容器关系。容器小汽车,容器引擎就是引擎呀,哈哈
1:Docker解决了什么难题?
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。 比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
Docker系统有两个程序:docker服务端和docker客户端。其中docker服务端是一个服务进程,管理着所有的容器。docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。大部分情况下,docker服务端和客户端运行在一台机器上。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
2:Docker的沙箱机制:
3:Docker常用场景:
4:Docker主要用途
5:Docker版本
6:Docker的image文件
7:Docker的容器文件
二:架构相关
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象(容器)与类(镜像)。
架构图与相关解释表格如下(来自:http://www.runoob.com/docker/docker-architecture.html):
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板。类似于镜像(类),容器(类对象)。 |
---|---|
Docker 容器(Container) | 容器是独立运行的一个或一组应用。 |
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信。 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker 仓库(Registry) | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
三:基础操作与流程
//切换为root用户或者直接使用sudo 也可以
$ su root
//安装
# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
//安装一些必要系统工具
# yum install -y yum-utils device-mapper-persistent-data lvm2
service docker service
docker run hello-world
如果是新安装的docker会自动下载镜像并创建容器来运行,在显示的信息中可以看到docker的处理流程:
//docker自动处理流程
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
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.
//翻译后
1. Docker客户端连接Docker守护线程。
2. Docker守护线程从Docker Hub中提取“hello-world”镜像。
3. Docker守护线程从该镜像创建一个新容器,该容器运行生成您当前正在读取的可执行文件
4. Docker守护程序将其输出以流的方式 传输到Docker客户端,后者将其发送到您的终端。
cd /etc/docker
vim daemon.json //没有该文件手动创建一个
//添加以下部分
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
docker run ubuntu:15.10 /bin/echo "Hello world"
//意义:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。
//此命令各个参数解析:
* docker: Docker 的二进制执行文件。
* run: 与前面的 docker 组合来运行一个容器。
* ubuntu:15.10: 指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
* /bin/echo "Hello world": 在启动的容器里执行的命令。
docker run -i ubuntu:15.10
//参数含义:
* -i :允许你对容器内的标准输入 (STDIN) 进行交互。
//测试:
输入 ls 回车后显示文件夹列表
docker run -i -t ubuntu:15.10 /bin/bash
//参数含义:
*-i :允许你对容器内的标准输入 (STDIN) 进行交互。
* -t :在新容器内指定一个伪终端或终端。在该语句中我们指定/bin/bash伪造一个客户端
//测试:
格式和我们的linux服务器几乎一致
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
//语句含义:
启动以ubuntu:15.10镜像创建一个以进程方式后台运行的容器,运行"while true; do echo hello world; sleep 1; done"语句
//返回值:
返回一个字符串,就是该容器的唯一ID,通过该ID我们才可以进行
//参数含义:
-d : 后台运行容器
docker ps
//查看运行的容器
docker stop 容器ID或者容器名称
//停止容器
参考:http://www.runoob.com/docker/docker-architecture.html
https://baijiahao.baidu.com/s?id=1591887487395526427&wfr=spider&for=pc