zoukankan      html  css  js  c++  java
  • ubuntu docker 搭建 mongodb,开启授权访问 redis,mysql mssql 备份还原

    命令安装docker

    如果您想从Ubuntu存储库安装docker版本,则可以运行下面的apt命令。

    sudo apt install docker.io
    等到安装完成后,您可以启动Docker并使用systemctl命令将其添加到引导时间:

    systemctl start docker
    systemctl enable docker
    您可能还想检查码头版本:

    docker --version

    命令安装Mongo

    首先下载mongodb镜像:

    docker pull mongo
    mongodb通常占用27017端口,最简单的启动方式如下:

    docker run --name mongodb -p 27017:27017 -d mongo:latest
    不过通常情况下,我们不会直接这样启动。我们需要绑定数据卷,在容器内外共享数据库数据。如果需要备份的话,还需要共享备份数据。

    首先在宿主环境中创建两个目录,用于共享容器数据

    /docker/mongo/data/ #数据库数据目录
    /docker/mongo/dump/ #备份数据目录
    创建好挂载目录就可以启动了,挂载数据卷,并且开启授权

    docker run --name mongodb -p 27017:27017 --restart=always -v /root/docker/mongo/data:/data/db -v /root/docker/mongo/dump:/var/dump -d mongo:latest --auth
    --auth的作用是开启授权访问。默认不开启,即不需要用户名密码就可以连接数据库,这样会有安全风险,切记要开启。

    开启授权访问之后,还需要为admin数据库创建用户和密码。

    首先进入mongodb容器,连接服务器:

    docker exec -it mongodb  /bin/bash
     
    mongo  #不需要用户名

    切换到admin数据库,并创建用户:

    use admin
     
    db.createUser({
        user:"root",
        pwd:"root",
        roles:[{
            role:'root',
            db:'admin'
        }]
    })

    创建用户成功,退出连接并使用该用户连接:

    mongo 127.0.0.1/admin -u root -p

    成功进入,设置就完成啦。

    最后,在未开启授权验证时连接mongodb的url是:

    mongodb://127.0.0.1:27017
    开启之后的url是:

    mongodb://user:pass@127.0.0.1:27017/dbname

    备份和还原

    一、从宿主连接到MongoDB容器
    docker exec -it mongodb /bin/bash
     
    二、使用mongodump命令进行数据库备份 ,容器中执行
    mongodump -h 127.0.0.1 --port 27017 --authenticationDatabase=admin  -u=root -p=root -d NoSQLBoosterSamples -o /dump
     
    参数    作用    
    -h    host
    --port    端口
    -d    指定数据库
    -o    指定备份到哪个目录,不指定应该是直接备份到根目录的/dump文件夹
    -u    用户名
    -p    密码
    --authenticationDatabase 指定验证的用户的数据库,否者会提示错误Failed: error connecting to db server: server returned error on SASL authentication step: Authentication failed.
    系统备份成功会在/home/dump目录下自动生成一个数据库名的文件夹/NoSQLBoosterSamples,里面是全部Collection备份的bson文件。
     
    -三、打包备份文件夹 , 还是容器中执行
    tar -zcvf NoSQLBoosterSamples.tar.gz /dump/NoSQLBoosterSamples
     
    --四、从容器复制到宿主
    Ctrl+D 或输入 excit 切回到宿主机
    docker cp mongodb:/dump/NoSQLBoosterSamples.tar.gz /root/docker/mongo/dump
     
    --解压 bson解压到 /root/dump/NoSQLBoosterSamples (/home/dump/NoSQLBoosterSamples/)
    tar -zxvf /root/docker/mongo/dump/NoSQLBoosterSamples.tar.gz   
     
    五、恢复
    docker exec -it mongodb /bin/bash
    mongorestore -h 127.0.0.1:27017 -d test /dump/NoSQLBoosterSamples  --drop --authenticationDatabase=admin  -u=root -p=root

    Redis

    1.sudo docker pull redis
     
    2.sudo docker run --restart=always   -v /root/docker/redis/data:/data  --name redis -p 6379:6379 -d redis --appendonly yes
    --或者制定配置文件
    sudo docker run --restart=always  -v /root/docker/redis/redis.config:/usr/etc/redis/redis.config -v /root/docker/redis/data:/data  --name redis -p 6379:6379 -d redis
    --其中配置文件参考 https://raw.githubusercontent.com/antirez/redis/4.0/redis.conf
    3.客服端:docker exec -it redis redis-cli

    Mssql :

    1. sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
    2. sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=xxx' --restart=always -v /root/docker/mssql/data:/var/opt/mssql/data   -p 1433:1433 --name mssql -d  mcr.microsoft.com/mssql/server:2017-latest

    mssql备份和还原, 比如备份test 还原到demo

    1. apt install mssql-tools //安装客服端
    2 备份test到docker:
    sudo docker exec -it mssql /opt/mssql-tools/bin/sqlcmd  -S localhost -U SA -P 'xxx'  -Q "BACKUP DATABASE [test] TO DISK = N'/var/opt/mssql/backup/test20190708.bak' WITH NOFORMAT, NOINIT, NAME = 'test-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
    3拷贝文件到主机:
    sudo docker cp mssql:/var/opt/mssql/backup/test20190708.bak  /root/docker/mssql/bak/test20190708.bak
    4.还原成demo数据库(数据库文件在decoker里面)
    sudo docker exec -it mssql /opt/mssql-tools/bin/sqlcmd  -S localhost -U SA -P 'xxx'   -Q 'RESTORE DATABASE demo FROM DISK = "/var/opt/mssql/backup/test20190708.bak" WITH MOVE "test" TO "/var/opt/mssql/data/demo.mdf", MOVE "test_log" TO "/var/opt/mssql/data/demo_log.ldf" '
     
    --参考https://docs.microsoft.com/en-us/sql/linux/tutorial-restore-backup-in-sql-server-container?view=sql-server-2017

    Mysql

    1. sudo docker pull mysql
    2. sudo  docker run --name mysql --restart=always -v /root/docker/mysql/conf:/etc/mysql/conf.d -v /root/docker/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql  
    3.
    sudo  docker exec -it mysql mysql -uroot -p123456
    ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则 
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; #更新一下用户的密码 
    FLUSH PRIVILEGES; 

    mysql的备份和还原, 比如 把test备份还原到demo:

    --备份Docker MySQL
    docker exec -it mysql mysqldump -uroot -proot test > /root/docker/mysql/dump/test.sql
    --从sql文件恢复到Docker MySQL
    docker exec -i  mysql mysql  -uroot -proot demo < /root/docker/mysql/dump/test.sql

    但是这样的备份会有警告信息:mysqldump: [Warning] Using a password on the command line interface can be insecure. 所以目前还原的时候是手动删除这一行的

     

    下面是修改docker存储路径的命令:

    # 查看docker详细信息
    docker info
    #  提供docker整体磁盘使用率的概况,包括镜像、容器和(本地)volume。
    docker system df
    #这个命令会删除当前没有被使用的一切项目,它按照一种正确的序列进行清理,所以会达到最大化的输出结果。首先删除没有被使用的容器,然后是volume和网络,最后是挂起的镜像。
    docker system prune 
    # 查看容器日志
    docker logs [ContainerId]
    # 进入容器
    docker exec -it  [ContainerId] /bin/bash  

    下面是查看docker信息相关的命令:

    # 查看docker详细信息
    docker info
    # 提供docker整体磁盘使用率的概况,包括镜像、容器和(本地)volume。
    docker system df
    #这个命令会删除当前没有被使用的一切项目,它按照一种正确的序列进行清理,所以会达到最大化的输出结果。首先删除没有被使用的容器,然后是volume和网络,最后是挂起的镜像。
    docker system prune 
    # 查看容器日志
    docker logs [ContainerId]
    # 进入容器
    docker exec -it [ContainerId] /bin/bash 

    Docker run命令参数

    docker run应该是我们日常使用docker中最常用,也最重要的命令。
    命令格式如下:

    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]


    OPTIONS
    现在的docker版本(17.09.1-ce)中run有很多可以选择的参数,用到再记录,以下是网上看到针对1.12的版本。

    加粗的地方表示比较常用

    -d, --detach=false 指定容器运行于前台还是后台,默认为false
    -i, --interactive=false 打开STDIN,用于控制台交互
    -t, --tty=false 分配tty设备,该可以支持终端登录,默认为false
    -u, --user="" 指定容器的用户
    -a, --attach=[] 登录容器(必须是以docker run -d启动的容器)
    -w, --workdir="" 指定容器的工作目录
    -c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用
    -e, --env=[] 指定环境变量,容器中可以使用该环境变量
    -m, --memory="" 指定容器的内存上限
    -P, --publish-all=false 指定容器暴露的端口
    -p, --publish=[] 指定容器暴露的端口
    -h, --hostname="" 指定容器的主机名
    -v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录
    --volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录
    --cap-add=[] 添加权限
    --cap-drop=[] 删除权限
    --cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
    --cpuset="" 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
    --device=[] 添加主机设备给容器,相当于设备直通
    --dns=[] 指定容器的dns服务器
    --dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
    --entrypoint="" 覆盖image的入口点
    --env-file=[] 指定环境变量文件,文件格式为每行一个环境变量
    --expose=[] 指定容器暴露的端口,即修改镜像的暴露端口
    --link=[] 指定容器间的关联,使用其他容器的IP、env等信息
    --lxc-conf=[] 指定容器的配置文件,只有在指定–exec-driver=lxc时使用
    --name="" 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
    --net="bridge" 容器网络设置:

    bridge 使用docker daemon指定的网桥
    host //容器使用主机的网络
    container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
    none 容器使用自己的网络(类似--net=bridge),但是不进行配置

    --privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities
    --restart="no" 指定容器停止后的重启策略:

    no:容器退出时不重启 on-failure:容器故障退出(返回值非零)时重启 always:容器退出时总是重启

    --rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)

    --sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

    常用场景

    后台运行一个容器用于开发

    docker run -itd --name dev -v ~/data:/root/data -p 1080:80 <image> /bin/bash

    然后通过以下命令连接:

    docker exec -it dev /bin/bash

    让容器自动运行命令并在命令停止后自动重启后执行

    docker run -d --restart=always <image> ping docker.com

    后台运行数据库容器并使用服务容器进行连接

    数据库容器,本机数据库目录将挂载到容器中:

    docker run -d --name=server-db --restart=always -v /server/mysql-data:/mysql-data <image> /usr/bin/mysql_safe -d

    服务容器,在服务容器中将可以直接通过server-db来访问数据库容器,并开放80端口给公网

    docker run -d --name=server-http --restart=always --link=server-db -p 8080:80 <image> /usr/bin/httpd --DFOREGROUND

    让容器运行一个命令后自动删除

    docker run --rm python:2.7-slim python --version

    交互式运行python之后,当退出python交互时容器自动删除

    docker run -it --rm python:2.7-slim python

  • 相关阅读:
    泛微云桥e-Bridge 目录遍历,任意文件读取
    (CVE-2020-8209)XenMobile-控制台存在任意文件读取漏洞
    selenium 使用初
    将HTML文件转换为MD文件
    Python对word文档进行操作
    使用java安装jar包出错,提示不是有效的JDK java主目录
    Windows server 2012安装VM tools异常解决办法
    ifconfig 命令,改变主机名,改DNS hosts、关闭selinux firewalld netfilter 、防火墙iptables规则
    iostat iotop 查看硬盘的读写、 free 查看内存的命令 、netstat 命令查看网络、tcpdump 命令
    使用w uptime vmstat top sar nload 等命令查看系统负载
  • 原文地址:https://www.cnblogs.com/majiang/p/11157748.html
Copyright © 2011-2022 走看看