我是否正确理解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
基于容器构建新图像。
但是,更好的方法是使用Dockerfile
,它根据verdaccio/verdaccio
构建图像,并对其进行必要的更改。这使该过程易于重复(例如,如果出现了新版本的基础镜像)。
如您已经提到的,另一种选择是使用卷。