基于Docker搭建CNPM私有仓库

步骤

  • 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'
  • 接下来我们要构建镜像,在cnpmjs.org文件夹下执行docker build命令,构建镜像(构建过程中需要下载依赖包,时间较长请耐心等待)

    1
    docker build -t cjh/cnpmjs:20180911

    当出现successfully字样的时候就说明已经构建成功了,此时我们执行查看镜像列表命令:

    1
    docker image ls

    此时我们刚刚构建的镜像就在列表中。

  • 然后我们使用构建好的镜像来运行cnpmjs容器

    1
    2
    3
    4
    5
    6
    7
    8
    docker 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私有仓库之正确打开方式