docker 镜像、持久化技术

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就能运行看到网页的镜像。

  1. 运行一个Tomcat,并将静态资源移入webapp。

    #进入容器
    docker exec -it mycat /bin/bash
    #移动静态资源
    cp -r  webapps.dist/* webapps
    
  2. 提交我哦们的容器变成镜像。

    [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就好了。

创建一个数据库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这样容器内和容器外就都有数据了

我们测试删库跑路

在这里插入图片描述
没有数据库了 我们在执行以下刚才的指令。数据依然在。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值