Docker 和 虚拟机的不同
- 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
- 容器内的应用直接运行在宿主机的内容,容器时没有自己的内核的,也没有虚拟硬件,所以轻便
- 每个容器间是相互隔离,每个容器都有一个属于自己的文件系统,互不影响
DevOps(开发、运维)
应用更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一键运行
更快捷的升级和扩缩容
使用了Docker之后,我们部署应用就和搭积木一样
项目打包成一个镜像,扩展 服务器A 服务器B
更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致
更高效的计算资源利用
Docker 是内核级别的虚拟化,可以在一个物理机上运行很多容器实例,服务器的性能可以被压榨到极致。
结构
镜像(image):
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务。
通过镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)
容器(container)
Docker利用容器技术,独立运行一个或者一个组的应用,通过镜像来创建
启动、停止、删除、基本命令
简单理解为一个简易的linux系统
仓库(repository)
仓库是存放镜像的地方
仓库分为共有仓库和私有仓库
Docker Hub(默认国外的)
使用
docker pull XXX 下载容器
docker images 查看容器
docker run -d --name nginx01 -p 3344:80 nginx 公网3344访问nginx80端口
- -d 后台运行
- --name 给容器命名
- -p 宿主机端口
curl localhost:3344 查看本机端口
思考问题
我们以后要部署项目,如果每次都要进入容器很麻烦,可以在容器外部提供一个映射路径,webapps
部署es + kibana
ES 暴露端口很多
ES 十分耗内存
ES 的数据一般需要放置到安全目录!挂载
ocker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
启动了 Linux就卡住了 docker stats 查看cpu的状态
es 限制内存
docker run -d --name es01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
可视化
- portainer
- Rancher(CI/CD)
portainer
Docker图形化界面管理工具!提供一个后台面板供我们操作
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer