部署Nginx
1 搜索镜像
[root@VM-4-12-centos ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 17281 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 173
...
[root@VM-4-12-centos ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
1efc276f4ff9: Pull complete
baf2da91597d: Pull complete
05396a986fd3: Pull complete
6a17c8e7063d: Pull complete
27e0d286aeab: Pull complete
b1349eea8fc5: Pull complete
Digest: sha256:790711e34858c9b0741edffef6ed3d8199d8faa33f2870dea5db70f16384df79
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
3 启动镜像
先设置一下防火墙,之后启动设置宿主机端口使用这个,使用3344就可以访问
[root@VM-4-12-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest b692a91e4e15 2 weeks ago 142MB
centos latest 5d0da3dc9764 11 months ago 231MB
# -d 后台运行
# --name 给容器命名
# -p 宿主机端口:容器内部端口
[root@VM-4-12-centos ~]# docker run -d --name nginx01 -p 3344:80 nginx
f1047a6189941b298618490259561462d55e5890171fc999d7f5ddf72344e49c
[root@VM-4-12-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1047a618994 nginx "/docker-entrypoint.…" 41 seconds ago Up 40 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
测试本机的3344端口
[root@VM-4-12-centos ~]# curl localhost: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>
以下是端口暴露概念图
测试是否成功
4 进入容器
[root@VM-4-12-centos ~]# docker exec -it nginx01 /bin/bash
root@f1047a618994:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@f1047a618994:/# cd /etc/nginx
root@f1047a618994:/etc/nginx# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
root@f1047a618994:/etc/nginx#
部署tomcat
# 官方的使用
docker run -it --rm tomcat:9.0
# 我们之前的启动都是后台,停止了容器之后,容器还是可以查到
# docker run -it --rm tomcat:9.0 一般是用来测试的,用完就会删除
# 启动后使用ctrl+c退出后
[root@VM-4-12-centos ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1047a618994 nginx "/docker-entrypoint.…" 19 minutes ago Exited (0) 6 minutes ago nginx01
178c87fe1ac0 centos "/bin/bash" 12 days ago Exited (0) 12 days ago recursing_chebyshev
# 下载并启动
[root@VM-4-12-centos ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
d19f32bd9e41: Already exists
60ffabbc7d49: Already exists
f094bb0c8b4d: Already exists
fde4950fc6ef: Already exists
34eeeee27a4f: Already exists
a9f9c08dfe70: Pull complete
8f63f2537b0f: Pull complete
Digest: sha256:1c95c053578c1f229fb45e28ce17da5447b25178f276379c87c418d9bc2c8d21
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
[root@VM-4-12-centos ~]# docker run -d -p 3355:8080 --name tomcat01 tomcat
fba346b92826888f5807446408297246466e604561392473b88307fdd3125d0c
外网访问测试如下:
测试访问没有问题,但是没有显示tomcat,是因为官方的这个镜像是阉割版的
[root@VM-4-12-centos ~]# docker exec -it tomcat01 /bin/bash
root@fba346b92826:/usr/local/tomcat# ls
bin CONTRIBUTING.md logs README.md temp work
BUILDING.txt lib native-jni-lib RELEASE-NOTES webapps
conf LICENSE NOTICE RUNNING.txt webapps.dist
root@fba346b92826:/usr/local/tomcat# cd webapps
root@fba346b92826:/usr/local/tomcat/webapps# ls
发现问题:
-
命令缺少
-
没有webapps
阿里云镜像的原因。默认是最小的镜像,所有不必要的东西都删掉了,保证最小的可运行环境
此时我们将webapps.dist中的网页资源放到webapps中,再访问就可以得到正常的页面了。
root@fba346b92826:/usr/local/tomcat# cp -r webapps.dist/* webapps
此时访问测试如下:
思考问题:每次改动nginx配置文件都需要进入容器进行修改十分的麻烦,有没有办法在容器外提供一个映射路径,例如webapps,,达到在容器外部修改文件,容器内部就可以自动同步? -v 数据卷
部署es+kibana
# es 暴露的端口很多
# es 十分占用内存
# es 的数据一般需要放置到安全目录!挂载
# --net somenetwork ? 网络配置
# 启动
# 7.17.5从官网查
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.5
# docker stats 查看cpu状态
# es比较耗内存 1.xG
内存消耗如下所示:
docker stats
测试:
[root@VM-4-12-centos ~]# curl localhost:9200
{
"name" : "372b778dc388",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "GMpN2G5yQo2VASwPw-9Yeg",
"version" : {
"number" : "7.17.5",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "8d61b4f7ddf931f219e3745f295ed2bbc50c8e84",
"build_date" : "2022-06-23T21:57:28.736740635Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
内存消耗太大,修改配置文件增加对内存的限制
# -e 环境配置修改
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.17.5
修改后如下所示:
注意:需要修改一下容器名,同时还要把之前开启的es给关闭,否则会容器名冲突和端口冲突
测试一下:
[root@VM-4-12-centos ~]# curl localhost:9200
{
"name" : "419408fc7936",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "S9anRIqlSjKVXMMnCY7lnw",
"version" : {
"number" : "7.17.5",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "8d61b4f7ddf931f219e3745f295ed2bbc50c8e84",
"build_date" : "2022-06-23T21:57:28.736740635Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
可视化
-
portainer
-
Rancher(CI/CD再用)
什么是portainer?
docker图形化界面管理工具,提供一个后台面板供我们操作
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock --privileged=true portainer/portainer
访问测试一下:(记得放防火墙)
选择本地仓库即可
Docker镜像
镜像可以理解为一个独立的软件包,轻量级且可执行,用于导报软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包含了代码、运行库、库、环境变量和配置文件。
所有的应用,直接打包docker镜像就可以直接跑起来
如何得到镜像:
-
从远程仓库下载
-
朋友拷贝
-
自己制作一个镜像Dockerfile
联合文件系统(UnionFS)
是一种分层、轻量级并且高性能的文件系统,支持把对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。UnionFS是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。
特性:一次同时加载多个文件系统,但是从外面看起来只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有的底层文件和目录。
Docker镜像加载原理
bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs,这一层与典型的Linux/Unix系统是一样的,包含了boot加载器和内核,当boot加载完成之后整个内核都在内存中,此时内存的使用权已经有bootfs转交给内核,此时系统也会卸载bootfs。
系统启动需要引导加载,类似与我们装机时必须要设置的引导项。
rootfs(root file system),在bootfs之上,包含的就是典型的Linux系统中的/dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,CentOS等
为什么docker中的centos只有200M,而平时装机都是好几个G?
对于一个精简版的OS,rootfs可以很小,只需要包含最基本的命令、工具和程序库就可以了,因为底层直接用的Host的kernel,自己只需要提供rootfs就可以了,由此可见对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。
理解:镜像使用的内核用的是主机的,镜像就不需要再重复提供bootfs,只需要提供rootfs
对分层的理解
所有的docker镜像都起始于一个基础的镜像层,当进行修改或增加新的内容时,就会在当前的镜像层上创建新的镜像层。
例如,假如基于Ubuntu linux 16.04创建一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加python包,就会在基础镜像层上创建第二个镜像层;如果再添加一个安全补丁,就会创建第三个镜像层。
特点
docker镜像都是只读的,当容器启动的时候,一个新的可写层被加载到镜像的顶部
这一层就是常说的容器层,容器之下的都叫镜像层,我们的所有的操作都是基于容器层的
commit镜像
docker commit 提交容器成为一个新的副本
# 命令和git原理类似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[tag]
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://wangyuanzhuo.top/docker%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0-2/