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 4 提供了一系列新的环境变量,以修改权限、端口或 HTTP 协议。 以下是完整列表:
属性 | 默认值 | 描述 |
---|---|---|
VERDACCIO_APPDIR | /opt/verdaccio-build | docker 工作目录 |
VERDACCIO_USER_NAME | verdaccio | 系统用户 |
VERDACCIO_USER_UID | 10001 | 授予目录权限的 user id |
VERDACCIO_PORT | 4873 | Verdaccio 端口 |
VERDACCIO_PROTOCOL | http | 默认 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 相同的基本镜像来构建具有本机依赖项的插件。
FROM node:lts-alpine as builder
RUN mkdir -p /verdaccio/plugins \
&& cd /verdaccio/plugins \
&& npm install --global-style --no-bin-links --omit=optional verdaccio-auth-memory@latest
FROM verdaccio/verdaccio:6
ADD docker.yaml /verdaccio/conf/config.yaml
COPY --chown=$VERDACCIO_USER_UID:root --from=builder \
/verdaccio/plugins/node_modules/verdaccio-auth-memory \
/verdaccio/plugins/verdaccio-auth-memory
更多信息,请查看源代码中使用 Docker 的真实插件示例。
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镜像
docker build -t verdaccio .
还有一个创建 docker 镜像的 npm 脚本,因此您还可以执行以下操作:
yarn run build:docker
请注意: 第一次创建的镜像要花几分钟时间,因为它需要运行 npm install
, 而且,如果您更改任何未在.dockerignore
列表里的文件,它也将会运行相同的时间。
请注意,您需要在您的机器上安装 docker 来执行以上任何docker命令, docker 可执行程序应该在您的$PATH
里。
Docker示例
有一个单独的存储库,它托管多个配置,以使用 verdaccio
组成 Docker 映像,例如作为反向代理:
https://github.com/verdaccio/docker-examples
Docker 自定义创建
如果您根据 Verdaccio 制作了镜像,请随时将其添加到此列表中。
- docker-verdaccio-multiarch多进程镜像
- 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
- verdaccio-auth-gitlab