zoukankan      html  css  js  c++  java
  • Docker系列之实战:3.安装MariaDB

    环境

    [root@centos181001 ~]# cat /etc/centos-release
    CentOS Linux release 7.6.1810 (Core)
    
    [root@centos181001 ~]# docker -v
    Docker version 18.09.1, build 4c52b90
    

    第一步:搜索和拉取官方MariaDB镜像

    https://hub.docker.com/_/mariadb

    基于ubuntu:trusty

    ### 搜索镜像
    docker search mariadb
    
    ### 拉取最新镜像
    docker pull mariadb
    
    ### 拉取指定版本镜像
    docker pull mariadb:5.5.63-trusty
    
    ### 查看拉取的镜像
    docker image ls
    docker image ls mariadb
    

    第二步:使用Image

    1.启动MariaDB

    docker run --rm --name some-mariadb -e MYSQL_ROOT_PASSWORD=xiaoliu -d mariadb:5.5.63-trusty
    
        MYSQL_ROOT_PASSWORD=my-secret-pw    指定MariaDB数据库的root密码
    
    
        #### 进入容器并操作数据库
        docker exec -it some-mariadb bash
        mysql -uroot -pxiaoliu
        show databases;
    

    2.启动MariaDB并放开3306端口,以允许外部连接

    docker run --rm --name some-mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=xiaoliu -d mariadb:5.5.63-trusty
    
        #### 1.宿主机安装MariaDB客户端连接容器内数据库实例
        yum install -y mariadbnetst
        mysql -h127.0.0.1 -uroot -pxiaoliu
    
        #### 2.宿主机安装mycli并连接mariadb
        #### Mycli是一个基于Python开发的MySQL命令行客户端工具,具有自动完成和语法突出显示功能。
        yum install -y epel-release 
        yum install -y python-pip python-devel
        pip install mycli
    
        mycli -h localhost -u root -p xiaoliu
        mycli -h 127.0.0.1 -u root -p xiaoliu
        mycli -h 11.11.11.61 -u root -p xiaoliu
    
        #### 3.也可以在外部,使用 Navicat 工具连接数据库,IP地址使用宿主机的IP地址
    

    3.使用自定义my.cnf

    配置文件路径:

    /etc/mysql/my.cnf

    /etc/mysql/conf.d/*.cnf

    #### 1.首先运行一个临时容器
    docker run --rm --name tmp-mariadb -e MYSQL_ROOT_PASSWORD=xiaoliu -d mariadb:5.5.63-trusty
    
    #### 2.从运行的容器里将配置文件copy到本地
    docker cp tmp-mariadb:/etc/mysql/my.cnf /home/mariadb/
    
    #### 3.删除这个临时容器
    docker rm -f tmp-mariadb
    
    #### 4.编辑配置文件后使用Dockerfile重新建立新镜像即可。
    $ docker run --name some-mariadb -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mariadb:tag
    

    4.没有cnf文件的配置

    #### 许多选项可以通过参数传递给服务器,而可以不自定义my.cnf
    #### 比如要更改所有表的默认编码和排序规则,可以使用以下命令启动容器
    docker run --name some-mariadb 
                -e MYSQL_ROOT_PASSWORD=my-secret-pw 
                -d mariadb:5.5.63-trusty 
                --character-set-server=utf8mb4 
                --collation-server=utf8mb4_unicode_ci
    
    
        #### 查看支持选项完整列表
        docker run -it --rm mariadb:5.5.63-trusty --verbose --help
    

    5.使用docker stack deploy or docker-compose

    #### 1.安装docker-compose
    curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" 
         -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    docker-compose --version
    
    #### 2.创建stack.yml文件
    cat <<EOF >stack.yml
    # Use root/example as user/password credentials
    version: '3.1'
    
    services 大专栏  Docker系列之实战:3.安装MariaDB:
    
      db:
        image: mariadb
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: example
    
      adminer:
        image: adminer
        restart: always
        ports:
          - 8080:8080
    EOF
    
    #### 3.执行以下任意命令
    docker stack deploy -c stack.yml mariadb
    docker-compose -f stack.yml up
    
    #### 4.等待他完全初始化并打开浏览器测试
    http://11.11.11.61:8080
    

    6.通过Docker查看日志

    docker logs some-mariadb
    

    7.支持的变量

    启动mariadb映像时,可以通过在docker run命令行上传递一个或多个环境变量来调整MariaDB实例的配置。请注意,如果使用已包含数据库的数据目录启动容器,则以下任何变量都不会产生任何影响:任何预先存在的数据库在容器启动时始终保持不变。

    MYSQL_ROOT_PASSWORD 必需,用来指定MariaDB ``root``密码
    MYSQL_DATABASE      可选,允许您指定要在映像启动时创建的数据库的名称。
                        如果提供了用户/密码(见下文),则该用户将被授予对该数据库的超级用户访问权限(对应于GRANT ALL)。
    MYSQL_USER, MYSQL_PASSWORD  可选,可以结合使用来创建新用户并设置该用户的密码。
                                此用户将被授予MYSQL_DATABASE变量指定的数据库的超级用户权限(参见上文)。
                                这两个变量都是创建用户所必需的。
    
    MYSQL_ALLOW_EMPTY_PASSWORD  可选,设置为yes允许以root用户的空密码启动容器。
    MYSQL_RANDOM_ROOT_PASSWORD  可选,设置yes为为root用户生成随机初始密码(使用pwgen)。
                                生成的root密码将打印到stdout(GENERATED ROOT PASSWORD: .....)。
    

    8.Docker的秘密

    作为通过环境变量传递敏感信息的替代方法,_FILE可以将其附加到先前列出的环境变量,从而使初始化脚本从容器中存在的文件加载这些变量的值。

    docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mariadb:tag
    
        支持以下选项:
        MYSQL_ROOT_PASSWORD
        MYSQL_ROOT_HOST
        MYSQL_DATABASE
        MYSQL_USER
        MYSQL_PASSWORD.
    

    9.数据持久化

    #### 1.在主机系统(容器外部)上创建一个数据目录,并将其挂载到容器内可见的目录中。
    mkdir /home/data
    
    #### 2.启动容器
    docker run --name some-mariadb -v /home/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xiaoliu -d mariadb
    
    #### 3.创建测试数据
    create database test;
    use test; 
    create table linux(username varchar(15) not null,password varchar(15) not null);
    insert into linux values ('XiaoMing', 'xiaoliu');
    insert into linux values ('XiaoHong', '12346'), ('HongHong', '12346');
    commit;
    
    #### 4.停止容器后再启动容器或者删除容器后再使用以下命令启动一个新的容器,之前的数据都会存在。
    docker run --name some-mariadb -v /home/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xiaoliu -d mariadb
    

    10.备份数据库

    docker exec some-mariadb sh 
                -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' 
                > /some/path/on/your/host/all-databases.sql
    

    像下边这样启动另外有一个容器,以便可以让另外的容器可以连接到MySQL容器(未完)

    docker run --name some-app --link some-mariadb:mysql -d application-that-uses-mysql
    
    测试:
    docker pull centos
    docker run --rm -it --link some-mariadb:mysql centos bash
    yum install -y mariadb
    
  • 相关阅读:
    著名的二分查找的BUG
    C/C++ static用法
    浅谈C++虚函数
    git备忘(长久更新)
    【经典问题】最大子串和
    水波纹效果
    博客迁址 xpeng.scorpionstudio.com
    终于,我们的新产品Fotor Slideshow Maker上线了!!
    分享一款浏览器扩展--美图搜索-图片搜索工具
    分享网页微信防撤回插件
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12041310.html
Copyright © 2011-2022 走看看