为什么要使用docker?
我在我的电脑上可以运行,软件升级报错
环境配置十分麻烦,我每一台机器都要部署运行环境,费时费力
发布一个项目,war,jar包,需要mysql。redis,jdk,es,hadoop的环境(不是夸平台的),docker带环境发布
开发打包部署上线
docker给以上问题给出了解决方案
docker jar环境 项目打包带上环境(镜像) 服务器上运行
docker核心思想:隔离 打包装箱 每个箱子是相互隔离的
dockerhub
虚拟机和docker的不同,传统虚拟机模拟完整的操作系统,然后再系统上安装软件
docker:直接运行在宿主机上,容器没有自己的内核,
一个物理机上可以运行很多容器实例
开始运行
docker run 1在本机寻找镜像,1有,使用镜像运行 ,2没,去docker hub下载 2,判断仓库是否可以找到1找到 下载 2,找不到 ,报错,找不到镜像
docker是怎么工作的
是cs的结构,docker的守护进程运行在主机上,通过socket从客户端访问
docker用的是虚拟机的内核,
镜像命令
docker images
容器命令
docker run -d 启动 容器使用后台运行,必须要有一个前台进程相匹配,否则启动容器会自动退出 ctrl+p+q快捷键退出容器,容器继续后台运行 exit退出容器,后台不运行
进去当前正在运行的容器
#进入容器修改一些配置
docker exec -it 容器id
docker attach -it 容器id
两者的区别:1.开启一个新的终端,进入正在执行的终端
从容器copy到主机
docker cp 退出容器到主机上拷贝容器中的数据到主机中。
练习 docker安装nginx
1,dockerhub搜索nginx :https://registry.hub.docker.com/,搜索nginx,进入版本列表
1.搜索nginx: docker search nginx
2.运行nginx:docker run nginx
3.查找本机镜像文件:docker images
4.启动镜像:docker run -d --name nginx01 -p:8888:80 nginx //-d后台运行 --name 名字 -p端口(本地主机端口:容器端口)
5.查看运行的容器:docker ps
6.访问nginx容器:curl localhost:8888 (阿里云:注意安全组要加上8888端口配置,端口暴露概念)
运行结果:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
7.进入容器: docker exec -it nginx01 /bin/bash
每次改动nginx配置文件都非常的麻烦,是否可以在容器外部修改文件,容器内部自动修改(数据卷)
练习2:使用docker安装tomcat
1.搜索tomcat镜像:docker search tomcat
2.下载tomcat镜像:docker pull tomcat
3.查看本机镜像列表:docker images
4.运行tomcat镜像:docker run -d --name tomcat01 -p:8888:8080 tomcat//-d后台运行 --name 名字 -p端口(本地主机端口:容器端口)
5.查看本地主机运行的容器列表:docker ps
6.访问容器出现404页面(可以访问,没有页面,镜像为阉割版)
7.进入容器: docker exec -it tomcat01 /bin/bash ,进入容器发现问题,linux命令少了,tomcat webapps文件少了,阿里云镜像,默认是最少的镜像,所有不必要的都剔除了。cp -r webapps.dist/* webapps 需要拷贝webapp.dist目录下的文件到webapps目录。刷新网站就可以访问到页面。
以后每次部署项目都要进入容器非常麻烦,是否可以提供一个映射路径,自动同步到容器?
练习3,部署es+kibana
1.es暴露的端口很多,十分的耗内存,数据一般需要放置到安全目录(大约要占1.3G内存)
2.启动elasticsearch:docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.5.2
3.启动本地主机非常卡,docker stats查看cpu状态
4.测试 crul localhost:9200
5.停止容器 docker stop 容器id
6.重新启动容器带内存参数:docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.12.1