Docker 安装环境

目录

一. docker 安装nginx

二. docker 安装tomcat

三. 部署elasticsearch + Kibana

四. Portainer 可视化面板

五. 镜像原理之联合文件系统

镜像是什么?

Docker镜像加载原理

docker分层理解

六. Commit 镜像


一. docker 安装nginx

1. 搜索镜像;2. 下载镜像;3. 运行测试;

docker search nginx # 建议到docker hub网址上去找, docker hub上有详细的信息
docker pull nginx  # 下载nginx, 默认下载最新版
# run -d表示后台运行, --name 表示给容器起一个名字, -p表示暴露端口, 3304是宿主机上的端口, 80是容器内部端口, nginx默认端口号是80: 
docker run -d --name nginx01 -p 3304:80 nginx

在windows 浏览器中访问linux主机的ip地址加上3304端口号可以访问到docker内部的80端口:

什么是宿主机端口,什么是容器内部端口?端口暴露的概念:

二. docker 安装tomcat

官方的使用(用完即删,但是不建议使用这种方式,我们之前是后台启动,停止了容器之后还可以查询到容器,但是这种是停止容器之后就直接删掉了),tomcat是前台应用:

docker run -it --rm tomcat:tomcat版本号

但是在一开始学习的时候最好不要使用这种方式,需要先下载,然后启动:

docker pull tomcat # 下载最新版tomcat
docker run -it -p 3355:8080 --name tomcat01 tomcat # 容器外部的3355端口与容器内部的8080端口做一个映射, 通过外部的3355端口可以访问内部的8080, 启动运行
docker exec -it tomcat01 /bin/bash # 进入容器

但是在外网访问的时候出现404页面,并且其中有些命令是不存在的,webapp目录下没有文件导致外网访问的时候初选404页面,这其实是阿里云镜像的原因,默认是最小的镜像,所有不必要的东西都会删除掉,保证最小可以运行的环境,这里思考一个问题:部署项目的时候每一次都需要进入容器内部是不是特别麻烦,有没有哪种技术可以解决这个问题?

进入正在运行的tomcat01容器,将webapp.dist下的所有文件拷贝到webapp目录下,在windows的浏览器中访问Linux的静态ip地址和映射的3355端口号那么就可以访问到docker部署的tomcat服务器(我的Linux设置了静态ip地址为192.168.65.5)

三. 部署elasticsearch + Kibana

需要注意的问题:1. es暴露的端口很多;2. es十分耗内存;3. es的数据一般需要放置到安全目录,挂载;

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2 # 省略了--net somenetwork
docker stats # 查看cpu的状态

启动es的时候由于之前没有es镜像所以需要先去仓库中下载es,下载的时候可以发现非常卡,而且启动的时候是非常占用内存的(运行es的时候已经无法输入其他的命令了),怎么样解决这个问题呢?

测试是否可以访问成功:

可以增加内存的限制,修改配置文件,-e环境配置修改;

docker run -d --name elasticsearch -e ES_JAVA_OPTS="-Xms64m -Xmx521m" -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

使用Kibana连接es:

四. Portainer 可视化面板

有两种方式进行可视化的管理:1. portainer 提供一个后台面板后台面板给我们操作;2. Rancher(CI/CD再用)

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

五. 镜像原理之联合文件系统

镜像是什么?

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码,运行时(一个程序在运行或者在被执行的依赖)、库,环境变量和配置文件。所有的应用直接用docker打包跑起来,如何得到镜像呢?① 从远程仓库下载;② 从别人拷贝过来;③ 自己制作一个镜像DockerFile;

Docker镜像加载原理

Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统是UnionFS联合文件系统:Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下;

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 等等,平时我们安装进虚拟机的centos都是好几个G,为什么Docker这里才200M?对于精简的 OS,rootfs 可以很小,只需要包合最基本的命令,工具和程序库就可以了,因为底层直接用宿主机的kernel,自己只需要提供 rootfs 就可以了。由此可见对于不同的Linux发行版, bootfs 基本是一致的,rootfs会有差別,因此不同的发行版可以公用 bootfs。

docker分层理解

所有的Docker镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层,分层时有文件更新直接替换,基础镜像一样时直接拿过来复用,类似于windows的安全补丁;

六. Commit 镜像

docker commit # 提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[tag] # 与git命令类似

1. 使用交互模式启动tomcat:

docker run -it -p 8080:8080 tomcat # -p暴露8080端口

2. 进入当前正在运行的容器:

docker exec -it 容器id

 

3. 进入webapps目录可以发现没有任何文件,这是官方镜像的原因,官方的镜像默认webapps下是没有文件的,我们可以使用cp命令将webapps.dist目录下的所有文件拷贝到webapps目录下,相当于是我对原来的镜像做了一些操作,当前我拿到一个tomcat,在上面的所有操作上加了一层,这一层就是修改的东西,拷贝进去之后我就想使用它,那么就需要使用commit 命令提交为一个镜像后面就可以使用了:

容器数据卷 dockerfile docker 网络是docker的精髓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值