Docker:
装应用的容器,开源,托管在github上,跨平台,支持windows、mac、linux
Docker的思想:集装箱、标准化(运输方式、存储方式、API接口)、隔离
LNMP(linux+Nginx+Mysql+PHP)
安装各种软件以及各自的依赖环境、配置参数
1、运行环境不一致、迁移服务器
2、隔离性解决了 各个应用的相互影响,限制了最大的CPU和硬盘,超过了杀掉
3、双11业务量大,标准化让 增加服务器部署环境变得简单 按一个按钮分分钟部署上百个服务器环境部署完成;
Docker核心词汇:镜像(Build集装箱)、仓库(Ship超级码头)、容器(Run运行程序的地方)
镜像:Image 就是一系列文件(运行环境的文件、程序文件)保存在本地,格式为
联合文件系统 Union FS 把不同目录下的文件集合在同一个文件夹,实现文件的分层。每一层文件都是只读的,每层加载完成就是同一个目录;每一层可以自己定义;–目的:要在其他机器上运行
分层:操作系统引导–操作系统–tomcat、jdk–程序文件–容器
容器:本质上进程, 最上面一层是可读可写的
仓库:docker自己提供的
hub.docker.com—加载镜像的速度特别慢
c.163.com蜂巢 —把镜像传到docker仓库里
内部人私用的,在内网环境搭建一个仓库中心;
安装:http://imooc.com/article/16448 Centos
1、yum install -y docker安装docker–》docker version查看版本–》systemctl start docker 启动docker–》docker info查看docker信息、systemctl status docker查看docker状态
镜像:
拉取镜像到本地: docker pull [OPTIONS参数] NAME[:TAG版本]
查看本机有哪些镜像:docker images [OPTIONS] [ REPOSITORY [ :TAG ]
容器:
docker run [OPTIONS] IMAGE [:TAG] [COMMAND] [ARG]
Nginx—是需要持久运行,前台挂起(ctrl+c结束)&后台运行
1、docker pull 名字(在网易蜂巢找,有地址,直接复制)
2、docker images
3、docker run 名字同上(在前台运行,ctrl+c结束,不推荐)
—docker run -d 名字: 后台运行,返回容器的id(字符串)
4、docker ps 查看目前正在运行的容器
5、docker exec -it f4 (容器id) bash 查看容器内部的结构,进入到名称为容器id的主机
which nginx 查看nginx的位置
ps -ef 当前服务都有哪些进程
exit 退出容器
docker网络
网络类型:Bridge(独立分配, 端口映射) Host(和主机共同使用网络,不需要配IP) None(没有网络)
docker stop 容器id—停掉镜像
docker run -d -p 8080:80 容器名 ----端口映射,开放一个容器端口80到主机8080上
netstat -na|grep 8080 查看是否开放了端口,在浏览器上localhost:8080可以看到nginx
docker run -d -P 容器名 把所有监听的端口都和主机建立映射
docker -ps 可以看到 主机开放随机端口到容器tcp 端口,localhost:随机端口可以看到nginx
Dockerfile–用来告诉docker我要怎样制作镜像
docker build—根据dockerfile里面的步骤构建镜像
下载war包到本地—》打开终端 --》docker images查看镜像
在蜂巢查看tomcat路径,docker pull 路径 下载tomcat到本地作为基础镜像(包括了jdk)
查看tomcat的默认环境CATALINA_HOME:/usr/local/tomcat
ls 查看项目web war包的名称 mv 名称 新名称 —改名
vi Dockerfile i写
from tomcat路径
MAINTAINER 所有者的名字 所有者的联系方式—这行可以不写
COPY war包名称 /usr/local/tomcat/webapps(tomcat的webapps下的路径)
wq保存退出
docker build -t 名字 . ------docker file的目录 当前目录用.表示,-t是给镜像起名
docker images查看新建的镜像
docker -run -d -p 8888:8080 镜像名字
docker ps
netstat -na|grep 8888 已经处于listen状态
在浏览器上访问 localhost:8888 —进入tomcat
localhost:8888/镜像名 ----进入项目
https://www.imooc.com/video/14626
Docker四个组件的关系?
Docker:汽车引擎
dockerfile:汽车图纸
images:类似于样板车
container:将一些汽车的零件拼接在一起,运行
Docker compose:老司机,可以跑多个container
Docker Volumn:汽车的油箱,做数据迁移
Docker Swarm:交通枢纽
Docker Registry:4S店
https://labs.play-with-docker.com 在线练习docker
https://segmentfault.com/a/1190000011263661#articleHeader13Docker
Docker-compose 老司机
我们部署应用一般会使用多个容器,如果我们一个个去启动应用,当项目非常多时,就很难记住,docker compose是一个配置文件,负责对docker容器集群的快速编排;允许用户通过一个单独的docker-compose.yml文件来定义一组相关联的应用容器为一个项目;
安装:
pip install docker-compose
在docker-compose.yml文件中,编写过程:https://blog.51cto.com/wutengfei/2156792
启动:cd到YAML文件所在文件夹,执行命令docker-compose up
docker-compose up -d后台运行
停止运行 docker-compose down
Docker Volume: 油箱 数据卷
docker数据持久化,不会随着容器的结束而结束,可重复利用,共享容器间的数据;
Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上.
挂载:docker run -it -v my-volume:/mydata alpine sh (将my-volume挂载到container中的/mydata目录)
第一种形式
docker run -v 容器内部地址 镜像名称
docker run -d --name nginx -v /usr/share/nginx/html nginx
运行nginx容器,通过-v挂载一个卷组,通过-d后台启动,通过--name为容器指定名称
docker inspect 容器名称
docker inspect nginx
查看指定容器所有信息
查看Mounts节点下的Sources节点和Destination节点信息
该容器把宿主机的Sources对应目录挂载到容器内部的Destination的目录地址
cd Sources对应的目录路径
vim index.html,修改index.html文件
docker exec -it 容器名称 /bin/bash
进入到容器内部
cd Destination对应的路径路径
然后查看index.html文件,发现是刚刚修改后的内容,即挂载成功,映射关系正确
第二种形式
docker run -v $PWD/code:/var/www/html nginx
本地目录挂载到容器里面的一个路面里面
docker run -p 80:80 -d -v $PWD/html:/usr/share/nginx/html nginx
cat html/index.html
查看本地文件的内容
docker exec -it 容器名称 /bin/bash
进入到容器内部
cat /usr/share/nginx/html/index.html
发现其内容和本地文件的内容一致,即映射关系正确
第二种形式
docker run --volumes-from ...
mkdir data
docker create -v $PWD/data:/var/mydata --name data_container ubuntu
产生一个仅有数据的容器
docker run -it --volumes-from data_container ubuntu /bin/base
从另外一个容器挂载, 运行并直接进入容器内部
mount
cd mydata
touch whatever.txt
exit
cd data
ls
查看本地data目录下是否有whatever.txt文件
可以多个容器挂载一个数据容器,实现数据共享
Docker Swarm 交通枢纽 一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。
Docker Registry 镜像仓库 4S店
docker pull 镜像名称
从镜像仓库中拉取指定镜像
docker push 镜像名称
将本地镜像推送到镜像仓库