最近在学习Node.js相关知识,在环境搭建上耗费了不少功夫,故此把这个过程写下来同大家分享一下,今天我先来介绍一下Docker,有很多人都写过相关知识,还有一些教程,在此我只想写一下,我的学习过程中用到的一些知识和注意点。

  玩过虚拟机的同学可能对Docker学习和理解就会快一点,至于Docker是什么,我就引用其官网的一句话吧:Docker is an open platform for building, shipping and running distributed applications. It gives programmers, development teams and operations engineers the common toolbox they need to take advantage of the distributed and networked nature of modern applications.

  毕竟刚开始学习,对其理解可能并不完整,或者比较片面,在此我也不做过多解释,想进一步了解的可以到其官网维基此处去深入了解,下面我就开始介绍具体的使用方法:

  我的开发环境是Centos 7、64位,当然,用其他Linux发行版都是可以的,当然Windows也是可以的,但要注意,不管是什么操作系统,64位是必须的

  第一部分:安装Docker

  在其官方文档有详细的介绍,包括各种环境下的安装在这里我们采用简单办法:

 sudo yum install docker

  注意:在启动Docker之后启动firewalld,需要重启Docker。

  第二步部分:使用Docker(镜像和容器)

  至于Docker相关的其他概念(包括镜像、容器等)在此不做过多介绍,读者可到其官方文档去了解,我们现在直接使用镜像来新建一个测试容器:

sudo docker run -it --name ubuntu-test --rm ubuntu:latest /bin/bash

  此时我们就进入了一个终端(其中-i表示可对容器内的stdin交互,-t表示在新容器内制定一个终端,--rm表示结束使用后删除容器,--name为容器取名字),使用ls命令查看则发现此时正处于ubuntu环境下的根目录:

root@9ae27b8ba1aa:/# ls -al
total
drwxr-xr-x. root root Jul : .
drwxr-xr-x. root root Jul : ..
-rwxr-xr-x. root root Jul : .dockerenv
-rwxr-xr-x. root root Jul : .dockerinit
drwxr-xr-x. root root Jun : bin
drwxr-xr-x. root root Apr boot
drwxr-xr-x. root root Jul : dev
drwxr-xr-x. root root Jul : etc
drwxr-xr-x. root root Apr home
drwxr-xr-x. root root Jun : lib
drwxr-xr-x. root root Jun : lib64
drwxr-xr-x. root root Jun : media
drwxr-xr-x. root root Apr mnt
drwxr-xr-x. root root Jun : opt
dr-xr-xr-x. root root Jul : proc
drwx------. root root Jun : root
drwxr-xr-x. root root Jul : run
drwxr-xr-x. root root Jul : sbin
drwxr-xr-x. root root Jun : srv
dr-xr-xr-x. root root Jul : sys
drwxrwxrwt. root root Jun : tmp
drwxr-xr-x. root root Jul : usr
drwxr-xr-x. root root Jul : var

  我们可以查看此基础镜像的Dockerfile来了解此镜像的基础环境(Dockerfile相关知识可到此处学习)。

  我们同样可通过编写Dockerfile来定制镜像通过:

sudo docker build -t you/image_name .

  来生成镜像(-t参数表示为镜像打上标签tag即取名字,结尾的"."不可忽略,表示默认build当前目录下的Dockerfile),通过:

sudo docker images -a

  查看当前系统中所有镜像,通过:

sudo docker ps -a

  查看当前系统中的所有容器(包括使用中的或已停止的容器)。

  第三部分:容器连接

  新建容器ubuntu-test-1:

sudo docker run -it --rm --name ubuntu-test- ubuntu:latest /bin/bash

  进入容器后不要退出,新建命令行窗口输入以下命令建立容器ubuntu-test-2并连接ubuntu-test-1:

sudo docker run -it --rm --name ubuntu-test- --link ubuntu-test-:ubuntu-test-link ubuntu:latest /bin/bash

  此时可在容器ubuntu-test-2终端查看hosts文件配置:

