四、Docker 镜像
1、安装nginx
#示例
[root@localhost ~]# docker run -d --name nginx01 -p 3344:80 nginx
8c45d1f247c518d0281815b9f9d133c0a2eb1db16549a35fa7c30531c668e249
[root@localhost ~]# crul 192.168.100.3:3344
-bash: crul: command not found
[root@localhost ~]# curl 192.168.100.3:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
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>
#进入容器
[root@localhost ~]# docker exec -it nginx01 /bin/bash
root@8c45d1f247c5:/# cd /etc/nginx
root@8c45d1f247c5:/etc/nginx# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
2、安装tomcat
#官方的使用
docker run -it --rm tomcat
#我们之前的启动都是后台,停止了容器之后,容器还是可以查到的, docker run -it --rm 一般用来测试
#启动
[root@localhost ~]# docker run -d -p 3355:8080 --name tomcat01 tomcat
#测试没有问题
#进入容器
[root@localhost ~]# docker exec -it tomcat01 /bin/bash
#发现问题:1、liunx命令少了 2、没有webapps。 阿里云镜像原因,默认是最小的镜像,所有不必要的都剔除掉
#保证最小可运行的环境
3、部署es+kibana
#es 暴露的端口很多
#es 十分耗内存
#es 的数据一般需要放置到安装目录!挂载
#安装
[root@localhost ~]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-none" elasticsearch:7.6.2
#查看CPU服务器
docker stats
#增加内存限制,修改配置文件 -e修改配置文件
[root@localhost ~]# docker run -d --name elasticsearch04 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-none" -e ES_JAVA_OPTS="-Xms64m -Xmx128m" elasticsearch:7.6.2
4、可视化
①portainer
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图形化界面管理工具!提供一个后台面板供我们操作 测试访问:外网:8080
5、Dokcer镜像讲解
①镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码、运行时、库、环境变量和配置文件。
所有的应用,直接打包docker镜像,就可以直接跑起来!
②docker镜像加载原理
UnionFS(联合文件系统) Union文件系统(UnionFS) 是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像
③dacker镜像加载原理
Docker设计时,就充分利用Union FS的技术,将其设计为分层存储的架构。 镜像实际是由多层文件系统联合组成,这种层级的文件系统UnionFS,在内部又分为2部分:
1) bootfs(boot file system):docker镜像的最底层是bootfs,主要包含bootloader(加载器)和kernel(内核)。bootloader主要是引导加载kernel,linux刚启动时会加载bootfs文件系统。当bootfs加载完成后,整个内核就在内存中了,此时内存的使用权已由bootfs转交给了内核,此时系统也会卸载bootfs。
这里的加载,可以理解为,我们windows电脑开机时候,从黑屏到进入操作系统的过程。
2)rootfs(root file system):在bootfs之上,包含的就是典型linux系统中的/dev、/proc、/bin、/etc等标准目录和文件。不同的 Linux 发行版, boots 基本是一致的, rootfs 会有差別。
以图为例,从左到右,分为3个过程:
1、docker镜像的最底层是bootfs,然后是一个Base Image的基础镜像,这个基础镜像是Centos。
2、执行安装mysql操作,那么Docker会在Centos基础镜像之上又加了一层mysql镜像。
3、执行安装tomcat,那么在之前的mysql镜像上在继续加一层tomcat镜像。
就像叠积目一样,一层一层往上。也说明了docker的镜像实际上是由层一层的文件系统组成的。对于不同的的linux发行版本,bootfs基本是一致的,rootfs会有差别,所以不同的发行版可以共用bootfs。
另外,平时我们安装进虚拟机的CentOS都是好几个G,为什么Docker这里才200M? 因为底层直接用主机的内核,自己只需要提供rootfs就行了,所以rootfs可以很小,只需要包含最基本的命令、工具和程序库即可。这样一来,启动速度也快了,因为最浪费时间的引导加载过程没了。
特点
docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部 这一层就是我们所说的容器层,容器之下都叫镜像层
如何提交一个自己的镜像
docker commit 提交一个容器成为一个新的副本
#命令和git原理类似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
测试
#启动一个默认的tomcat
#发现默认的tomcat是没有webapps应用,镜像原因
#提交
[root@localhost ~]# docker commit -a="yanghang" -m="add webapps app" cc37cc34fd1d tomcat02:1.0
sha256:4b39229cea77468866301f5307c649e99c8d764ada69818297cff1576ee98354
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 4b39229cea77 6 seconds ago 430MB
redis latest 39ac5829bade 5 hours ago 138MB
tomcat latest d0ed0a728666 5 days ago 426MB
hello-world latest 9c7a54a9a43c 4 months ago 13.3kB
portainer/portainer latest 5f11582196a4 9 months ago 287MB
nginx latest 605c77e624dd 20 months ago 141MB
elasticsearch 7.6.2 f29a1ee41030 3 years ago 791MB