Docker 学习
Docker出现的历史和原因
开发环境,测试环境,生产环境,要配置很多东西,nginx端口,web端口,后端,注册中心配置等等。版本问题也会导致服务不可用,运维成本比较大。
主要还是环境配置很麻烦,特别是集群的话,每个机器安装一遍,费时费力
发布项目时可能发个jar或者war包,但是需要环境才能运行这个包,最好能把环境一起打包发过去。
Docker就是服务于开发解决上述问题的解决方案。
从而达成了:java – jar包 – 打包项目带上环境(镜像) — 放入docker仓库 — 下载镜像–运行镜像
10年发布,后来docker开源才火了起来,因为大家发现docker比起vm这些软件是真的轻量。
Docker和虚拟机本质都是虚拟化技术,虚拟机需要虚拟化所有硬件,容器只关注软件本身,只安装最核心的东西(linux核心也就一些指令大概4m)
docker本身
Docker基于Golang开发,是个开源项目
Docker推荐阅读官方文档,文档非常详细,可以看看dockerHub类似github
Docker容器是没有自己的内核的(虚拟机有完整的内核),但有自己独特的环境,容器之间是共享内核的。
image:docker镜像类似与java中的类概念
container:容器,类似与java中的对象的概念,容器是从镜像过来的,容器之间是隔离的
repository:仓库,存放image的地方
docker初步安装和运行
根据docker官方安装文档装下来就行了,可能要改下源,安装好后docker version
查看docker版本
执行docker run hello-world
测试hello world
执行docker images
查看镜像
如果是linux系统,资源一般放在/var/lib/docker内
执行docker run ...
发生的事:docker会先去本地仓库寻找镜像,如果找不到回去docker hub找对应镜像并且下载,如果用的阿里云服务器,可以配置镜像加速地址,就不去docker hub下载了直接从阿里云下载更快点。
docker是cs架构的系统,Docker的守护进程运行在主机,客户端命令是通过socket发送通信的,DockerServer接收后执行指令
docker常用指令
所有指令可以在官网看到
帮助命令:
1 | docker version |
镜像命令:
1 | docker images 查看镜像 -a显示全部 -q只显示id |
容器命令:
运行创建容器
1 | docker run [参数] <镜像> |
查看容器
1 | docker ps |
退出容器
1 | exit #容器停止并且推出 |
删除容器
1 | docker rm <容器id> #不能删除正在运行的容器除非加上 -f |
启动停止容器
1 | docker start <id> |
进入当前运行的容器
1 | 1. docker exec -it <容器id> /bin/bash |
容器和主机文件传递
1 | docker cp <容器id:路径> 目的主机路径 #容器到主机,反过来就是主机到容器 |
查看镜像源数据
1 | docker inspect --help |
其他命令
1 | 后台启动 |
docker 常用示例
安装配置nginx
可以去官网搜索nginx,看看有哪些版本和使用日志
启动nginx并且映射一个端口到主机,nginx默认80端口,这里映射到本地9999docker run -d --name mynginx -p 9999:80 nginx
启动后可以通过浏览器或者命令访问nginx服务:curl http://localhost:9999
也可以再次进入容器,找到nginx的配置文件
1 | docker exec -it mynginx /bin/bash |
因为要经常修改nginx配置文件,所以最好挂载数据卷。
安装配置tomcat
可以直接用官方的命令,里面的rm参数是用完即删除容器的,最好不要加上
装好的可以exec进入,但是缺很多命令,因为docker安装的是最小可运行环境
安装部署ES+kibana
es端口多还很耗内存,数据得放到安全目录
还是推荐使用官方的命令
先不用network$ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
太耗费内存和cpu,需要增加限制$ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:8.0 -e ES_JAVA_OPTS="-Xms64m -Xmx512m"