root@0d94c356592b:/# cat /etc/hosts
172.17.0.122 0d94c356592b
127.0.0.1 localhost
:: localhost ip6-localhost ip6-loopback
fe00:: ip6-localnet
ff00:: ip6-mcastprefix
ff02:: ip6-allnodes
ff02:: ip6-allrouters
172.17.0.121 ubuntu-test-link 56fc1ce507f1 ubuntu-test-

  注意看最后一行,两容器已建立连接(此时2可以访问1,建立父/子容器关系,容器间的连接不需要向外部暴露任何端口)。

  第四部分:容器数据管理

  很明显,当我们使用这么一个工具时不免去思考一些数据存储上的问题,比如容器中的数据存储在哪?容器中的数据是否是持久存储?容器中的数据与本机数据的关系?容器是否能与宿主机或者其他容器共享数据?······

容器的数据管理我们要用到数据卷的概念, 我们还要了解Docker的联合文件系统,在使用docker run命令的时候可以使用-v参数来关在数据卷到容器中(在Dockerfile中可使用VOLUME属性实现同样功能),也可挂在本地目录到容器中,如命令:

sudo docker run -it --rm  -v /opt/myproject:/opt/yourproject --name ubuntu-test- --link ubuntu-test-:ubuntu-test-link ubuntu:latest /bin/bash

表示将本机/opt/myproject目录挂载到容器的/opt/yourproject(Dockerfile中无法实现此功能,很明显每个主机的/opt/myproject这个目录不是所有主机上都有的,而Dockerfile是分享给所有人用的)。

  挂载本地目录后的权限问题,如果不指定用户容器中默认使用root用户,其用用户ID和用户组号都是0,本地如果使用其他用户,那么宿主机和容器内访问同一目录的用户必须拥有相同的ID号和组号;另外还有就是SELinux的权限问题(可参考上一篇博客),同样要保证容器内和宿主机目录的身份标识(Identify)、角色(Role)以及类型(Type),尤其是类型要相同,通过以下方法查询这三个特性:

root@56fc1ce507f1:/# ls -ldZ
drwxr-xr-x. root root system_u:object_r:svirt_sandbox_file_t:s0:c739,c876 Jul : .

可通过:

# chcon -R unconfined_u:object_r:user_home_t:s0 

来修改其属性,只用这两个方面都保证了,容器中才可正常访问挂载的数据卷。可通过:

sudo docker logs ubuntu-test-

的方式查看当前容器中日志输出情况,容器启动失败会打出相应日志,以此来排错。

  除此之外还可使用数据卷容器来实现数据的持久存储,以及备份,迁移等,可参考Docker--从入门到实践.

  当然Docker的内容还有很多,如网络配置、底层实现、Dockerfile以及一些项目的使用,已有的资源也相当多了,想深入了解的可以到其官方文档和一些中文文档去学习,次数关于Docker的内容暂时介绍到这儿,在实际搭建环境的时候还有一些其他问题,留到下次继续分享吧!

参考:1.http://dockerpool.com/static/books/docker_practice/index.html

   2.https://docs.docker.com/

      3.https://www.docker.com/

  

