一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情。
安装 Docker
linux
服务器使用curl
下载快速安装的shell
脚本
curl -fsSL get.docker.com -o get-docker.sh
复制代码
下载完成后,可以ls
命令查看一下。已经存在的话,使用sh
命令执行这个脚本
sh get-docker.sh
复制代码
注意如果不是root
用户,需要使用sudo su
获取超级管理员权限。
安装完成后启动一下Docker Server
systemctl start docker
复制代码
使用docker version
命令能看到Client
和Server
就启动成功了。
docker 安装 Verdaccio
1. 配置文件准备
mkdir /home/verdaccio
cd /home/verdaccio
mkdir conf && mkdir storage && mkdir plugins
cd conf
touch htpasswd
vi config.yaml
复制代码
上面的命令,每行都要依次执行下,然后在config.yaml
写入配置
# 存放软件所有软件包的目录
storage: ../storage
# 存放所有插件的目录
plugins: ../plugins
web:
# 网站Title
title: Verdaccio
# 禁用Gravatar头像
# gravatar: false
# 排序方式 asc|desc
# sort_packages: asc
# 是否启用暗黑模式
# darkMode: true
# logo地址
# logo: http://somedomain/somelogo.png
# favicon地址
# favicon: http://somedomain/favicon.ico | /path/favicon.ico
# i18n翻译配置
# i18n:
# 可用列表见:https://github.com/verdaccio/ui/tree/master/i18n/translations
# web: en-US
auth:
htpasswd:
file: ./htpasswd
# 最大注册用户数,默认为 "+inf".
# 可用通过设置为-1禁止注册
# max_users: 1000
# 上游npm库,这里可用设置为淘宝
uplinks:
npmjs:
url: https://registry.npmjs.org/
packages:
# 作用域包
'@*/*':
# 允许所有人访问
access: $all
# 注册用户可访问
publish: $authenticated
# 注册用户可访问
unpublish: $authenticated
proxy: npmjs
'**':
# 默认情况下所有用户 (包括未授权用户) 都可以查看和发布任意包
# 你可以指定 用户名/分组名 (取决于你使用什么授权插件,默认的授权插件是内置的 htpasswd)
# 访问权限有三个关键词: "$all", "$anonymous", "$authenticated"
# $all 表示不限制,任何人可访问;
# $anonymous 表示未注册用户可访问;
# $authenticated 表示只有注册用户可访问
access: $all
# 允许所有注册用户发布/撤销已发布的软件包
# (注意:默认情况下任何人都可以注册)
publish: $authenticated
unpublish: $authenticated
# 如果私有包服务不可用在本地,则会代理请求到'npmjs'
proxy: npmjs
# 您可以指定传入连接的HTTP /1.1服务器保持活动超时(以秒为单位)。
# 值为0会使http服务器的行为类似于8.0.0之前的Node.js版本,后者没有保持活动超时。
# 解决方法:通过给定的配置可以解决以下问题
server:
keepAliveTimeout: 60
# 中间件 表示 npm audit 可以使用
middlewares:
audit:
enabled: true
# 日志设置
logs: { type: stdout, format: pretty, level: http }
# 开放远程访问,允许所有IP
listen:
- 0.0.0.0:4873
复制代码
2. 一键安装运行 verdaccio
V_PATH=/home/verdaccio; docker run -d -it --name verdaccio \
-p 4873:4873 \
-v $V_PATH/conf:/verdaccio/conf \
-v $V_PATH/storage:/verdaccio/storage \
-v $V_PATH/plugins:/verdaccio/plugins \
verdaccio/verdaccio
复制代码
运行成功后就可以通过http://服务器ip:4873
访问npm
私有库了。
指令拆解:
-
V_PATH=/home/verdaccio: 这个就是给后面 $V_PATH 使用的
-
docker run -d -it --name verdaccio:
- -d 守护进程 之前可能是使用PM2来管理;
- -it 是 -i 与 -t 的缩写;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- --name verdaccio: 为容器指定一个名称;
- \ : 换行;
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口。当然还有-P 随机端口映射,容器内部端口随机映射到主机的端口
- --volume , -v: 绑定一个卷 : /verdaccio/conf —> /home/verdaccio/conf 等等
- verdaccio/verdaccio 启动 verdaccio
3. 给软件包目录和用户记录文件目录授予权限
这一步必须要做,不然不能新增用户和上传软件包。Running Verdaccio using Docker
chown 10001:65533 /home/verdaccio/conf/htpasswd
chown 10001:65533 /home/verdaccio/storage
chown 10001:65533 /home/verdaccio/plugins
Docker 讲解
2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司。
这家公司主要提供基于PaaS的云计算技术服务。具体来说,是和LXC有关的容器技术。
LXC,就是Linux容器虚拟技术(Linux container)
后来,dotCloud公司将自己的容器技术进行了简化和标准化,并命名为——Docker。
Docker技术诞生之后,并没有引起行业的关注。而dotCloud公司,作为一家小型创业企业,在激烈的竞争之下,也步履维艰。
正当他们快要坚持不下去的时候,脑子里蹦出了“开源”的想法。
什么是“开源”?开源,就是开放源代码。也就是将原来内部保密的程序源代码开放给所有人,然后让大家一起参与进来,贡献代码和意见。
Open Source,开源
有的软件是一开始就开源的。也有的软件,是混不下去,创造者又不想放弃,所以选择开源。自己养不活,就吃“百家饭”嘛。
2013年3月,dotCloud公司的创始人之一,Docker之父,28岁的Solomon Hykes正式决定,将Docker项目开源。
不开则已,一开惊人。
越来越多的IT工程师发现了Docker的优点,然后蜂拥而至,加入Docker开源社区。
Docker的人气迅速攀升,速度之快,令人瞠目结舌。
开源当月,Docker 0.1 版本发布。此后的每一个月,Docker都会发布一个版本。到2014年6月9日,Docker 1.0 版本正式发布。
此时的Docker,已经成为行业里人气最火爆的开源技术,没有之一。甚至像Google、微软、Amazon、VMware这样的巨头,都对它青睐有加,表示将全力支持。
Docker火了之后,dotCloud公司干脆把公司名字也改成了Docker Inc. 。
Docker和容器技术为什么会这么火爆?说白了,就是因为它“轻”。
在容器技术之前,业界的网红是虚拟机。虚拟机技术的代表,是VMWare和OpenStack。
相信很多人都用过虚拟机。虚拟机,就是在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。
虚拟机,类似于“子电脑”
在“子电脑”里,你可以和正常电脑一样运行程序,例如开QQ。如果你愿意,你可以变出好几个“子电脑”,里面都开上QQ。“子电脑”和“子电脑”之间,是相互隔离的,互不影响。
虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。
虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动更慢,虚拟机软件可能还要花钱(例如VMWare)。
而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。
沙箱
它启动时间很快,几秒钟就能完成。而且,它对资源的利用率很高(一台主机可以同时运行几千个Docker容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB的空间,而容器只需要MB级甚至KB级。
容器和虚拟机的对比
正因为如此,容器技术受到了热烈的欢迎和追捧,发展迅速。
我们具体来看看Docker。
大家需要注意,Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。
想要搞懂Docker,其实看它的两句口号就行。
第一句,是 “Build, Ship and Run” 。
也就是,“搭建、发送、运行”,三板斧。
举个例子:
我来到一片空地,想建个房子,于是我搬石头、砍木头、画图纸,一顿操作,终于把这个房子盖好了。
结果,我住了一段时间,想搬到另一片空地去。这时候,按以往的办法,我只能再次搬石头、砍木头、画图纸、盖房子。
但是,跑来一个老巫婆,教会我一种魔法。
这种魔法,可以把我盖好的房子复制一份,做成“镜像”,放在我的背包里。
等我到了另一片空地,就用这个“镜像”,复制一套房子,摆在那边,拎包入住。
怎么样?是不是很神奇?
所以,Docker的第二句口号就是: “Build once,Run anywhere(搭建一次,到处能用)”。
Docker技术的三大核心概念,分别是:
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
我刚才例子里面,那个放在包里的“镜像”,就是Docker镜像。而我的背包,就是Docker仓库。我在空地上,用魔法造好的房子,就是一个Docker容器。(10分钟看懂Docker和K8S 的讲解)
个人理解: Docker镜像 就是一个对象, Docker容器 就是实例化了这个对象(Docker镜像)
说白了,这个Docker镜像,是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
也就是说,每次变出房子,房子是一样的,但生活用品之类的,都是不管的。谁住谁负责添置。
每一个镜像可以变出一种房子。那么,我可以有多个镜像呀!
也就是说,我盖了一个欧式别墅,生成了镜像。另一个哥们可能盖了一个中国四合院,也生成了镜像。还有哥们,盖了一个非洲茅草屋,也生成了镜像。。。
这么一来,我们可以交换镜像,你用我的,我用你的,岂不是很爽?
于是乎,就变成了一个大的公共仓库。
负责对Docker镜像进行管理的,是Docker Registry服务(类似仓库管理员)。
不是任何人建的任何镜像都是合法的。万一有人盖了一个有问题的房子呢?
所以,Docker Registry服务对镜像的管理是非常严格的。
最常使用的Registry公开服务,是官方的Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。
总结: 这里 verdaccio 是一个镜像,然后我们有做了一些资源的配置,配置文件访问我们自己的文件夹,创建出一个本地的容器,有点容器是我们对镜像进行封装出来的。
docker 常用指令
-
docker ps -a
查看所有容器 -
docker rm $(docker ps -a -q)
删除没在运行的容器 -
docker start name|id
启动容器
重启有个问题就是之前的库不存在了 I restart verdaccio, WebUI show packages are missing , but In filefolder packages are still there
管理 npm 源、注册用户、发布包
1. npm 源替换为私有库源
$ npm config set registry http://127.0.0.1:4873
复制代码
直接把默认的npm
源替换为我们私有库,但是多个源的时候不太好管理。所以推荐使用nrm
来管理我们的npm
源。
2. nrm 管理 npm 源
# 全局安装nrm
$ npm install -g nrm
# 添加私有库
$ nrm add verdaccio http://{服务器ip}:4873
# 查看现有的npm源
$ nrm ls
* npm -------- https://registry.npmjs.org/
yarn ------- https://registry.yarnpkg.com/
cnpm ------- http://r.cnpmjs.org/
taobao ----- https://registry.npm.taobao.org/
nj --------- https://registry.nodejitsu.com/
npmMirror -- https://skimdb.npmjs.com/registry/
edunpm ----- http://registry.enpmjs.org/
verdaccio -- http://{服务器ip}:4873/
# 设置npm源
$ nrm use verdaccio
复制代码
3. 注册私有库用户
# 注册用户
$ npm adduser
复制代码
4. 登陆私有库用户
# 登录用户
$ npm login
# 查看当前登录用户
$ npm who am i
复制代码
5. 在私有库发布包
# 发布当前包
$ npm publish
6. 删除之前发布的包
# 删除之前发布的包
$ npm unpublish xxxx --force
7. 发布前的版本修改
# 发布前的版本修改, 修改第一个 x.0.0
$ npm version major
# 发布前的版本修改, 修改第二个 1.x.0
$ npm version minor
# 发布前的版本修改, 修改第二个 1.0.x
$ npm version patch
verdaccio的issues
当你重启verdaccio后,发现 http://服务器ip:4873
的页面上面没有显示你之前部署上去的包了。
I restart verdaccio, WebUI show packages are missing , but In filefolder packages are still there