Docker运行MongoDB及Redis及ssh端口映射远程连接

本节内容简介

在本实验里我们将通过完成 MongoDB 和 Redis 两个容器来学习Dockerfile及Docker的运行机制。

本节中,我们需要依次完成下面几项任务:

  1. MongoDB 的安装及配置
  2. Redis 的安装及配置
  3. Dockerfile 的编写
  4. 从 Dockerfile 构建镜像

本次实验的需求是完成 Dockerfile,通过 Dockerfile 创建 MongoDB 或 Redis 应用。Dockerhub上已经提供了官方的 MongoDB 和 Redis 镜像,本实验仅仅用于学习Dockerfile及Docker机制。

MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。特点是高性能、易部署、易使用,存储数据非常方便。 -来自百度百科

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 -来自百度百科

一、实验准备

1、实验分析

在本实验中,我们除了安装所需的核心服务外,还安装一个ssh服务提供便捷的管理。

为了提高docker build速度,我们直接使用阿里云的Ubuntu源。因此要在Dockerfile开始位置增加下面一句命令:

RUN echo "deb http://mirrors.aliyuncs.com/ubuntu/ trusty main universe" > /etc/apt/sources.list

2、创建 Dockerfile 文件

首先,需要创建一个目录来存放 Dockerfile 文件,目录名称可以任意,在目录里创建Dockerfile文件:

cd /home/shiyanlou
mkdir shiyanloumongodb shiyanlouredis
touch shiyanloumongodb/Dockerfile shiyanlouredis/Dockerfile

使用vim/gedit编辑Dockerfile文件,根据我们的需求输入内容。

二、Dockerfile 基本框架

1、基本框架

按照上一节学习的内容,我们先完成Dockerfile基本框架。

依次输入下面的基本框架内容:

# Version 0.1

# 基础镜像
FROM ubuntu:latest # 维护者信息
MAINTAINER shiyanlou@shiyanlou.com # 镜像操作命令
RUN echo "deb http://mirrors.aliyuncs.com/ubuntu/ trusty main universe" > /etc/apt/sources.list
RUN apt-get update && apt-get install -yqq supervisor && apt-get clean # 容器启动命令
CMD ["supervisord"]

上面的Dockerfile创建了一个简单的镜像,并使用Supervisord启动服务。

2、安装SSH服务

首先安装所需要的软件包:

RUN apt-get install -yqq openssh-server openssh-client

创建运行目录:

RUN mkdir /var/run/sshd

设置root密码及允许root通过ssh登陆:

RUN echo 'root:shiyanlou' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config

三、完成 MongoDB Dockerfile

在上述基本的架构下,我们根据需求可以增加新的内容到Dockerfile中,完成 MongoDB Dockerfile。

进入到 shiyanloumongodb的目录编辑 Dockerfile:

cd /home/shiyanlou/shiyanloumongodb/
vim Dockerfile

1、安装最新的MongoDB

在Ubuntu最新版本下安装MongoDB非常简单,参考 MongoDB安装文档 (https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/)。有两种方法:

方法一是添加mongodb的源,执行 apt-get install mongodb-org 就可以安装下面的所有软件包:

  1. mongodb-org-server:mongod 服务和配置文件
  2. mongodb-org-mongos:mongos 服务
  3. mongodb-org-shell:mongo shell工具
  4. mongodb-org-tools:mongodump,mongoexport等工具

方法二是下载二进制包,然后解压出来就可以。

由于 MongoDB 的官网连接网速问题,我们使用第二种方案,并把最新的 MongoDB 的包放到阿里云上。

MongoDB 的下载链接如下:

http://labfile.oss-cn-hangzhou-internal.aliyuncs.com/courses/498/mongodb-linux-x86_64-ubuntu1404-3.2.3.tgz

我们完善 Dockerfile,使用 ADD 命令添加压缩包到镜像:

RUN mkdir -p /opt
ADD http://labfile.oss-cn-hangzhou-internal.aliyuncs.com/courses/498/mongodb-linux-x86_64-ubuntu1404-3.2.3.tgz /opt/mongodb.tar.gz
RUN cd /opt && tar zxvf mongodb.tar.gz && rm -rf mongodb.tar.gz
RUN mv /opt/mongodb-linux-x86_64-ubuntu1404-3.2. /opt/mongodb

创建 MongoDB 的数据存储目录:

RUN mkdir -p /data/db

将 MongoDB 的执行路径添加到环境变量里:

ENV PATH=/opt/mongodb/bin:$PATH

MongoDB 和 SSH 对外的端口:

EXPOSE  

2、编写Supervisord配置文件

添加Supervisord配置文件来启动mongodb和ssh,创建文件/home/shiyanlou/shiyanloumongodb/supervisord.conf,添加以下内容:

