docker安装es
这里记录一下docker启动es时候因为es要占用大量的内存,所以我们需要接一些参数:Xmx
,Xms
,来限制es的内存消耗。
# 将es的运行内存变小!
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms64m -Xmx512m" elasticsearch:7.7.1
我们用宝塔进行监控。
这个是限制es以后的参数。
这个是不加环境限制的:
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.7.1
这时候服务器基本不能动了。
docker镜像与分层
我们在下载docker的镜像的时候有很多层。
# 查看构件过程
docker history imageId
# 查看镜像的信息
docker inspect imageId
记得之前我们看过pull进项的时候,有exist的层。这表示这一层之前的应用已经用到了,只要复用这些部分就可以实现构成我们的应用了。
**目的:**这里可以看出docker的轻量级,所有的层级只需要下载一次,不停复用。让docker更加的轻量级。
我们看看一个镜像的构件过程:
我们试试通过修改提交一个镜像,查看构件过程。这个过程pull下来的时候是对应的。
当我们在这个镜像上进行修改以后,这个容器只要一提交就是一个新的镜像。
我们做个实现:
已知我们下载的Tomcat没有静态资源,所有的静态资源都在webapp.dist里面。我们自己实现一个可以直接通过run就能运行看到网页的镜像。
-
运行一个Tomcat,并将静态资源移入webapp。
#进入容器 docker exec -it mycat /bin/bash #移动静态资源 cp -r webapps.dist/* webapps
-
提交我哦们的容器变成镜像。
[root@ubw ~]# docker commit --help # docker commit 选项 + 容器Id tag标签 Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] # 创建镜像 Create a new image from a container's changes Options: -a, --author string Author (e.g., "John Hannibal Smith <hannibal@a-team.com>") -c, --change list Apply Dockerfile instruction to the created image -m, --message string Commit message -p, --pause Pause container during commit (default true) ----------------------------------------------------------------------- docker commit -a ubw -m "initical" 782e092f9f07 mytomncat1.0
这个就是我们生成的自己的Tomcat
运行一下看,是不是能直接看到网页。
可以直接看到。
这时候我们对比一下Tomcat9.0和我们自己的Tomcat的层级目录。
多的这一层就是我们之前操作的那一层。这也就说明docker的镜像确实是分层操作的。
docker持久化volume
docker的持久化其实就是通过挂在卷实现的。什么是挂在什么又是卷呢?
一句话说明,就是通过一种方式将容器内部和宿主机进行数据关联的方式。
这样可以把容器内部的一个文件映射到容器外,这样容器就算消失了,数据也不会消失。这就是通过卷进行容器的持久化。
我们通过安装MySQL练习挂卷持久化。
先下载MySQL
# 下载MySQL5.7
docker pull mysql:5.7
MySQL的启动指令:
# docker安装mysql 必要步骤: -e MYSQL_ROOT_PASSWORD=my-secret-p @ mysql的初始密码!
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
# mysql核心1 配置
docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
# mysql核心2 数据存储!
docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
小结:MySQL配置要配置 1。密码;2.-v的数据卷挂载(conf.d和mysql)。
我们的指令:
docker run -d -p 3310:3306 -v /home/mysql/config:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysqlqd mysql:5.7
我这里遇到了2005连接错误,后来发现是-p不写并不能走默认接口。
遇到了守护线程的问问题:
docker: Error response from daemon: driver failed programming external connectivity on endpoint mysqlq12 (9c0bbf32230c77904f17695c5cad355030d71e0f0e7a0537e1b919b127d9d4ef): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name.
这里是因为改完镜像没有重启。systemctl restart docker就好了。
创建一个数据库
这样容器内和容器外就都有数据了
我们测试删库跑路
没有数据库了 我们在执行以下刚才的指令。数据依然在。