步骤
git仓库下克隆cnpmjs.org项目
1
git clone https://github.com/cnpm/cnpmjs.org.git
进入到cnpmjs.org项目内
1
cd cnpmjs.org
查看Dockerfile文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39## 引用node镜像
FROM node:6.11
## 作者
MAINTAINER Bono Lv <lvscar {aT} gmail.com>
# Working enviroment工作环境
ENV \
CNPM_DIR="/var/app/cnpmjs.org" \
CNPM_DATA_DIR="/var/data/cnpm_data"
# 执行命令,在容器中创建目录
RUN mkdir -p ${CNPM_DIR}
## 设置工作目录
WORKDIR ${CNPM_DIR}
## 将package.json文件拷贝到容器的指定目录下
COPY package.json ${CNPM_DIR}
## 设置容器中的npm镜像地址
RUN npm set registry https://registry.npm.taobao.org
## 下载依赖
RUN npm install
## 将宿主机中cnpmjs.org项目下的所有文件拷贝到容器的指定目录中
COPY . ${CNPM_DIR}
## 将宿主机中config.js文件拷贝到容器中指定路径下config目录下,此步非常关键,也就是说容器中将使用## config.js来当做cnpmjs的配置文件
COPY docs/dockerize/config.js ${CNPM_DIR}/config/
## 开放7001和7002端口
EXPOSE 7001/tcp 7002/tcp
## 挂载数据卷绑定给宿主机
VOLUME ["/var/data/cnpm_data"]
# Entrypoint容器启动命令
CMD ["node", "dispatch.js"]找到
docs/dockerize/config.js
文件,因为其是cnpmjs的配置文件,所以要修改其中几处配置- 在mysql中新建数据库
cnpmjs
,cnpmjs.org/docs/db.sql
文件导入数据库,完成建表工作 - 修改
config.js
文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24## enableCompress设置为true
enableCompress: true
...
## 修改数据库配置
database: {
db: 'cnpmjs',
username: 'root',
// 填写数据库密码
password: '',
// 数据源设置为mysql
dialect: 'mysql',
// 设置数据库Host地址(注意:如果mysql也运行在docker容器中的话,此处应填写宿主机的ip地址)
host: '192.168.2.112',
// 设置mysql端口号
port: 3306,
// 其他不需要修改,略...
}
...
## 修改镜像地址
registryHost: '你的Host地址:7001'- 在mysql中新建数据库
接下来我们要构建镜像,在
cnpmjs.org
文件夹下执行docker build命令,构建镜像(构建过程中需要下载依赖包,时间较长请耐心等待)1
docker build -t cjh/cnpmjs:20180911
当出现successfully字样的时候就说明已经构建成功了,此时我们执行查看镜像列表命令:
1
docker image ls
此时我们刚刚构建的镜像就在列表中。
然后我们使用构建好的镜像来运行cnpmjs容器
1
2
3
4
5
6
7
8docker run
-d \
-p 7001:7001 \
-p 7002:7002 \
-v /home/cnpm/cnpm_data:/var/data/cnpm_data \
--restart always \
--name cnpmjs \
cjh/cnpmjs:20180911- -d 容器在后台运行,并在成功启动容器后输出容器的完整ID
- -p 设置宿主机端口与容器内端口的映射关系
- -v 宿主机与容器内文件映射
待容器启动成功之后,我们来查看正在运行的容器列表:
1
docker ps
通过浏览器访问,CNPM服务:
http://192.168.2.112:7002
大功告成!关于怎么使用cnpm私有仓库请参考cnpm私有仓库之正确打开方式