[supervisord]
nodaemon=true [program:mongodb]
command=/opt/mongodb/bin/mongod [program:ssh]
command=/usr/sbin/sshd -D

Dockerfile中增加向镜像内拷贝该文件的命令:

COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

3、完整的 Dockerfile

# Version 0.1

# 基础镜像
FROM ubuntu:latest # 维护者信息
MAINTAINER shiyanlou@shiyanlou.com # 镜像操作命令
RUN echo "deb http://mirrors.aliyuncs.com/ubuntu/ trusty main universe" > /etc/apt/sources.list
RUN apt-get -yqq update && apt-get install -yqq supervisor
RUN apt-get install -yqq openssh-server openssh-client RUN mkdir /var/run/sshd
RUN echo 'root:shiyanlou' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config RUN mkdir -p /opt
ADD http://labfile.oss-cn-hangzhou-internal.aliyuncs.com/courses/498/mongodb-linux-x86_64-ubuntu1404-3.2.3.tgz /opt/mongodb.tar.gz
RUN cd /opt && tar zxvf mongodb.tar.gz && rm -rf mongodb.tar.gz
RUN mv /opt/mongodb-linux-x86_64-ubuntu1404-3.2. /opt/mongodb RUN mkdir -p /data/db ENV PATH=/opt/mongodb/bin:$PATH COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf EXPOSE # 容器启动命令
CMD ["supervisord"]

四、完成 Redis Dockerfile

在上述基本的架构下,我们根据需求可以增加新的内容到Dockerfile中,完成 Redis Dockerfile。

进入到 shiyanlouredis 的目录编辑 Dockerfile:

cd /home/shiyanlou/shiyanlouredis/
vim Dockerfile

1、安装 Redis

由于 MongoDB 中我们已经学习了如何通过二进制压缩包安装最新版本MongoDB的过程,在此安装 Redis 我们直接使用 Ubuntu 源中默认的 Redis 版本。

安装方法非常简单:

RUN apt-get install redis-server

添加对外的端口号:

EXPOSE  

2、编写Supervisord配置文件

添加Supervisord配置文件来启动 redis-server 和 ssh,创建文件/home/shiyanlou/shiyanlouredis/supervisord.conf,添加以下内容:

[supervisord]
nodaemon=true [program:redis]
command=/usr/bin/redis-server [program:ssh]
command=/usr/sbin/sshd -D

Dockerfile中增加向镜像内拷贝该文件的命令:

COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

3、完整的 Dockerfile

# Version 0.1

# 基础镜像
FROM ubuntu:latest # 维护者信息
MAINTAINER shiyanlou@shiyanlou.com # 镜像操作命令
RUN echo "deb http://mirrors.aliyuncs.com/ubuntu/ trusty main universe" > /etc/apt/sources.list
RUN apt-get -yqq update && apt-get install -yqq supervisor redis-server
RUN apt-get install -yqq openssh-server openssh-client RUN mkdir /var/run/sshd
RUN echo 'root:shiyanlou' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf EXPOSE # 容器启动命令
CMD ["supervisord"]

五、从 Dockerfile 创建镜像

1、创建 MongoDB 镜像

进入到/home/shiyanlou/shiyanloumongodb/目录,执行创建命令。

docker build 执行创建,-t参数指定镜像名称:

docker build -t shiyanloumongodb:0.1 /home/shiyanlou/shiyanloumongodb/

docker images 查看创建的新镜像已经出现在了镜像列表中:

由该镜像创建新的容器mongodb:

上述docker ps命令的输出可以看到 MongoDB 的端口号已经被自动映射到了本地的 32768 端口,后续步骤我们对 MongoDB 是否启动进行测试。

打开 Xfce 终端中输入下面的命令连接 mongodb 容器中的服务:

2、创建 Redis 镜像

进入到/home/shiyanlou/shiyanlouredis/目录,执行创建命令。

docker build 执行创建,-t参数指定镜像名称:

docker images 查看创建的新镜像已经出现在了镜像列表中:

由该镜像创建新的容器redis:

上述docker ps命令的输出可以看到 redis 的端口号已经被自动映射到了本地的 32769 端口,SSH服务的端口号也映射到了 32770 端口。

打开 Xfce 终端中输入下面的命令连接 redis 容器中的 ssh 和 redis 服务:

总结

  1. MongoDB 的安装
  2. Redis 的安装
  3. Dockerfile 的编写
  4. 从 Dockerfile 构建镜像

请务必保证自己能够动手完成整个实验,只看文字很简单,真正操作的时候会遇到各种各样的问题,解决问题的过程才是收获的过程。

