docker 使用mariadb

安装mariadb

查找hub仓库的mariadb镜像

 docker  search  mariadb

NAME                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mariadb                                MariaDB is a community-developed fork of MyS…   3374                [OK]                
linuxserver/mariadb                    A Mariadb container, brought to you by Linux…   124                                     

拉一个最新的mariadb镜像

docker  pull  mariadb

latest: Pulling from library/mariadb
5bed26d33875: Pull complete 
f11b29a9c730: Pull complete 

docker images

 REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mariadb             latest              37f5f0a258bf        3 weeks ago         356MB
centos              7                   5e35e350aded        5 months ago        203MB
django              latest              eb40dcf64078        3 years ago         436MB

数据持久化的方法

docker数据卷容器

创建一个名为myblogdb数据卷(volume Manage volumes)

docker  volume  create   myblogdb

查看myblogdb数据卷信息

docker  volume  inspect  myblogdb

[
    {
        "CreatedAt": "2020-04-17T11:47:53+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/myblogdb/_data",
        "Name": "myblogdb",
        "Options": {},
        "Scope": "local"
    }
]

查看所有数据卷信息

[root@asimov ~]# docker  volume ls
DRIVER              VOLUME NAME
local               myblogdb

删除数据卷

docker volume rm 数据卷名

数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在容器被删除后自动删除 数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的 数据卷。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 docker rm -v 这个命令

清除无主的数据卷

docker volume prune

WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
myblogdb

启动一个挂载数据卷的容器

[root@asimov ~]# docker  run  -d -P  -e MYSQL_ROOT_PASSWORD=123 --mount  source=myblog,target=/opt   --name mysql_volume  mariadb

--mount : 挂载目录(或-v:目录不存在时会自动创建目录)
source=:创建的数据卷名(myblog),或本地目录
target=:挂载到容器中的目录

查看mysql_volume容器

docker  inspect   mysql_volume

"Mounts": [
            {
                "Type": "volume",
                "Name": "myblog",   #数据卷名
                "Source": "/var/lib/docker/volumes/myblog/_data",   # 本地目录
                "Destination": "/opt", # 挂载到容器中的目录
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ],

删除容器同时移除数据卷

[root@asimov ~]# docker rm -v  mysql_volume
mysql_volume

挂载一个本地主机文件作为数据卷

创建mariadb容器并持久化到本地

[root@asimov data]# pwd
/root/docker_data/mysql/data
[root@asimov data]# docker  run  -d -p 3306:3306  -v /root/docker_data/mysql/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD="asimov" --name mysqlblog  mariadb
7b962746a9407faefe40f0f3744c81a0d3b1e301adcc69f561e41a33785d4329


-d:后台运行
-p 3306:3306 :将内部的3306端口映射到外部的3306
-v /root/docker_data/mysql/data:/var/lib/mysql :将内部数据库挂载到外部
-e MYSQL_ROOT_PASSWORD=yourpasswd :设置root用户密码
--name mysqlblog :容器名
mariadb :镜像

指定mysql的配置文件

通过-v将本地的配置文件映射到docker内部的mysql(/etc/mysql/my.cnf)

查看容器

[root@asimov data]# docker  ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
7b962746a940        mariadb             "docker-entrypoint.s…"   16 minutes ago      Up 16 minutes       0.0.0.0:3306->3306/tcp   mysqlblog
61c1a2f92913        centos:7            "/bin/bash"              46 hours ago        Up 28 hours         0.0.0.0:3333->8080/tcp   blog

进入容器

[root@asimov ~]# docker exec -it mysqlblog /bin/bash
进入数据库

root@7b962746a940:~# mysql  -uroot  -p  passwd
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 10.4.12-MariaDB-1:10.4.12+maria~bionic mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

创建数据库

MariaDB [(none)]> show  databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.002 sec)

MariaDB [(none)]> create  database  asimov  default  charset  'utf8';
Query OK, 1 row affected (0.000 sec)

退出容器,查看本地挂载的目录

[root@asimov data]# pwd
/root/docker_data/mysql/data
[root@asimov data]# ls
aria_log.00000001  aria_log_control  asimov  ib_buffer_pool  ibdata1  ib_logfile0  ib_logfile1  ibtmp1  multi-master.info  mysql  performance_schema
[root@asimov data]# cd  asimov/
[root@asimov asimov]# ls
db.opt

docker run 挂载卷_docker卷和挂载目录有什么区别?

卷 (Docker Volume) 是受控存储,是由 Docker 引擎进行管理维护的。因此使用卷,你可以不必处理 uid、SELinux 等各种权限问题,Docker 引擎在建立卷时会自动添加安全规则,以及根据挂载点调整权限。并且可以统一列表、添加、删除。另外,除了本地卷外,还支持网络卷、分布式卷。

而挂载目录而挂载目录那就没人管了,属于用户自行维护。你就必须手动处理所有权限问题。特别是在 CentOS 上,很多人碰到 Permission Denied,就是因为没有使用卷,而是挂载目录,而且还对 SELinux 安全权限一无所知导致。

这个设置可以在运行时覆盖。通过 docker run 的 -v 参数或者 docker-compose.yml 的 volumes 指定。使用命名卷的好处是可以复用,其它容器可以通过这个命名数据卷的名字来指定挂载,共享其内容(不过要注意并发访问的竞争问题)。

比如,Dockerfile 中说 VOLUME /data,那么如果直接 docker run,其 /data 就会被挂载为匿名卷,向 /data 写入的操作不会写入到容器存储层,而是写入到了匿名卷中。但是如果运行时 docker run -v mydata:/data,这就覆盖了 /data 的挂载设置,要求将 /data 挂载到名为 mydata 的命名卷中。所以说 Dockerfile 中的 VOLUME 实际上是一层保险,确保镜像运行可以更好的遵循最佳实践,不向容器存储层内进行写入操作。

数据卷默认可能会保存于 /var/lib/docker/volumes,不过一般不需要、也不应该访问这个位置。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值