[Docker系列·6] 搭建基于Docker的NPM私服Sinopia

简介: ####制作镜像 Dockerfile ``` # Version: 0.0.1 FROM feuyeux/ubuntu-node MAINTAINER Eric Han "feuyeux@gmail.com" RUN apt-get -yq install make build-essential python python-dev RUN npm install js-yam

制作镜像

Dockerfile

# Version: 0.0.1
FROM feuyeux/ubuntu-node
MAINTAINER Eric Han "feuyeux@gmail.com"
RUN apt-get -yq install make build-essential python python-dev
RUN npm install js-yaml sinopia@0.9.1 
RUN adduser --disabled-password --gecos "" sinopia
RUN mkdir -p /opt/sinopia/storage
RUN chown -R sinopia:sinopia /opt/sinopia
USER sinopia
WORKDIR /opt/sinopia
ADD /config_gen.js /opt/sinopia/config_gen.js
ADD /start.sh /opt/sinopia/start.sh
CMD ["/opt/sinopia/start.sh"]
EXPOSE 4873

config_gen.js

#!/usr/bin/env nodejs
var config = require('sinopia/lib/config_gen')()
  , yaml = require('js-yaml')
  , fs = require('fs')
console.log('Username: %s', config.user)
console.log('Password: %s', config.pass)
fs.writeFileSync('/tmp/config.yaml', config.yaml)

start.sh

#!/bin/bash
nodejs /opt/sinopia/config_gen.js
cat /tmp/config.yaml
sed -e 's/\#listen\: localhost/listen\: 0.0.0.0/' -e 's/allow_publish\: admin/allow_publish\: all/' /tmp/config.yaml > /opt/sinopia/config.yaml
nodejs /node_modules/sinopia/bin/sinopia --config /opt/sinopia/config.yaml

构建镜像

[erichan@mars-centos7 ubuntu-sinopia]$ d build -t feuyeux/ubuntu-sinopia .
Sending build context to Docker daemon  5.12 kB
Sending build context to Docker daemon 
Step 0 : FROM feuyeux/ubuntu-node
 ---> 7eb4cbfcf2e0
Step 1 : MAINTAINER Eric Han "feuyeux@gmail.com"
 ---> Using cache
 ---> bd62d7c3611c
Step 2 : RUN apt-get -yq install make build-essential python python-dev
 ---> Using cache
 ---> c960e53c1b40
Step 3 : RUN npm install js-yaml sinopia@0.9.1
 ---> Running in eed56456ae0e
npm http GET https://registry.npmjs.org/sinopia/0.9.1
npm http GET https://registry.npmjs.org/js-yaml
……
npm WARN prefer global sinopia@0.9.1 should be installed with -g
js-yaml@3.1.0 node_modules/js-yaml
├── esprima@1.0.4
└── argparse@0.1.15 (underscore@1.4.4, underscore.string@2.3.3)

sinopia@0.9.1 node_modules/sinopia
├── commander@2.3.0
├── async@0.9.0
├── semver@3.0.1
├── minimatch@1.0.0 (sigmund@1.0.0, lru-cache@2.5.0)
├── mkdirp@0.5.0 (minimist@0.0.8)
├── fs-ext@0.3.2
├── crypt3@0.1.5
├── cookies@0.5.0 (keygrip@1.0.1)
├── bunyan@1.0.0 (mv@2.0.3)
├── request@2.40.0 (json-stringify-safe@5.0.0, forever-agent@0.5.2, aws-sign2@0.5.0, oauth-sign@0.3.0, stringstream@0.0.4, tunnel-agent@0.4.0, qs@1.0.2, node-uuid@1.4.1, mime-types@1.0.2, tough-cookie@0.12.1, http-signature@0.10.0, form-data@0.1.4, hawk@1.1.1)
└── express@3.16.7 (basic-auth@1.0.0, merge-descriptors@0.0.2, cookie@0.1.2, escape-html@1.0.1, cookie-signature@1.0.4, fresh@0.2.2, range-parser@1.0.0, vary@0.1.0, media-typer@0.2.0, methods@1.1.0, parseurl@1.3.0, buffer-crc32@0.2.3, depd@0.4.4, proxy-addr@1.0.1, debug@1.0.4, commander@1.3.2, send@0.8.3, connect@2.25.7)
 ---> 78689f6f2b39
Removing intermediate container eed56456ae0e
Step 4 : RUN adduser --disabled-password --gecos "" sinopia
 ---> Running in 69e7239b6807
Adding user `sinopia' ...
Adding new group `sinopia' (1000) ...
Adding new user `sinopia' (1000) with group `sinopia' ...
Creating home directory `/home/sinopia' ...
Copying files from `/etc/skel' ...
 ---> 8db99c03a2ca
Removing intermediate container 69e7239b6807
Step 5 : RUN mkdir -p /opt/sinopia/storage
 ---> Running in c8df4c2dbb0b
 ---> 7dadbc492b3c
