Docker
拉取最新的预构建 docker 镜像:
docker pull verdaccio/verdaccio
标记版本
自版本v2.x
开始,您可以通过标签来下载(pull)docker镜像,具体操作如下:
对于主版本:
docker pull verdaccio/verdaccio:4
对于次版本:
docker pull verdaccio/verdaccio:4.0
对于特定(补丁)版本:
docker pull verdaccio/verdaccio:4.0.0
如果您对标签列表感兴趣, 请访问 Docker 网站枢纽。
使用 Docker 运行 Verdaccio
要运行docker 容器:
docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio
最后一个参数定义使用哪个镜像。 如果本地没有 Verdaccio 镜像,上述代码会从 dockerhub 拉取最新的预构建镜像。
如果您已经用 verdaccio
作为最后参数在本地创建一个镜像。
你也可以使用 -v
来绑定挂载 conf
, storage
和 plugins
在主机的位置(示例如下)。
请注意,如果您像这样挂载conf,则您首先需要在该目录中提供config.yaml 的副本。 如果缺少此文件,Docker 容器将无法正常启动。
你可以从 https://github.com/verdaccio/verdaccio/blob/5.x/conf/docker.yaml 复制这份文件。
但是,请注意该文件中的安全警告;你肯定会想在生产环境中锁定它。
V_PATH=/path/for/verdaccio; docker run -it --rm --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
如果您在服务器中运行,可能需要添加 -d 以便在后台运行它
Note: Verdaccio 在容器中是在一个非root用户(uid=10001) 下运行的,如果您使用绑定挂载(bind mount)去覆盖了默认值,那么你需要确保挂载的目录分配给正确的用户。 在上面的示例里,您要运行
sudo chown -R 10001:65533 /opt/verdaccio
,否则在运行的时候您会得到权限错误提醒。 推荐使用docker卷(volume)来替代绑定安装。
环境变量
Verdaccio 提供了一组新的环境变量来修改权限、端口或 http 协议,请在环境变量页面查看它们。
SELinux
如果系统中执行了 SELinux,则需要重新标记容器中绑定挂载的目录。 否则 verdaccio 将被禁止读取这些文件。
fatal--- cannot open config file /verdaccio/conf/config.yaml: Error: CONFIG: it does not look like a valid config file
如果 verdaccio 无法读取绑定挂载目录下的文件,而您又无法确定,请检查 /var/log/audit/audit.log
以确认是否是 SELinux 问题。 在本例中,上述错误产生了以下 AVC 拒绝。
type=AVC msg=audit(1606833420.789:9331): avc: denied { read } for pid=1251782 comm="node" name="config.yaml" dev="dm-2" ino=8178250 scontext=system_u:system_r:container_t:s0:c32,c258 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
chcon
可以更改共享文件和目录的标签。 要使容器可以访问目录,请将目录类型更改为 container_file_t
。
$ chcon -Rt container_file_t ./conf
如果只想让特定容器访问目录,请使用 chcat
指定匹配的 SELinux 类别。
另一种解决方案是使用 z 和 Z 参数。 要将 z
参数添加到挂载点 ./conf:/verdaccio/conf
只需将其更改为 ./conf:/verdaccio/conf:z
。 z
参数重新标记为目录,并在 z
参数将目录的目录重新标记时,使其可通过每个容器访问,并使其仅适用于该特定容器。 然而,使用这些标记是非常危险的。 一个非常小的配置错误,例如挂载 /home/user
或者 /var
会弄乱这些目录上的标签,并使得系统无法启动。
插件
插件可以安装在单独的目录中,并使用 Docker 或 Kubernetes 进行挂载,但请确保使用与 Verdaccio Dockerfile 相同的基本镜像来构建具有本机依赖项的插件。
以 verdaccio/verdaccio:tag
为基础创建自己的 Dockerfile
如果插件已存在于某个注册表中,则可以使用 npm
命令全局安装它。
FROM verdaccio/verdaccio:5
ADD docker.yaml /verdaccio/conf/config.yaml
USER root
RUN npm install --global verdaccio-static-token \
&& npm install --global verdaccio-auth-memory
USER $VERDACCIO_USER_UID
有关更详细的插件示例,请查看 docker-examples
文件夹。
使用本地插件添加插件到 Dockerfile
如果注册表中没有可用的软件包,而您又想试用本地插件,可以使用 /verdaccio/plugins
文件夹,verdaccio 会在启动时从该文件夹中查找插件。
- 创建具有多阶段支持的基础映像。
ADD
本地插件到镜像中- 安装依赖项,如果您的插件有依赖项,则需要安装依赖项,如果您需要转译步骤(tsc、babel),则可能需要构建。
- 将最终文件夹复制到最终映像中,并应用权限,以便 verdaccio 可以找到这些文件夹(verdaccio 使用自定义用户
$VERDACCIO_USER_UID
,详情请阅读这里)。
FROM node:lts-alpine as builder
RUN mkdir -p /verdaccio/plugins
ADD plugins/verdaccio-docker-memory /verdaccio/plugins/verdaccio-docker-memory
RUN cd /verdaccio/plugins/verdaccio-docker-memory \
&& npm install --production
FROM verdaccio/verdaccio:5
ADD docker.yaml /verdaccio/conf/config.yaml
COPY --chown=$VERDACCIO_USER_UID:root --from=builder \
/verdaccio/plugins/verdaccio-docker-memory \
/verdaccio/plugins/verdaccio-docker-memory
有关更详细的插件示例,请查看 docker-examples
文件夹。
添加插件而不创建新镜像
- 使用
docker-compose.yaml
下面的示例。 - 在 docker 中映射卷时,verdaccio 默认会在
/verdaccio/plugins
查找插件。
V_PATH=/path/for/verdaccio; docker run -it --rm --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
Docker和自定义端口配置
在使用docker 的时候,当前任何在 listen
下的 conf/config.yaml
里配置的 host:port
都将被忽略。
如果你想通过其它端口访问 Verdaccio Docker 实例,例如 5000
端口,在你的 docker run
命令中添加环境变量 VERDACCIO_PORT=5000
,并通过 -p 5000:5000
开放端口。
V_PATH=/path/for/verdaccio; docker run -it --rm --name verdaccio \
-e "VERDACCIO_PORT=8080" -p 8080:8080 \
verdaccio/verdaccio
当然,你提供的 -p
参数需要匹配环境变量中的数字
在Docker中使用HTTPS
您可以配置Verdaccio要监听的协议,就像端口配置一样 您在config.yaml中指定证书后,您需要将PROTOCOL
环境变量的默认的值("http")覆盖为"https"。
docker run -it --rm --name verdaccio \
--env "VERDACCIO_PROTOCOL=https" -p 4873:4873
verdaccio/verdaccio
使用docker-compose
- 获取docker-compose的最新版本。
- 创建并运行容器:
$ docker-compose up --build
您可以通过在上面的命令前加上VERDACCIO_PORT=5000
来设置要使用(包括容器和主机两者)的端口
version: '3.1'
services:
verdaccio:
image: verdaccio/verdaccio
container_name: 'verdaccio'
networks:
- node-network
environment:
- VERDACCIO_PORT=4873
ports:
- '4873:4873'
volumes:
- './storage:/verdaccio/storage'
- './config:/verdaccio/conf'
- './plugins:/verdaccio/plugins'
networks:
node-network:
driver: bridge
Docker 将生成一个用于存储持续应用程序数据的命名卷(named volume)。 你可以使用 docker inspect
或者 docker volume inspect
来查看此卷(volume)的物理位置并编辑配置,比如:
$ docker volume inspect verdaccio_verdaccio
[
{
"Name": "verdaccio_verdaccio",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/verdaccio_verdaccio/_data",
"Labels": null,
"Scope": "local"
}
]
创建您自己的Docker镜像
转到5.x
分支并运行:
docker build -t verdaccio .
还有一个创建 docker 镜像的 yarn 脚本,因此您还可以执行以下操作:
yarn run build:docker
注意:第一次构建需要几分钟的时间,因为它需要运行 yarn install
,如果你修改了.dockerignore
中没有列出的文件,就会再次耗费这么长的时间。
请注意,您需要在您的机器上安装 docker 来执行以上任何docker命令, docker 可执行程序应该在您的$PATH
里。
Docker示例
有一个单独的存储库,它托管多个配置,以使用 verdaccio
组成 Docker 映像,例如作为反向代理:
https://github.com/verdaccio/docker-examples
Docker 自定义创建
如果您根据 Verdaccio 制作了镜像,请随时将其添加到此列表中。
- docker-verdaccio-multiarch多进程镜像
- docker-verdaccio-gitlab
- docker-verdaccio
- docker-verdaccio-s3 可备份到 s3 的私有 NPM 容器
- docker-verdaccio-ldap
- verdaccio-ldap
- verdaccio-compose-local-bridge
- docker-verdaccio
- verdaccio-docker
- verdaccio-server
- coldrye-debian-verdaccio 从 coldrye-debian-nodejs 提供 verdaccio 的 docker 镜像。
- verdaccio-github-oauth-ui