Docker是一个使用Go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的机器上。Docker的发展速度和火爆程度着实令人惊叹,一发不可收拾,形成了席卷整个IT界的新浪潮
Docker 解决了企业的痛点:快速的持续集成,服务的弹性伸缩,部署简单解放了运维,为企业节省了机器资源,
docker 是装应用的容器,就像装水的杯子,装笔的笔筒,可以把helloword 放进docker 网站放docker
docker公司开发,开源的,托管在github上,跨平台,支持 Windows,mac linux
Docker思想
是一个1集装箱 ,2标准化 :
运输(docker鲸鱼负责运输)
存储(不用关心存在哪,存在哪个盘)
API接口(对外提供一个遥控器,我按各个按钮就可以遥控应用,不用使用每种应用对应的程序了)
3 隔离: 可以迅速的创建和销毁,利用了linux内核LXC技术,创建docker容器只需要一秒)LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求
docker解决了程序在开发环境和生产环境的运行不一致的问题,保证了程序在从开发环境移植到生产环境时,不会因为环境因素而运行失败。
解决了运行环境不一致所带来的问题 ;使得各个应用之间隔离,不会相互影响 ;使得弹性伸缩,系统扩展变得简单
一个程序正常的运行起来,需要的基本条件: 底层的从操作系统 JDK Tomcat 数据库 配置文件
1、docker解决了运行环境不一致带来的问题2、隔离性,每台服务器相互隔离,互不影响3、一键化部署服务器(例如双11,服务器数量。。。)
docker里有三个核心技术:镜像、仓库、容器
集装箱、码头、运行程序地方
去仓库把镜像拉到本地,用命令运行镜像,变成容器
Build-构建镜像 - [镜像 - 集装箱]Ship-运输镜像(从仓库和我们的主机上运输)- [仓库 - 超级码头]Run- 运行镜像(运行的镜像就是一个容器) - [容器 - 运行程序的地方]Docker运行过程:去仓库把镜像拉倒本地,然后用一条命令把镜像运行起来变成容器!
将镜像拉到本地,执行命令使其运行,成为一个容器。
镜像就是一系列的文件:应用文件、环境文件。镜像的存储格式:联合文件系统,不同目录挂载到同一个目录下
通过联合文件系统达到文件分层的效果,镜像就是一系列分层文件的组合,这些文件是只读的。联合文件系统,能够在一个目录下显示不同目录的内容
镜像的每一层都是只读的,修改时会将镜像拷到Docker容器的最上层,在修改,修改后读文件时从上往下读取
容器的最上层是可写的,除了最上层,之外的都是只读的,所以同一个镜像的可以放到很多不用容器之中,并且修改下层时互不影响
总结:Docker容器:容器的最顶层是可以RW的。容器下面的镜像:只读。=> 一份镜像可以对应多个容器,各部分独立。
docker默认仓库:hub.docker.com网易提供仓库:c.163.com
Docker 默认仓库hub.docker.comDocker 也支持在内网自己搭建仓库
docker仓库。1.hub.docker自己提供的,速度很慢2.国内自己提供的,如网易蜂巢;
可以实现自己的docker仓库,在内网使用,这样子可以隐私
docker的安装1.如果非window,要先安装docker_tools
win10: www.docker.com/products/docker#/
windowswin10之外:http://www.docker.com/products/docker-toolbox
2.安装缓存boot2docker.isohttp://pan.baicu.com/s/1qYyc0ag
MacOS Yosemite 10.10.3+(2014/6) 下载地址 https://www.docker.com/products/docker#/mac
旧版本 下载地址 https://www.docker.com/products/docker-toolbox
运行命令会看到 docker version 查看是否安装成功;
linux Redhat & CentOS 系统要求64-bit OS version 3.10
Ubuntu 系统要求64-bit OS version 3.10
uname -r 【查询linux版本】
切换到root权限下,su 更新apt-get update
uname -r 检查内核版本命令apt-get install -y docker.io
ubuntu启动docker:service docker start安装官网最新版本命令curl -s https://get.docker.com|sh
使用curl -s https://get.docker.com|sh 命令来安装docker
1.ubuntucurl来获取最新的文件apt-get来下载系统配置源的软件,可能不是最新的软件版本2.与centos不一样yum3.wget与curl的区别是wget与curl都能下载东西,只是不同的工具
docker pull 从远程拉取镜像
docker images 查看本机所有镜像
pull 从默认的码头(也就是公共的超级大的仓库 市场)(hub.docker.com) 拉取集装箱(images) 对应 shipimages 本地的仓库 可以查看共有多少个集装箱(images)
名词解释:REPOSTTORY : 镜像名字 TAG : 版本(lastest 最新版)IMAGE ID : 64 位的字符串,可以唯一标识镜像,这里只显示16位,后面的被截掉了。CREATED : 创建时间 (最后修改时间)SIZE : 大小
拉取镜像:docker pull [OPTION] NAME[:TAG] 查看镜像:docker images[OPTION] [REPOSITORY[:TAG]]
安装完成后的例子,如 : docker pull hello-world
docker images
没有提供地址的时候,使用docker pull 是从默认的仓库 下载
Docker 运行一个镜像变为容器,运行docker docker run [OPTION] IMAGE[:TAG] [COMMAND] [ARG...]
docker run流程:客户端向docker daemon发送一条pull命令,docker daemon会先在本机查找镜像,如果没找到则去远程仓库里找,然后把镜像下载到本地,下载回来后通过一定的方式将镜像运行起来,变成docker容器。
如运行 docker run hello-world
运行 nginx 先拉取 docker pull hub.c.163.com/library/nginx:latest
docker ps:查看正在机器上运行的容器
docker run -d:后台运行 docker run --help
docker exec:在运行的容器中运行命令
docker pull nginx:latest 从 hub.docker.com 仓库拉取 latest 版本的 nginx 镜像
docker run nginx:latest 在前台运行 latest 版本的 nginx 镜像,若想退出使用 Ctrl + C 快捷键即可
docker run -d nginx:latest 在后台运行一个新的 latest 版本的 nginx 镜像
docker stop nginx:latest 停止后台 latest 版本的所有镜像, command 可以是启动后的镜像 id,也可以是镜像名称
docker images 当前存在的镜像docker search name 搜索镜像docker pull name 拉取镜像,name是镜像名
docker run -d IMAGE 执行镜像 -d 后台执行docker ps 查看在docker上运行的程序
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
exec:在运行的容器中执行命令。OPTIONS说明:-d :分离模式: 在后台运行-i :即使没有附加也保持STDIN 打开-t :分配一个伪终端
docker exec --help
docker exec -it 835 bash
好像进入linux 然后 ls which nginx ps -ef exit等
docker网络bridge与host的不一样bridge是网桥,docker和主机都有自己的ip地址,中间是通过网桥来端口映射来通信。host是共用主机的网卡
docker 开放端口给外部网络访问-p 是开放指定的端口,与上面,开本机端口8080映射到nginx的80端口-P 是由系统分配,分配没有使用的,暴露的接口给dockerdocker ps 可以查看进程,并看端口,连接
docker stop -f 停掉docker运行的f开头的镜像
docker run -d -p 8080:80 hub.c.163.com/library/nginx docker run -d -P hub.c.163.com/library/nginx
docker ps netstat -na |grep 8080 docker stop 96
docker stop "id"docker run -d -p 8080:80 hub.c.163.com/library/nginx:latest主机8080端口 映射到 docker容器 80端口 (-P 所有端口跟主机端口进行随机映射)netstat -na|grep 8080docker stop "id"
docker run -d -p 8080:80 IMAGE,默认桥接模式小p端口映射docker run -d -P IMAGE docker开放所有随机端口映射到容器上
端口映射---容器内的端口可以在主机上访问到
一、自己创建Dockerfile,dockerfile中包括 http://jpess.io
vi Dockerfile
from tomcat
MAINTAINER mwzhyf 1032757594@qq.com
(mv Jpress-web-newest.war Jpress.war 改名)
COPY Jpress.war /usr/local/tomcat webapps
docker build .
docker build -t jpress:latest
创建自定义镜像
1.基准镜像 from xxxxx镜像地址
2.作者MAINTAINER信息 XXX XXX.@163.COM3.COPY Jpress.war /usr/local/tomcat/webapps
二、docker build -t jpress:latest给自定义镜像指定name和tag(docker build .当前目录下构建docker)
docker build .注意下面的.是当前的目录。也就是docker file的存放目录
1.以tomcat为基准镜像2.copy war包在tomcat的webapps目录下3.增加维护人员
编写自己的镜像1.准备dockerfile脚本文件2.docker build命令构建
运行第一个docker化的java web 应用程序
docker run -d -p 8888:8080 jpress// 使用Docker Mysql镜像 创建Mysql数据库(注意:不能用localhost)docker run -d -p 3307:3307 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=jpress hub.c.163.com/library/mysql
docker restart IMAGE
集装箱、标准化、隔离;镜像、容器、仓库;pull、build、run、stop、restart、exec