zoukankan      html  css  js  c++  java
  • 在Windows上弄一个redis的docker容器

    [本文出自天外归云的博客园]

    Docker核心概念简介

    镜像是一个面向docker引擎的只读模板,包含了文件系统。

    镜像是创建容器的基础,容器类似于一个沙箱,用来运行和隔离应用。

    容器是从镜像创建的应用运行实例,可以启动、开始、停止、删除,容器之间是相互隔离的。

    通过boot2docker创建与启动docker环境

    下载最新的docker-installer.exe:https://github.com/boot2docker/windows-installer/releases/latest

    安装过程中所有选项全选,安装后会自动重启机器。

    重启后点击桌面上的“Boot2Docker Start”启动docker,同时可以打开VirtualBox会看到出现了一个叫boot2docker的虚拟机在运行!这东西是用来在Windows机器上运行docker用的一个虚拟机外壳。

    启动docker后可以在这个命令行窗口内看到docker容器的ip地址。

    Docker环境中下载与启动redis容器

    1. 搜索redis镜像:

    docker search redis

    2. 下载redis镜像(不要直接docker pull redis,因为默认的tag是latest,如果没有这个tag下载就会失败,直接选择tag为3.2的redis镜像进行下载):

    docker pull redis:3.2

    3. 列出已有镜像:

    docker images

    4. 删除指定id的镜像(如果删不了就关闭虚拟机电源然后重新启动docker再删):

    docker rmi IMAGE ID

    5. 运行redis容器(指定端口号、dockerfile、在容器内执行redis-server命令启动redis server):

    docker run -p 6379:6379 -d redis:3.2 redis-server

    6. 查看所有容器启动情况:

    docker ps -a

    我们可以看到redis容器已经启动!现在就可以用这个docker的ip地址作为redis server所在的ip地址对redis进行访问了。

    7. 根据redis容器的id我们还可以查看redis的log信息:

    docker logs IMAGE ID

    如下:

    8. 如果有容器已经退出,在docker ps -a下看到了已经停止的容器可以根据其IMAGE ID进行删除:

    docker rm IMAGE ID

     也可以删除所有已经停止的容器:

    docker rm $(docker ps -a -q)

    通过docker-machine创建与启动docker环境

    通过docker-machine创建docker是第二种创建docker的方法。

    首先下载docker-machine并把docker-machine.exe所在的路径加入环境变量中。

    打开cmd,输入docker-machine env default会提示你没有default环境让你创建一个docker环境,我创建一个叫docker的docker环境:

    docker-machine create --driver virtualbox docker

    然后执行命令:

    docker-machine ls

    就可以看到创建的docker环境了。执行命令查看名为docker的docker环境的环境信息:

    docker-machine env docker

    结果如下:

    至此就知道了docker环境的ip,这样我们就可以通过ssh软件访问创建的docker机器了。这里我用的是SecureCRT这个软件,创建一个session,host填写的就是上面的ip:192.168.99.100,然后用户名是docker,密码是tcuser这些都是默认的,创建好session后双击访问,界面如下,然后执行我们之前的命令来下载并启动redis容器:

    用完了以后执行关机指令:

    docker-machine stop docker

    再启动名为docker的docker环境:

    docker-machine start docker

    查看docker环境ip:

    docker-machine ip docker

    持续观察容器最新10行log:

    docker logs IMAGE ID --tail 10 -f

    避免每次打开SecureCRT都执行相同的命令启动redis可以把启动的过程写成python脚本:

    # coding:utf-8
    import paramiko
    
    server_ip = '192.168.99.100'
    server_port = 22
    username = 'docker'
    password = 'tcuser'
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(server_ip,server_port,username,password)
    command1 = 'docker rm $(docker ps -a -q)'
    command2 = 'docker run -p 6379:6379 -d redis:3.2 redis-server'
    stdin,stdout,stderr = ssh.exec_command(command1)
    outmsg,errmsg = stdout.read(),stderr.read()
    if not errmsg:
        stdin,stdout,stderr = ssh.exec_command(command2)
        outmsg = stdout.read(),stderr.read()
        print(outmsg)
    ssh.close()

    执行python脚本来完成redis容器启动的过程。 

    PS:不要把redis容器启动的过程写成shell脚本保存到docker环境中,因为通过docker-machine重启docker环境会让保存在docker环境中的脚本文件丢失。

    Docker带来了什么好处?

    之前我的flask应用所依赖的redis server安装在了我的mac本上,所以我每天得带着mac本上班。

    在Docker里部署了redis server以后,从明天开始就不用带mac本上班啦。

    这就是docker给我带来的好处。(ง •̀_•́)ง

    而且docker是轻量级的,安装使用都很快,相对于在一个linux虚拟机中安装redis server来说占用本机的资源是少很多的。所以我在本机上不用虚拟机,而用docker。虽然docker在Windows上运行也依赖于一个虚拟机外壳,但是这个外壳是非常小的,几乎可以忽略,就是我们刚才看到的那个boot2docker虚拟机外壳。

    疑难问题解决

    运行docker images命令如果出现如下错误:

    • An error occurred trying to connect: Post https://192.168.59.103:2376/v1.19/containers/create: x509: certificate is valid for 127.0.0.1, 10.0.2.15, not 192.168.59.103

    之前的docker的ip是59.104,关闭电源重新打开boot2docker后发现docker的ip变成了59.103。

    一个不得已的办法是删除掉本地的虚拟机外壳程序后重新运行boot2docker start程序,这样之前下载的镜像就都没了,还得重新下载。

    Github上提供了一种解决方法,试了以后发现不管用。唯一一个碰运气的方法就是多关闭几次虚拟机电源让docker的ip再分配回之前的ip……反正不是192.168.59.104就是192.168.59.103。但这得看运气!没准一直ip都不变,所以这个也不是好办法。

    目前看,唯一的好办法就是不使用boot2docker的启动程序启动docker环境,而是使用docker-machine来启动docker环境,默认分配的ip是192.168.99.100。

  • 相关阅读:
    WCF中NetTCp配置
    生产者消费者模式
    MVC 引擎优化
    Wcf
    MongoDB运用
    Sock基础
    WebService
    线程
    委托
    特性
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/7989656.html
Copyright © 2011-2022 走看看