Removing intermediate container c8df4c2dbb0b
Step 6 : RUN chown -R sinopia:sinopia /opt/sinopia
 ---> Running in 227825ca7561
 ---> fec3907ca6c9
Removing intermediate container 227825ca7561
Step 7 : USER sinopia
 ---> Running in 1ed1ea8aff6e
 ---> e9edc497b77e
Removing intermediate container 1ed1ea8aff6e
Step 8 : WORKDIR /opt/sinopia
 ---> Running in daa0f3ac4383
 ---> 0b7bda3426ed
Removing intermediate container daa0f3ac4383
Step 9 : ADD /config_gen.js /opt/sinopia/config_gen.js
 ---> 25770258cbb3
Removing intermediate container 3a502127d038
Step 10 : ADD /start.sh /opt/sinopia/start.sh
 ---> 678434935c80
Removing intermediate container ddfc6aa3dceb
Step 11 : CMD ["/opt/sinopia/start.sh"]
 ---> Running in e3117e312f4c
 ---> 2acff7da72cc
Removing intermediate container e3117e312f4c
Step 12 : EXPOSE 4873
 ---> Running in a458160612cf
 ---> a1b8e9c0366f
Removing intermediate container a458160612cf
Successfully built a1b8e9c0366f
[erichan@mars-centos7 ubuntu-sinopia]$ 

运行sinopia

d run --name sinopia -d -p 4873:4873 -v /home/erichan/docker-room/ubuntu-sinopia/storage:/opt/sinopia/storage feuyeux/ubuntu-sinopia

测试sinopia

[erichan@mars-centos7 ubuntu-sinopia]$ d logs sinopia

[erichan@mars-centos7 ubuntu-sinopia]$ curl -i http://localhost:4873
HTTP/1.1 404 Not Found
X-Powered-By: Sinopia/0.9.1
Content-Type: text/html; charset=utf-8
Content-Length: 13
Vary: Accept-Encoding
X-Status-Cat: http://flic.kr/p/aV6juR
Date: Wed, 20 Aug 2014 14:28:21 GMT
Connection: keep-alive

Cannot GET /

Sinopia Client

[erichan@Eric-Mavericks ~]$ nano .bash_profile
alias dpm='npm --registry="http://10.211.55.14:4873"'

[erichan@Eric-Mavericks arcas]$ npm install logsto
logsto@0.0.6 ../node_modules/logsto
[erichan@Eric-Mavericks arcas]$ dpm publish logsto
+ logsto@0.0.6

Sinopia Server flow

https://github.com/rlidwka/sinopia.git

参考:https://github.com/keyvanfatehi/docker-sinopia

目录
相关文章
|
9月前
|
资源调度 Ubuntu 前端开发
使用verdaccio+docker搭建 npm 私有仓库以及使用
公司内部前端组件或库的共享等,搭建一个`npm`私有库就很方便,现在中大型公司也基本都有自己的`npm`私有库,这篇文章,和大家一起共同搭建一个`npm`私有库,共同学习
448 0
|
存储 关系型数据库 jenkins
软件测试|Docker搭建测试用例平台 TestLink
软件测试|Docker搭建测试用例平台 TestLink
189 0
软件测试|Docker搭建测试用例平台 TestLink
|
应用服务中间件 测试技术 nginx
软件测试|Docker 搭建Web服务器nginx
软件测试|Docker 搭建Web服务器nginx
228 0
软件测试|Docker 搭建Web服务器nginx
|
Java 持续交付 Docker
十一、Docker搭建部署SpringCloud微服务项目Demo(二)
十一、Docker搭建部署SpringCloud微服务项目Demo
|
SpringCloudAlibaba 关系型数据库 MySQL
十一、Docker搭建部署SpringCloud微服务项目Demo(一)
十一、Docker搭建部署SpringCloud微服务项目Demo
|
jenkins Java Linux
docker搭建jenkins
自动化部署可以说是项目的必须,其中jenkins可以说是标配了。jenkins在持续集成、持续交付、持续部署方面做得都很好也就是常说的CI、CD。这篇文章就总结下使用docker来搭建jenkins的过程,并记录这中间踩过的坑,防止再踩,同时也为想要学习jenkins的同学提供一点借鉴。
397 0
docker搭建jenkins
|
SQL 存储 关系型数据库
实践-基于Docker搭建的mycat分片应用
实践-基于Docker搭建的mycat分片应用
实践-基于Docker搭建的mycat分片应用
|
NoSQL 关系型数据库 MySQL
基于window10使用docker搭建lnmpr环境
基于window10使用docker搭建lnmpr环境
139 0
基于window10使用docker搭建lnmpr环境
|
SQL 存储 分布式计算
架构设计100-实践03-用Docker搭建Hive
架构设计100-实践03-用Docker搭建Hive
480 0
|
jenkins 测试技术 持续交付
软件测试|Docker 上搭建持续集成平台 Jenkins
软件测试|Docker 上搭建持续集成平台 Jenkins
185 0
软件测试|Docker 上搭建持续集成平台 Jenkins