Docker学习之——Node.js+MongoDB+Nginx环境搭建(一)
- 作者: 五速梦信息网
- 时间: 2026年04月04日 13:44
最近在学习Node.js相关知识,在环境搭建上耗费了不少功夫,故此把这个过程写下来同大家分享一下,今天我先来介绍一下Docker,有很多人都写过相关知识,还有一些教程,在此我只想写一下,我的学习过程中用到的一些知识和注意点。
毕竟刚开始学习,对其理解可能并不完整,或者比较片面,在此我也不做过多解释,想进一步了解的可以到其官网、维基或此处去深入了解,下面我就开始介绍具体的使用方法:
我的开发环境是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的内容暂时介绍到这儿,在实际搭建环境的时候还有一些其他问题,留到下次继续分享吧!
- 上一篇: docker学习资料整理(持续更新中..)
- 下一篇: docker学习书籍
相关文章
-
docker学习资料整理(持续更新中..)
docker学习资料整理(持续更新中..)
- 互联网
- 2026年04月04日
-
Docker学习总结
Docker学习总结
- 互联网
- 2026年04月04日
-
docker中mysql pxc集群
docker中mysql pxc集群
- 互联网
- 2026年04月04日
-
docker学习书籍
docker学习书籍
- 互联网
- 2026年04月04日
-
Docker学习记录
Docker学习记录
- 互联网
- 2026年04月04日
-
Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
- 互联网
- 2026年04月04日






