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

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 : -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  -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。

在Windows上弄一个redis的docker容器的更多相关文章

  1. 最简单的启动并连接一个redis的docker容器

    启动一个容器: $ sudo docker run --name <name> -d redis 连接一个容器: sudo docker run -it --link <name&g ...

  2. Windows 上使用 cygwin 连接到 docker toolbox

    Windows 上使用 cygwin 连接到 docker toolbox Docker 确实给软件开发带来一些好处,在简化部署.统一开发.测试和生产环境上,有它独到的理念.Linux 上可直接安装 ...

  3. 在windows上部署使用redis出现的问题及解决方法

    在windows上部署使用Redis出现问题的解决方法  原文链接:https://www.cnblogs.com/herry52/p/5938902.html 下载Redis 在Redis的官网下载 ...

  4. 在windows上部署使用Redis出现问题的解决方法

    下载Redis 在Redis的官网下载页上有各种各样的版本,我这次是在windows上部署的,要去GitHub上下载.目前的是2.8.12版的,直接解压,在\bin\release 目录下有个压缩包, ...

  5. 【转载】在windows上部署使用Redis

    下载Redis 在Redis的官网下载页上有各种各样的版本,我这次是在windows上部署的,要去GitHub上下载.目前的是2.8.12版的,直接解压,在\bin\release 目录下有个压缩包, ...

  6. windows 上查看一个命令的退出码

    windows 上查看一个命令的退出码可以使用下面语句 echo %errorlevel% 例如:windows 上没有ls 命令,所以使用后没有成功,查看退出码为9009 ,非0 使用dir 列出目 ...

  7. 如何在windows上玩转redis的最新特性?

    想要了解redis的最新特性,可是windows下的可以安装的版本最高为3.2,想要验证redis的诸如stream特性的话,就无能为力了. 解决方法之一在windows上安装虚拟机,然后再虚拟机上安 ...

  8. 在windows上部署使用Redis(摘录)

    下载Redis 在Redis的官网下载页上有各种各样的版本,我这次是在windows上部署的,要去GitHub上下载.目前的是2.8.12版的,直接解压,在\bin\release 目录下有个压缩包, ...

  9. mac与windows上部署使用Redis

    windows下Redis安装 在Redis的官网下载页上有各种各样的版本,由于redis官网不支持windows,但是我们伟大的windows家族还是召唤了一群小伙伴开发了win版的redis.要在 ...

随机推荐

  1. 完善_IO, _IOR, _IOW, _IOWR 宏的用法与解析

    _IO, _IOR, _IOW, _IOWR 宏的用法与解析  原文地址:http://www.eefocus.com/ayayayaya/blog/12-03/245777_20cdd.html 作 ...

  2. elk架构图

    一.概述 笔者为了节约宝贵的服务器资源,把一些可拆分的服务合并在同一台主机.大家可以根据自己的实际业务环境自由拆分,延伸架构.

  3. Linux下通过关键字模糊查找搜索文件

    [背景] 想要在Linux下面,找之前不知道放到哪里的一个tomcat的文件. [折腾过程] 1.最后是参考: linux查找文件命令find – 发芽的石头 – 博客频道 – CSDN.NET 去搜 ...

  4. 《JAVA与模式》之解释器模式 (转载)

    一.引子 其实没有什么好的例子引入解释器模式,因为它描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中:在实际应用中,我们可能很少碰到去构造一个语言的文法的情况. 虽然你几乎用 ...

  5. Android studio 中创建AIDL Service

      1.概述  AIDL在android系统中的作用 AIDL,Android Interface definition language的缩写,它是一种android内部进程通信接口的描写叙述语言, ...

  6. HDU - 4511 小明系列故事――女友的考验(AC自己主动机+DP)

    Description 最终放寒假了,小明要和女朋友一起去看电影.这天,女朋友想给小明一个考验,在小明正准备出发的时候.女朋友告诉他.她在电影院等他,小明过来的路线必须满足给定的规则:  1.如果小明 ...

  7. webdriver实用指南python版本(1)-安装开发环境

    webdriver实用指南是本人编写的系列丛书,包括ruby版.python版和java版.在线版是免费的,之前是放在我的github上,但是很多同学总不记得地址,现在转到我的博客上,方便大家阅读. ...

  8. Java Nashorn--Part 6

    Nashorn 的 JavaScript 语言的扩展 正如我们所讨论的,Nashorn 是一个完全符合 ECMAScript 5.1 的实现.然而除此之外,Nashorn 还实现了很多 JavaScr ...

  9. 使用C#WebClient类访问(上传/下载/删除/列出文件目录)

    在使用WebClient类之前,必须先引用System.Net命名空间,文件下载.上传与删除的都是使用异步编程,也可以使用同步编程, 这里以异步编程为例: 1)文件下载: static void Ma ...

  10. 7.翻译:EF基础系列---EF中的实体类型

    原文地址:http://www.entityframeworktutorial.net/Types-of-Entities.aspx 在Entity Framework中有两种实体类型:一种是POCO ...