Docker是一个开元容器引擎,可以理解为是个简易版的linux系统,Docker由client客户端+容器+镜像image仓库组成.
我们可以在一个容器可以启动一个应用程序,而且是简单的一行命令就可以直接安装启动,比如说mysql
概念
我们可以从官网拉取镜像,也可以从私服拉取镜像,然后在本地启动镜像,启动之后就生成了一个容器,容器可以有多个,容器内部一般不存储数据,Docker容器是不稳定的,可以随意重启,比如说Mysql的数据,而且多个Docker容器之间数据应该可以相互通讯, 可以-v挂载宿主机的文件夹, 这样doker直接启动关闭无需关系数据的丢失,多个容器也可以共享宿主机的文件
数据挂载
Docker的-v [volume]启动容器的时候挂载主机目录,可以冒号别名,命令创建一个数据卷,指向宿主机的文件位置,启动的时候可以指定共享别的容器的挂载文件,1、指定目录挂载,2、指定容器的挂载共享volume-from,删除容器也不会删除宿主数据,当然也可以强制删除数据
镜像制造
commit方式创建镜像
容器是在镜像上面增加了一个读写层,当commit是此层变成了只读层,变成了镜像
docker ps 查看所有镜像,都是仓库已有的,那么如何自己创建一个镜像呢,docker run ,[yum search jdk],yum install nginx -y,rpm 添加源, 将安装了nginx的docker容器做成镜像,docker commit 容器名字 镜像名
启动nginx容器并不会自动启动nginx,需要换一种启动方式docker run -dit /user/sbin/nginx -g "beamon off" 让nginx随机启动并已前台方式运行
Dockerfile创建镜像--
要有基础镜像centOS,一般由docker官方提供,作者信息,镜像要安装哪些服务,制定容器命令比如随机启动,
java开发人只是在这个基础镜像之上完成shell
docker build -t cmd . 运行当前命令下Dockerfile文件,文件名必须是Dockerfile
手动做一个nginx源码安装方式的镜像, nginx-1.13.2.tar.gz源码包,(源码安装与yum安装)shell命令,
docker images
dockerFile--cmd
dockerfile--打包应用SpringBoot成镜像,ADD jar包,下面cmd命令,java- jar,打包启动了我们的服务,RUN类似commit命令,运行完将读写层转换为只读层,不建议在基础版本centOS上自己加jdk,站立版本,镜像的层RUN不能太多,&&可以合并成一行,docker是实战性非常强的技能
三节、
了解docker用途范畴,
java8灵活编程
docker环境搭建--镜像、容器 常规性维护 ==拉取镜像、创建容器、起停
docker的数据挂载、docker的仓库、dockerfile方式创建镜像
docker的便利度>
CMD 与 ENTRYPOINT(入口点,推荐容器入库,用来替代cmd)
cmd像java的main方法,维持进程,dokcer start/run 找main方法,主进程结束,容器就退出,启动cmd与dockerfile的cmd会相互覆盖,脚本cmd是缺省,覆盖就失效,cmd就是main方法结束容器就关闭了,main方法是主业 ,tomcat镜像与nginx镜像分开工作,镜像里面ENTRYPOINT命令不可更改
docker ps 查看所有镜像
将Spring Boot服务部署到Docker 30:17
dockerFile打包怎么打
FROM openjdk:8 基础镜像
ADD ["member-1.0.jar","web.jar"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/web.jar"]
docker buikd -t member:test,基于dockerfile打项目镜像的动作
docker run -d --name memname imageid,基于镜像启动容器,可以绑定端口
docker inspect 容器进程名称,查看容器详情
docker rm -f mem 容器进程名称。移除容器
本地打maven包,包上传docker环境,打镜像,运行
docker-maven-plugin插件,docker客户端maven依赖,所有过程直接在客户端运行,在pom文件配置服务端地址
安装windows的DockerToolbox,docker-machine env docker-machine ssh
vi /var/lib/boot2docker/profile 第三行配置push时候仓库的地址 rancher
idea的maven插件,本地maven生成的包和镜像直接上传到私有仓库,
服务器直接run就可以,本地组合成一条maven命令打包push,然后服务器启动就可以,docker的dev环境很实用
分布式不好弄【可用Compose编排解决】
linux版是在jenkins上集成
以上都是docker镜像的发布这个层面
--------------------------------
docker容器管理工具,Compose编排服务
mysql
nginx
web
每一个项目做成镜像
docker-compose version
docker-compose up 【-d】 直接启动管理多个容器,会启动上图三个容器
docker-compose down 把容器全部卸载掉
docker ps -a
docker images
docker -rmi imgid
docker rm -f 镜像id
docker push 镜像名称 手动push镜像到私有仓库
compose的使用非常简单,配置那个文件就可以,编排启动多个镜像
大范围编排要用k8s了
docker的网络比较low
容器与主机用的docker0网桥,一台主机内的容器网络互通的,但是多台主机的容器网络是不通的,swarm,nat
route 命令查看路由信息
路由表加路由
设置了还是ping不同,是因为接收方虽然接受到了包但是没有转发用已下方式解决
只是解决了A的容器到B容器的网络,那么B容器到A容易也得有相同的配置
线上环境需要 git/maven/jekins --docker, jekins拉git的包,用maven打包到宿主机,拉dockerfile与运行compose[只能操作一台宿主机]生成容器
手动跑到容器里面去修改jar包也可以,但是不推荐这么操作
-----
docker machine只是一个客户端
K8S:
K8S由master和node节点组成,master是主节点负责管理和控制,node是工作节点里面是具体的内容
docker swarm 和 docker compose一样,都是容器编排神器
K8S,单机玩docker就docker就ok,多台机器玩docker就必须用k8s,主要玩的master
每台机器都操作很累,所以有了k8s等,目标是为docker环境建造运行环境=pod
pod
kubelet同servlet,kubeproxy,docker
pot和容器到处跑,到处飘逸,不稳定,service负责来找到具体的pod,
安装k8s的yum源