Docker运行MongoDB及Redis及ssh端口映射远程连接的更多相关文章

  1. Docker运行Mysql,Redis,SpringBoot项目

    Docker运行Mysql,Redis,SpringBoot项目 1.docker运行mysql 1.1拉取镜像 1.2启动容器 1.3进入容器 1.4开启mysql 1.5设置远程连接 1.6查看版 ...

  2. SSH 端口映射(一)

    转载:http://blog.csdn.net/a351945755/article/details/21785647,http://blog.csdn.net/gaoming655/article/ ...

  3. Docker学习笔记(二):端口映射与容器互联

    端口映射 使用docker run时,可以指定-P(大写)与-p(小写)参数映射端口. docker run -P -P(大写)会随机映射一个端口到容器的内部端口 -> [feifei@ffma ...

  4. redis在Linux下的远程连接

    1.redis在Linux下的远程连接: $ redis-cli -h host -p port -a password 如何连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass ...

  5. Docker 生成Node.js web app(含端口映射)

    1.新建目录src,并进入src目录 [xiejdm@localhost Documents]$ mkdir src [xiejdm@localhost Documents]$ cd src/ 2.创 ...

  6. linux下搭建redis内网端口映射工具-rinetd

    最近在工作中使用到了redis缓存,用来提某些业务场景的计算速度和某些情况下的操作频率限制,客户端工具使用了redisDesktopmanager来管理,在本机操作测试的时候,是没有问题的.但是将系统 ...

  7. WSL docker打通容器间通信和追加端口映射

    最近在docker中搭建一个服务,需要有多个容器通信.这里简单记录一下如何在容器间进行通信,同时说一下已经存在的容器如何追加端口映射. 增加网桥 容器间通信的目的是不适用IP而是使用容器名称进行网络通 ...

  8. ssh端口映射总结

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/boliang319/article/det ...

  9. ssh端口映射 解决服务器使用tensorboard的问题

    有时会在服务器上使用tensorboard,然而本地无法直接访问tensorboard结果网页.这时候使用端口映射即可.比如tensorboard上占用的是 6006 端口,也就是说结果在服务器的 l ...

随机推荐

  1. OpenCV入门笔记(一) Linux下的安装

    关于OpenCV,有中文的官方站点.里面翻译了官网的教程和API等.中文官方Tutorials见这里:[Tutorials] 一.Ubuntu下的安装 能够选择直接从库里安装,或者手动编译安装,请參考 ...

  2. HDU ACM 1073 Online Judge ->字符串水题

    分析:水题. #include<iostream> using namespace std; #define N 5050 char a[N],b[N],tmp[N]; void Read ...

  3. 【转载】ASP.NET应用程序与页面生命周期

    在本文中,我们将了解不同的事件,ASP.NET 应用程序的生命周期以浏览器向 Web 服务器(对于 ASP.NET 应用程序,通常为 IIS)发送请求为起点,直至将请求结果返回至浏览器结束.在这个过程 ...

  4. PCIE、UART、HDA、I2C、SMBUS、SPI、eSPI、USB、PS2、CAN、SDIO等数据传输协议简介

    M.2 wife一般支持USB.SDIO.PCIE三种传输 1.摄像头 (1)MIPI CSI (2)USB mipi摄像头模组IC简单便宜(小),应为一般把ADC解码在CPU端. MIPI摄像头简介 ...

  5. MyEclipse的html/JSP编辑器添加代码自动提示

    http://lusterfly.iteye.com/blog/1872627 在myeclipse 9以前的版本中,我们如果要为html编辑器添加自动的代码提示可以这样操作: windows--&g ...

  6. Python生成器定义

    通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素 ...

  7. NYOJ 116 士兵杀敌(二)【线段树 单点更新】

    题意:题意非常清楚: 策略:如题. 这道题就是简单的线段树应用,据说还能够用树状数组来做,等我学了之后在说吧. 代码: #include<stdio.h> #include<stri ...

  8. kubernetes管理之使用yq工具截取属性

    系列目录 前面我们讲解过使用go-template或者jsonpath格式(kubectl get 资源 --output go-tempalte(或jsonpath))来截取属性的值,并且我们比较了 ...

  9. Selenium学习(二)入门小例子

    1)打开百度页面 2)输入“hello” 3)点击百度一下按钮 from selenium import webdriver url = "http://" + "www ...

  10. 【上】安全HTTPS-全面具体解释对称加密,非对称加密,数字签名,数字证书和HTTPS

    一,对称加密 所谓对称加密.就是它们在编码时使用的密钥e和解码时一样d(e=d),我们就将其统称为密钥k. 对称加解密的步骤例如以下: 发送端和接收端首先要共享同样的密钥k(即通信前两方都须要知道相应 ...