6.Docker实例
(1)docker安装nginx
#搜索镜像
[root@cluster-node-5 ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 14291 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1941 [OK]
......
#下载镜像并查看(默认下载最新版本)
docker pull nginx
docker images nginx #或者 docker images
[root@cluster-node-5 ~]# docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f6d0b4767a6c 8 days ago 133MB
#启动镜像并查看
-d #后台运行
--name #镜像运行实例,重命名
-p #-p:3000:80将外部的3000端口暴露给容器内部80端口用
docker run -d --name nginx01 -p:3000:80 f6d0b4767a6c
[root@cluster-node-5 ~]# docker run -d --name nginx01 -p:3000:80 f6d0b4767a6c
d133901454709acf97d64f31344dde10af897a6cf8b368efcbc064d12b6c682d
[root@cluster-node-5 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d13390145470 f6d0b4767a6c "/docker-entrypoint.…" 54 seconds ago Up 53 seconds 0.0.0.0:3000->80/tcp nginx01
#测试nginx
curl localhost:3000
[root@cluster-node-5 ~]# curl localhost:3000
<!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>
#进入nginx容器
-it #交互模式进入容器
/bin/bash #镜像运行环境
docker exec -it nginx01 /bin/bash
[root@cluster-node-5 ~]# docker exec -it nginx01 /bin/bash
root@d13390145470:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
端口暴露(端口映射原理图)
思考一个问题:每次修改nginx配置文件,我们都需要进入容器内部,非常的麻烦,如果我们能在容器外部建立映射路径,当在容器外部修改相关配置文件时,容器内部就可以自动修改? ( -v 数据卷技术)
(2)docker安装Tomcat
#官方安装命令
--rm #用完即删,一般用于测试
docker run -it --rm tomcat:9.0 #安装成功后就可以看到tomcat常见的日志
21-Jan-2021 01:46:51.559 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080" ]
21-Jan-2021 01:46:51.571 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [72] milliseconds
#安装最新版tomcat(一步到位)
docker run -it -d --name tomcat01 -p 9090:8080 tomcat /bin/bash
#查看tomcat容器
[root@cluster-node-5 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6380121f2a28 tomcat "/bin/bash" 18 seconds ago Up 16 seconds 0.0.0.0:9090->8080/tcp tomcat01
d13390145470 f6d0b4767a6c "/docker-entrypoint.…" 49 minutes ago Up 49 minutes 0.0.0.0:3000->80/tcp nginx01
#浏览器验证Tomcat是否安装成功?
#页面访问失败(404)
#进入容器,查看相关资源,发现webapps下面什么都没有,为什么呢?因为镜像源保证最小、最核心、最精简的部分,剔除非必要的
#可以将webapps.dist下面的文件拷贝到webapps即可(也可以直接重命名)
root@6380121f2a28:/usr/local/tomcat# cp -r webapps.dist/* webapps/
root@6380121f2a28:/usr/local/tomcat# cd webapps
root@6380121f2a28:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
再思考一个问题:如果我们要部署一个工程到tomcat,那按正常流程应该要先进入容器中,然后将工程拷贝到webapps目录下。可不可以将容器webapps目录映射到容器外(主机)的webapps目录下面。
(3)docker安装es+kibana
es暴露的端口比较多,所以启动相关镜像的时候要特别注意!!!
es 非常消耗内存
es的数据一般需要放置到安全目录进行挂载
#docker启动es
#增加环境配置
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
#启动之后非常卡
#查看内存状态
docker stats
#增加内存限制
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_POTS="-Xms64M -Xmx512M" elasticsearch:7.6.2
(4)容器之间的访问
因为容器之间是相互隔离的,但它们都是建立在Linux的kernel上,所以这里可以通过内网实现容器之间的访问。