简体   繁体   中英

Docker basics, how to keep installed packages and edited files?

Do I understand Docker correctly?

  1. docker run -it --rm --name verdaccio -p 4873:4873 -d verdaccio/verdaccio

gets verdaccio if it does not exist yet on my server and runs it on a specific port. -d detaches it so I can leave the terminal and keep it running right?

  1. docker exec -it --user root verdaccio /bin/sh

lets me ssh into the running container. However whatever apk package that I add would be lost if I rm the container then run the image again, as well as any edited file. So what's the use of this? Can I keep the changes in the image?

  1. As I need to edit the config.yaml that is present in /verdaccio/conf/config.yaml (in the container), my only option to keep this changes is to detach the data from the running instance? Is there another way?

     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 

However this command would throw

fatal--- cannot open config file /verdaccio/conf/config.yaml: ENOENT: no such file or directory, open '/verdaccio/conf/config.yaml'

You can use docker commit to build a new image based on the container.

A better approach however is to use a Dockerfile that builds an image based on verdaccio/verdaccio with the necessary changes in it. This makes the process easily repeatable (for example if a new version of the base image comes out).

A further option is the use of volumes as you already mentioned.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM