思考题
1.我们部署项目,如果每次都要进入容器很麻烦,我们可以在容器外部提供一个映射路径,webapps,我们在外部部署项目,就自动同步到内部就好了。
作业:部署es+kibana
# es 暴露的端口很多
# es 消耗内存资源
# es 的数据一般需要放置到安全目录,挂载
# --net somenetwork ? 网络配置
# 启动elasticsearch
$ docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
# 启动了 linux卡住了 docker stats查看cpu的状态
# es 十分消耗内存
# 测试一下es是否成功
[root@localhost ~]# curl localhost:9200
{
"name" : "5506ccc49024",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "838u-pJUScaq1g3sKs21ZQ",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
# 增加内存的限制,修改配置文件 -e 环境配置修改 , 64m最小 512m最大
[root@localhost ~]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
作业:使用kibana连接elasticsearch
可视化
portainer(先用这个)
[root@localhost ~]# docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
Rancher(CI/CD再用)
什么是portainer?
Docker图形化界面管理工具,提供一个后台面板供我们操作。
[root@localhost ~]# docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
访问测试:外网8088
http://ip:8088
可视化面板平时不会使用,可以测试玩玩。
Docker镜像讲解:
镜像是什么?
镜像就是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
所有应用,直接打包docker镜像,可以直接运行、部署。
如何得到镜像:
从远程仓库下载
从别人那拷贝过来
自己之作一个镜像DockerFile文件
Docker镜像加载原理
UnionFS(联合文件系统)
我们下载的时候看到的一层一层就是这个。
UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。
bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存使用权限已由bootfs转交给内核,此时系统也会卸载boots。
黑屏—加载—开机进入系统
Roots(root file system),在bootfs之上,包含的就是典型的Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Cenos等
虚拟机是分钟级启动,容器是秒级。
分层理解
理解:
所有的Docker镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层。例如:基于Ubuntu Linux 16.04创建一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层。
特点:
Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部。这一层就是我们通常说的容器层,容器之下的都叫镜像层。
commit镜像
docker commit 提交容器成为一个新的副本
# 命令和git原理类似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
实战测试
# 1、启动一个默认的tomcat
# 2、发现这个默认的tomcat没有webapps应用,镜像的原因,官方的镜像默认是webapps下面没有任何文件的
# 3、然后我们从webapps.dist文件夹拷贝过去
# 4、将我们操作过的容器通过commit提交为一个镜像,以后我们就直接使用这个修改过的镜像即可。如下图:

理论联系实际,切记要实际操作一下!
#如果想要保存当前容器的状态,就可以通过commit来提交,获得一个新的镜像。我的理解类似于vm快照功能。