广州天河 网站建设,上海招标网站,创立外包网站,广州万网建网站Docker基础入门#xff1a;常规软件安装与镜像加载原理 一、Docker常规软件安装1.1、部署nginx1.2、部署tomcat1.3、部署elasticsearch1.4、如何部署kibana--连接elasticsearch1.5、部署可视化工具 二、 镜像加载原理2.1、镜像是什么2.2、Docker镜像加速原理2.3、分层理解… Docker基础入门常规软件安装与镜像加载原理 一、Docker常规软件安装1.1、部署nginx1.2、部署tomcat1.3、部署elasticsearch1.4、如何部署kibana--连接elasticsearch1.5、部署可视化工具 二、 镜像加载原理2.1、镜像是什么2.2、Docker镜像加速原理2.3、分层理解 The Begin点点关注收藏不迷路 一、Docker常规软件安装
1.1、部署nginx
1、拉取nginx镜像
[rootzyl-server ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[rootzyl-server ~]# 2、查看镜像
[rootzyl-server ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.234.10:5000/centos 1.2 d0a52e21dd65 20 hours ago 231MB
centos 1.2 d0a52e21dd65 20 hours ago 231MB
nginx latest 605c77e624dd 19 months ago 141MB
registry.cn-hangzhou.aliyuncs.com/zhaohaibao/centos 7.9 5d0da3dc9764 23 months ago 231MB
[rootzyl-server ~]# 3、运行nginx8011为容器外部端口80端口为容器内部nginx的端口
[rootzyl-server ~]# docker run -d --namemynginx -p 8011:80 nginx
926fd257ed887f86894e1fb3b99c2f5edda141e9fdd92c04de3255fd2b1b4973
[rootzyl-server ~]# [rootzyl-server ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
926fd257ed88 nginx /docker-entrypoint.… About a minute ago Up About a minute 0.0.0.0:8011-80/tcp, :::8011-80/tcp mynginx
[rootzyl-server ~]# 4、进入nginx容器
[rootzyl-server ~]# docker exec -it mynginx /bin/bash
root926fd257ed88:/# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root926fd257ed88:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root926fd257ed88:/# cd /etc/nginx/
root926fd257ed88:/etc/nginx# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
root926fd257ed88:/etc/nginx#
root926fd257ed88:/etc/nginx# 本地访问8011测试
[rootzyl-server ~]# curl localhost:8011
!DOCTYPE html
html
head
titleWelcome 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
h1Welcome to nginx!/h1
pIf you see this page, the nginx web server is successfully installed and
working. Further configuration is required./ppFor online documentation and support please refer to
a hrefhttp://nginx.org/nginx.org/a.br/
Commercial support is available at
a hrefhttp://nginx.com/nginx.com/a./ppemThank you for using nginx./em/p
/body
/html
[rootzyl-server ~]# ❓ 思考每次修改nginx配置文件都需要进入容器内部十分麻烦------》引入数据卷通过路径映射在容器外部即可修改。
1.2、部署tomcat
1、下载tomcat
### --rm 用完即删一般用来测试
docker run -it --rm tomcat:9.0###这里使用这个
docker pull tomcat:9.02、运行tomcat参数说明
-p 小写 主机端口容器端口
-P 大写 随机分配端口
i 交互
t 终端
d 后台docker run -d -p 8012:8080 --namemytomcat tomcat原因tomcat默认是最小的镜像有的文件被删除了。保证最小运行环境。 解决
1、进入容器
[rootzyl-server ~]# docker exec -it mytomcat /bin/bash
rootf8e5b8f57b2b:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work
rootf8e5b8f57b2b:/usr/local/tomcat# cd webapps
rootf8e5b8f57b2b:/usr/local/tomcat/webapps# ls
rootf8e5b8f57b2b:/usr/local/tomcat/webapps# 2、拷贝webapps.dist下的文件到webapps
rootf8e5b8f57b2b:/usr/local/tomcat# cp -r webapps.dist/* webapps/
rootf8e5b8f57b2b:/usr/local/tomcat#
测试访问
❓ 思考部署项目每次进入容器内部是不是很麻烦------》引入数据卷通过路径映射在容器外部即可修改。
1.3、部署elasticsearch ❓ 思考: es暴露端口多 es内存占用大 es的数据一般要放置到安全目录挂载 ——————怎么解决 1、下载、启动elasticsearch
[rootzyl-server ~]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e discovery.typesingle-node elasticsearch:7.6.2
Unable to find image elasticsearch:7.6.2 locally
7.6.2: Pulling from library/elasticsearch
ab5ef0e58194: Pull complete
c4d1ca5c8a25: Pull complete
941a3cc8e7b8: Pull complete
43ec483d9618: Pull complete
c486fd200684: Pull complete
1b960df074b2: Pull complete
1719d48d6823: Pull complete
Digest: sha256:1b09dbd93085a1e7bca34830e77d2981521a7210e11f11eda997add1c12711fa
Status: Downloaded newer image for elasticsearch:7.6.2
89b955d50f2fd130d2e19e4048d30a8c38c6beb1023552be2af0c49b6fbf59512、查看当前运行的镜像
[rootzyl-server ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89b955d50f2f elasticsearch:7.6.2 /usr/local/bin/dock… 7 seconds ago Up 6 seconds 0.0.0.0:9200-9200/tcp, :::9200-9200/tcp, 0.0.0.0:9300-9300/tcp, :::9300-9300/tcp elasticsearch
f8e5b8f57b2b tomcat catalina.sh run 20 minutes ago Up 20 minutes 0.0.0.0:8012-8080/tcp, :::8012-8080/tcp mytomcat
926fd257ed88 nginx /docker-entrypoint.… 57 minutes ago Up 57 minutes 0.0.0.0:8011-80/tcp, :::8011-80/tcp mynginx
[rootzyl-server ~]# 3、查看当前cpu使用情况50%
docker status4、测试访问elasticsearch
[rootzyl-server ~]# curl localhost:9200
{name : 89b955d50f2f,cluster_name : docker-cluster,cluster_uuid : pJGBGgBpTOSEqmbG0uMUdg,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
}
[rootzyl-server ~]# 5、停止elasticsearch、增加内存限制(-e ES_JAVA_OPTS-Xms64m -Xmx512m),最低占用64m内存最高占用512m内存。[rootzyl-server ~]# docker stop 89b955d50f2f
89b955d50f2f
[rootzyl-server ~]# 6、再次运行
[rootzyl-server ~]# docker run -d --name myelasticsearch -p 9200:9200 -p 9300:9300 -e discovery.typesingle-node -e ES_JAVA_OPTS-Xms64m -Xmx512m elasticsearch:7.6.27、再次查看内存
[rootzyl-server ~]# docker stats 1.4、如何部署kibana–连接elasticsearch 1.5、部署可视化工具
1、portainer使用这个
docker run -d -p 8088:9000 --restartalways -v /var/run/docker.sock:/var/run/docker.sock --privilegedtrue portainer/portainer2、RancherCI/CD、持续部署、集成时再用这个什么是portainer ?
portainer 是 Docker的图形化界面管理工具提供一个后台面板供我们操作
1、启动运行[rootzyl-server ~]# docker run -d -p 8088:9000 --restartalways -v /var/run/docker.sock:/var/run/docker.sock --privilegedtrue portainer/portainer
Unable to find image portainer/portainer:latest locally
latest: Pulling from portainer/portainer
94cfa856b2b1: Pull complete
49d59ee0881a: Pull complete
a2300fd28637: Pull complete
Digest: sha256:fb45b43738646048a0a0cc74fcee2865b69efde857e710126084ee5de9be0f3f
Status: Downloaded newer image for portainer/portainer:latest
99974acec5857c8559b5230e5c76063a82346a0e986780582ea6a40a7f62628c
[rootzyl-server ~]# 2、访问测试http://192.168.234.10:8088二、 镜像加载原理
2.1、镜像是什么
镜像是一种轻量级、可执行的独立软件包用来打包软件运行环境和基于运行环境开发的软件它包含运行某个软件所需的所有内容包括代码、运行时、库、环境变量和配置文件。
所有的应用直接打包docker镜像就可以直接跑起来
如何得到镜像 从远程仓库下载 朋友拷贝给你 自己制作一个镜像DockerFile 2.2、Docker镜像加速原理
UnionFS联合文件系统
我们下载的时候看到的一层层就是这个 UnionFS联合文件系统Union文件系统UnionFS是一种分层、轻量级并且高性能的文件系统它支持对文件系统的修改作为一次提交来一层层的叠加同时可以将不同目录挂载到同一个虚拟文件系统下unite several directories into a single virtual filesystem。Union 文件系统是Docker 镜像的基础。镜像可以通过分层来进行继承基于基础镜像没有父镜像可以制作各种具体的应用镜像。 特性一次同时加载多个文件系统但从外面看起来只能看到一个文件系统联合加载会把各层文件系统叠加起来这样最终的文件系统会包含所有底层的文件和目录。 Docker镜像加载原型
docker的镜像实际上由一层一层的文件系统组成这种层级的文件系统UnionFS。 bootfsboot file system主要包含bootloader和kernelbootloader主要是引导加载kernelLinux刚启动时会加载bootfs文件系统在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了此时内存的使用权已由bootfs转交给内核此时系统也会卸载bootfs。 rootfsroot file system在bootfs之上。包含的就是典型Linux系统中的/dev/proc/bin/etc等标准目录和文件。 rootfs就是各种不同的操作系统发行版比如UbuntuCentos等等。 平时我们安装进虚拟机的CentOS都是好几个G为什么Docker这里才200M 对于一个精简的OSrootfs可以很小只需要包含最基本的命令工具和程序库就可以了因为底层直接用Host的kernel自己只需要提供rootfs就可以了。 由此可见对于不同的linux发行版bootfs基本是一致的rootfs会有差别因此不同的发行版可以公用bootfs。 虚拟机是分钟级容器是秒级
2.3、分层理解
分层的镜像
我们可以去下载一个镜像注意观察下载的日志输出可以看到是一层一层的在下载 思考为什么Docker镜像要采用这种分层的结构呢 最大的好处我觉得莫过于是资源共享了比如有多个镜像都从相同的Base镜像构建而来那么宿主机只需在磁盘上保留一份base镜像同时内存中也只需要加载一份base镜像这样就可以为所有的容器服务了而且镜像的每一层都可以被共享。 查看镜像分层的方式可以通过 docker image inspect命令 [rootzyl-server ~]# docker image inspect tomcat:9.0所有的Docker 镜像都起始于一个基础镜像层当进行修改或增加新的内容时就会在当前镜像层之上创建新的镜像层。 举一个简单的例子假如基于Ubuntu Linux 16.04创建一个新的镜像这就是新镜像的第一层如果在该镜像中添加Python包就会在基础镜像层之上创建第二个镜像层如果继续添加一个安全补丁就会创建第三个镜像层。 、 该镜像当前已经包含3个镜像层如下图所示这只是一个用于演示的很简单的例子。 在添加额外的镜像层的同时镜像始终保持是当前所有镜像的组合理解这一点非常重要。下图中举了一个简单的例子每个镜像层包含3个文件而镜像包含了来自两个镜像层的6个文件。 上图中的镜像层跟之前图中的略有区别主要目的是便于展示文件。 下图中展示了一个稍微复杂的三层镜像在外部看来整个镜像只有6个文件这是因为最上层中的文件7是文件5的一个更新版本。 这种情况下上层镜像层中的文件覆盖了底层镜像层中的文件。这样就使得文件的更新版本作为一个新镜像层添加到镜像当中。
Docker通过存储引擎新版本采用快照机制的方式来实现镜像层堆栈并保证多镜像层对外展示为统一的文件系统。
Linux上可用的存储引擎有AUFS、Overlay2、Device Mapper、Btrfs以及ZFS。顾名思义每种存储引擎都基于Linux中对应的文件系统或者块设备技术并且每种存储引擎都有其独有的性能特点。
Docker在Windows 上仅支持 windowsfilter一种存储引擎该引擎基于NTFS文件系统之上实现了分层和CoW[1]。
下图展示了与系统显示相同的三层镜像。所有镜像层堆叠并合并对外提供统一的视图。 特点
Docker镜像都是只读的当容器启动时一个新的可写层被加载到镜像的顶部 这一层就是我们通常说的容器层容器之下的都叫镜像层 The End点点关注收藏不迷路