Docker学习之——Node.js+MongoDB+Nginx环境搭建(一)的更多相关文章

  1. node.js之开发环境搭建

    一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这 ...

  2. 《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记

    近期想尝试一下英特尔的基于WebRTC协同通信开发套件,所以须要在本地搭建Node.js Web的开发測试环境. 这里讲的是CentOS 下的搭建方法.使用Windows的小伙伴请參考: <No ...

  3. 树莓派.安装系统+Node.js+MongoDB系列环境

    1.先去树莓派官网下载最新的ROM https://www.raspberrypi.org/downloads/raspbian/ 这里选的是: RASPBIAN JESSIE WITH DESKTO ...

  4. 如何用Docker建立一个Node.js的开发环境

      建立一个文件夹 用管理员身份打开powershell. 在文件夹下面运行npm init, 根据提示填入信息,以便产生一个package.json文件. 在文件中加入需要的dependencies ...

  5. Windows 7下Node.js Web开发环境搭建笔记

    Node.js是什么? 我们看看百科里怎么说的?JavaScript是一种运行在浏览器的脚本,它简单,轻巧,易于编辑,这种脚本通常用于浏览器的前端编程,但是一位开发者Ryan有一天发现这种前端式的脚本 ...

  6. node.js+ react + redux 环境搭建

    1.安装node.js 2. yarn init: 初始化,主要包含以下条目 name: 项目名 version: 版本号 description: 项目简要描述 entry point: 文件入口, ...

  7. node.js vue开发环境搭建

    开发工具安装 1.安装node.js 双击安装程序 node-v8.9.3-x64.msi,进行安装即可 2.设置taobao镜像 npm config set registry https://re ...

  8. Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(二)--node解析与环境搭建

    前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战.写教程一方面在自己写的过程中需要考虑更多的东西,另一方面希望能对node入门者有 ...

  9. 8 步搭建 Node.js + MongoDB 项目的自动化持续集成

    任何事情超过 90 秒就应该自动化,这是程序员的终极打开方式.Automating shapes smarter future. 这篇文章中,我们通过创建一个 Node.js + MongoDB 项目 ...

随机推荐

  1. 【Mac使用系列】常用软件及快捷键

    Mac下配置ss: 下载地址:https://github.com/shadowsocks/shadowsocks-iOS/releases 旧版本:https://blog.csdn.net/vqh ...

  2. Wordpress无法连接Mysql8的问题

    安装了mysql 8.0.11 之后本地可以登录,但是远程第三方工具无法连接,本地安装的Wordpress在初始化时也连接失败.防火墙已经放通的, 解决之道: 首先登陆到mysql命令行: mysql ...

  3. Redis server went away的解决方案

    Redis server went away出现的问题如下: 1.看redis服务是否启动,包括端口 2.看是否是服务器端的防火墙引起的,iptables和selinux 3.看是否是redis.co ...

  4. 菜鸟学SSH(十九)——提高用户体验之404处理

    只要做过WEB开发人对于“404”已经再熟悉不过了吧.当我们访问的资源不存在时,它就会跑出来跟你打招呼啦.但是默认情况下,404页面比较简陋,不是很友好.而且一般用户不知道404是个神马东东,还以为是 ...

  5. 【网络】TCP和UDP的区别以及TCP的三次握手四次释放

    一.两者区别 1.TCP面向连接的运输层协议,UDP无连接 2.TCP是可靠交付,UDP是尽最大努力交付 3.TCP面向字节流,UDP面向报文 4.TCP是点对点连接的,UDP一对一,一对多,多对多都 ...

  6. MXNET:多层感知机

    从零开始 前面了解了多层感知机的原理,我们来实现一个多层感知机. # -*- coding: utf-8 -*- from mxnet import init from mxnet import nd ...

  7. Future 模式简介

    简介 Future 模式是多线程开发中的一种常见设计模式,它的核心思想是异步调用. 比如我们在网上购物,付款后就会产生一个订单,之后你该干嘛干嘛,快递小哥会上门送货,而不必像在超市结账那样,付款后要等 ...

  8. 使用C#+Linq+SQL快速开发业务

    C#开发桌面程序的效率确实很高,今天就来总结下如何使用C#+Linq+SQL快速开发一个新的业务系统. Linq是微软官方的轻量级的ORM工具,使用它结合SQL可以快速的生成实体类,再通过Linq操作 ...

  9. js中如何把字符串转化为对象、数组示例代码

    很明显是一个对象,但如何把文本转为对象呢.使用eval();注意一定要加括号,否则会转换失败 把文本转化为对象 var test='{ colkey: "col", colsinf ...

  10. Java知多少(64)线程死锁

    需要避免的与多任务处理有关的特殊错误类型是死锁(deadlock).死锁发生在当两个线程对一对同步对象有循环依赖关系时.例如,假定一个线程进入了对象X的管程而另一个线程进入了对象Y的管程.如果X的线程 ...