最近在学习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. (转)Fur Shader

    转自:http://qiankanglai.me/misc/2014/11/15/fur-shader/ 花时间看了下毛发效果,苦于囊中羞涩没能买QuickFur.furFX等插件,最后找到了Fur ...

  2. puppet应用案例

  3. Windows下如何更新 node.js

    因为在Windows下是没有n模块的并不支持npm install -g n  n latest更新,所以只能老老实实安装 1.在Path环境变量下查看自己的node.js安装路径 计算机-属性-高级 ...

  4. iostat查看linux硬盘IO性能

    rrqm/s:   每秒进行 merge 的读操作数目.即 delta(rmerge)/swrqm/s:  每秒进行 merge 的写操作数目.即 delta(wmerge)/sr/s:        ...

  5. oracle排序后的第一条记录

    该查寻语句没有经过任何的优化,因为oracle没有SQL的TOP关键字,但是有一个ROWNUM的列,因此,可以通过ROWNUM来进行查询.oracle的关于rownum的参考手册里面提到了    分析 ...

  6. DataTables 全局设置中文语言

    参考来源:https://blog.csdn.net/qq_22690445/article/details/79682311 $.fn.dataTable.defaults.oLanguage = ...

  7. [k8s]zookeeper集群在k8s的搭建(statefulset模式)-pod的调度

    之前一直docker-compose跑zk集群,现在把它挪到k8s集群里. docker-compose跑zk集群 zk集群in k8s部署 参考: https://github.com/kubern ...

  8. [k8s]jenkins配合kubernetes插件实现k8s集群构建的持续集成

    另一个结合harbor自动构建镜像的思路: 即code+baseimage一体的方案 - 程序员将代码提交到代码仓库gitlab - 钩子触发jenkins master启动一次构建 - jenkin ...

  9. 【iCore4 双核心板_FPGA】例程十三:基于SPI的ARM与FPGA通信实验

    实验现象: 1.先烧写ARM程序,然后烧写FPGA程序. 2.打开串口精灵,通过串口精灵给ARM发送数据从而给FPGA发送数据 ,会接收到字符HELLO. 3.通过串口精灵发送命令可以控制ARM·LE ...

  10. 【emWin】例程十七:窗口对象——Button

    介绍: 按钮小工具通常用作触摸屏的主要用户界面元素,本例程介绍按钮小工具的创建及使用方法. 触摸校准(上电可选择是否进入校准界面) 自绘按钮(通过回调函数来自行绘制各种形状的按钮) 设置按钮字体 设置 ...