docker
1.什么是docker
docker就是可以装东西的容器,就像杯子可以装水,笔筒可以放笔,书包可以放书一样;你可以把hello-word放进docker,可以把应用放进docker。是世界领先的容器化平台。
docker官网https://www.docker.com/
2.docker思想:
1)集装箱。不管在哪,运行都一样。
2)标准化 运输方式、存储方式、API接口
Docker的标准化让快速扩展,弹性伸缩变的简单
Docker提供了一系列的RESTFUL API接口,包含了对Docker也就是对应用的控制,其中包括停止 查看 删除等等
3)隔离
最底层的技术实际上是一种linux的一种内核的限制机制,叫做LXC,LXC是一种轻量级的容器虚拟化技术,最大效率的隔离了进程和资源,通过cgroup namespace等限制隔离进程组所使用的物理资源,如CPU I/O Memory等等。这个机制早在7、8年之间就已经加入到了linux内核技术当中了
一个程序正常的运行起来,需要的基本条件,
底层的从操作系统
JDK
Tomcat
数据库
配置文件
docker解决了什么问题?
Docker解决了运行环境不一致所带来的问题,
死循环程序导致内存不够,硬盘不足,
双11,服务器撑不住了
3.docker的核心技术
Build —> 构建镜像(从仓库中取出镜像使用命令直接运行)
Ship —> 运输仓库(装有各种镜像,变成容器)
Run —> 运行容器(运行镜像)
镜像 images
Docker镜像的每一层文件系统是只读的,然后把每一层加载完成之后,这些文件都会被看做是同一个目录,相当于只有一个文件系统,Docker的这种文件系统就被称之为镜像,
从本质上面来说,Docker就是一系列的文件,可以包括我们的应用的程序的文件,我们应用的环境的文件,Docker把这些文件保存在了本地,既然保存了,那么是以什么样的格式进行保存的呢?说到镜像的存储格式,就要说到linux的一个存储技术,叫做联合文件系统,Union FS,它是一种分层的文件系统,它可以将不同的目录挂到同一个虚拟的文件系统下面,通过这样一种方式,联合文件系统就可以实现文件的分成,比如test1可以看做是第一层,test2可以看做是第二层,每一层有每一层自己的文件,Docker镜像就是利用了这种分层的概念来实现镜像储存。
容器 container
容器的本质就是一个进程,只有最上面一层是可写的,下面的都是只读。一个可运行的动态文件系统,是镜像的实例
容器的本质就是一个进程,当我们的程序运行起来的时候,势必要写一些日志,文件等等,或者是对系统的某一些文件做了一些修改,这是大部分程序都有的一个需求,所以容器在最上面创建了一个可读可写的文件系统,如果程序在运行的过程当中要写一个镜像当中的文件,因为镜像的每一层是只读的,所以它在写某一个文件之前,会把这个文件的这一层拷贝到文件的最上层,然后再对它进行修改,修改了完成之后,当我们的应用读一个文件的时候,它会从最顶层开始进行查找,如果没有,才会找最下一层,因为我们的这个文件已经被拷到了最上一层
仓库
docker官方的 hub.docker.com
网易蜂巢地址:c.163.com
https://c.163yun.com/hub#/m
先把docker镜像传到仓库,再由目的地去仓库把镜像拉过去。由中央服务器提供仓库
4.docker 的安装
可以在mac、linux 、windows。这里略过
5.docker的初体验
第一个docker镜像
拿取镜像 docker pull [options] NAME[:TAG]
查看本机的镜像 docker images [options] [repository[:TAG]]
运行容器 docker run [options] image[:TAG] [COMMAND] [ARG…]
docker run流程:
客户端向docker daemon发送一条pull命令,docker daemon会先在本机查找镜像,如果没找到则去远程仓库里找,然后把镜像下载到本地,下载回来后通过一定的方式将镜像运行起来,变成docker容器。
6.docker运行nginx镜像
持久运行的容器
前台挂起&后台运行
进入容器的内部
docker pull hub.c.163.com/library/nginx:latest
访问http://localhost:8080/
有的时候需要进入容器内部;docker exec -it xxx bash
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
ls
ps -ef
ps -ef提示找不到ps命令,由于在容器里面没有安装ps命令
在nginx容器中执行以下命令安装ps组件:
apt-get update && apt-get install procps
7.docker的网络
网络类型
host 模式:和宿主机公用一块网卡
brige模式:有两套网络系统,所以需要湍口映射
端口映射
-P 大P代表随机端口
8.制作自己的镜像
Dockerfile
docker build
from hub.c.163.com/library/tomcat
MAINTAINER xiaohu xxx@163.com
COPY jpress-web-newest.war /usr/local/tomcat/webapps
docker build .
注意下面的.是当前的目录。
也就是docker file的存放目录
docker build -t jpress:latest .
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=jpress hub.c.163.com/library/mysql
docker restart xxxx