容器:Docker

1、什么是容器?

一种虚拟化方案

操作系统级别的虚拟化

只能运行相同或者相似内核的操作系统

依赖于Linux内核特性:Namespace和Cgroups(Control Groups)

2、什么是Docker?

将应用程序自动部署到容器

Go语言开源引擎 Github地址:https://github.com/docker/docker

2013年初 dotCloud

基于Apache 2.0 开源授权协议发行

3、Docker的目标

提供简单轻量的建模方式

职责的逻辑分离

快速高效的开发生命周期

鼓励使用面向服务的架构

4、Docker的使用场景

    A、使用Dockerr容器开发、测试、部署服务。

    B、创建隔离的运行环境。

    C、搭建测试环境

    D、构建多用户的平台即服务(PaaS)基础设施

    E、提供软件即服务(SaaS)应用程序

    F、高性能、超大规模的宿主机部署

5、Docker的基本组成:

    Docker Client 客户端 /守护进程 :C/S架构

    Docker Daemon 守护进程  本地/远程

    Docker Image 镜像:容器的基石、层叠的只读文件系统、联合加载(union mount) 

    Docker Container 容器 :通过镜像启动; 启动和执行阶段;写时复制(copy on write)  (可写层)

    Docker Registry 仓库:公有、私有仓库   Docker Hub 免费的公有仓库

6、bootfs--->rootfs(ubuntu)--->add emacs --->add Apache --->可写层

7、Docker 依赖的Linux内核特性:

    a、Namespaces 命名空间 :

             编程语言使用的目的是封装:代码隔离;

            操作系统:系统资源的隔离、 进程、网络、文件系统。。。

Docker 使用了五种Namespaces 命名空间:

PID (Process ID)  :进程隔离

NET(Network) : 管理网络接口

IPC(InterProcess Communication)管理跨进程通信的访问

MNT(Mount)管理挂载点

UTS(Unix Timesharing System)隔离内核和版本标识

    b、Control groups (Cgroups)  控制组

资源限制、优先级设定、资源计量、资源控制

8、Docker 容器的能力:

文件系统的隔离:每个容器都有自己的root文件系统

进程隔离:每个容器都运行在自己的进程环境中

网络隔离:容器间的虚拟网络接口和IP地址都是分开的

资源隔离和分组:使用cgroups 将CPU和内存之类的资源独立分配给每个Docker 容器

9、Docker 的运行环境

A、Linux容器技术

B、操作系统级别的虚拟化

C、依赖于Linux内核的Namespaces 和 Cgroups

10、容器的基本操作:

启动容器:

$ Docker  run IMAGE [COMMAND] [ARG...]

    run在新容器中执行命令

启动交互式容器:

$Docker run -i -t   IMAGE /bin/bash

  -i --interactive = true | false 默认是false

  -t --tty = true | false 默认是false

    exit 退出容器

查看容器:

$docker ps [-a] [-l]   //查看全部最新的容器

$docker inspect 容器名字或者ID

重新启动停止的容器:

$ docker start [-i] 容器名

example :   docker start -i comtainner0

删除停止的容器:

$ docker rm 容器名

11、守护式容器:能够长期运行、没有交互式会话、适合运行应用程序和服务

以守护形式运行容器:

$ docker run -i -t IMAGE /bin/bash

Ctrl + P  Ctrl + Q (退出容器)后台运行

附加到运行中的容器:  进入已经退出的容器

$ docker attach 容器名

启动守护式容器:

$ docker run -d 镜像名[COMMAND] [ARG...]     //使用后台的方式来执行命令

example:docker run --name dc1 -d ubuntu /bin/sh -c "while true; do echo hello world ; sleep 1; done "

查看容器日志:

$docker logs [-f] [-t] [--tail] 容器名

    -f --follows=true | false 默认为false  // 跟踪日志的变化并返回的告诉日志返回的结果

    -t --timestamps=true | false 默认为false  //返回的结果上加上时间戳

    -- tail = "all"    //返回日志的数量

查看容器内进程:

$docker top 容器名

$docker ps //查看哪些容器在运行

在运行中的容器内启动新进程:

$ docker exec [-d][-i] [-t] 容器名[COMMAD] [ARG...]

停止守护式容器:

$ docker stop 容器名 、//发送一个信号给容器,等待容器的停止

$ docker  kill 容器名    //直接快速停止容器

使用Docker帮助文件

man docker -run

man docker-logs

man docker -top

man docker -exec

. . . . . .

12、在容器中部署静态网站:

设置容器的端口映射:

run [-P] [-p]

    -P, --publish-all=true | false 默认为false   //暴露容器所有的端口进行映射

    docker run -P -i -t ubuntu /bin/bash

-p, --publish =[ ]    //指定映射哪些容器的端口,指定有四种方式如下:

~containerPort

        docker run -p 80 -i -t ubuntu /bin/bash       //指定容器端口,宿主机端口随机映射

~hostPort: containerPort

        docker run -p 8080:80 -i -t ubuntu /bin/bash    //指定容器端口和宿主机端口

~ip::containerPort

         docker run -p 0.0.0.0:80 -i -t ubuntu /bin/bash     //指定容器端口和IP

~ip:hostPort:containerPort

        docker run -p 0.0.0.0:8080:80 -i -t ubuntu /bin/bash     //指定IP和容器端口和宿主机端口

Nginx部署流程:

~创建映射80端口的交互式容器 、、、//docker run -p 80 --name web -i -t ubuntu /bin/bash

~安装Nginx                                                    // apt-get install -y nginx

~安装文本编辑器vim                        // apt-get install -y vim

~创建静态页面                                // mkdir -p /var/www/html    //cd  /var/www/html       //vim index.html   编辑静态页面

~修改Nginx配置文件                        //whereis nginx查找NGINX的位置;//ls /etc/nginx         //ls /etc/nginx/sites-enabled  //vim /etc/nginx/sites-enabled/default    //cd /

将server中root的值修改为静态网站的位置:root /var/www/html

~运行Nginx                                   //nginx              //ps -ef             //Ctrl + P  Ctrl + Q (退出容器)

 //docker port web查看网站映射的端口     //docker top web 查看容器中进程的运行情况

~验证网站访问         //curl http://127.0.0.1:49167如果成功的话将会打印出html中的内容,也可以在网页中查看:浏览器输入127.0.0.1:49167

还可使用日期的IP地址进行查看://docker inspect web 查找“IPAddress”: 172.17.0.32 容器端口    //curl http://172.17.0.32 即可查看

/var/www/html中的内容:

            Nginx in Docker

            

Hello, I' m website in Docker!

 关闭web容器:docker stop  web

启动web容器:docker start -i web   //重新启动后的容器并没有运行nginx  ////Ctrl + P  Ctrl + Q (退出容器)

//docker exec web nginx  启动nginx

//docker top web 查看容器中的进程

//curl http://172.17.0.32  会发现查看失败

// docker inspect web 会发现容器的IP地址变了。容器端口号也变了。

¥¥¥¥停止一个容器,并重新启动时。容器的IP地址和端口号都会发生改变。

你可能感兴趣的:(Docker)