我是否正确理解Docker?
docker run -it --rm --name verdaccio -p 4873:4873 -d verdaccio/verdaccio
如果我的服务器上尚不存在它并在特定端口上运行它,则获取 verdaccio。 -d 将其分离,以便我可以离开终端并保持其运行正确吗?
- >
docker exec -it --user root verdaccio /bin/sh
让我通过 SSH 进入正在运行的容器。但是,如果我rm
容器然后再次运行图像以及任何编辑的文件,我添加的任何apk包都将丢失。那么这有什么用呢?我可以保留图像中的更改吗?
-
由于我需要编辑
/verdaccio/conf/config.yaml
(在容器中(中存在的 config.yaml,因此保留此更改的唯一选择是从正在运行的实例中分离数据?还有别的办法吗?V_PATH=/path/on/my/server/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
但是,此命令将抛出
fatal--- cannot open config file /verdaccio/conf/config.yaml: ENOENT: no such file or directory, open '/verdaccio/conf/config.yaml'
可以使用docker commit
基于容器构建新映像。
但是,更好的方法是使用基于verdaccio/verdaccio
构建映像的Dockerfile
,并对其进行必要的更改。这使得该过程易于重复(例如,如果出现新版本的基础映像(。
另一个选项是使用您已经提到的卷。