remove unused images: docker rmi $(docker images --filter "dangling=true" -q --no-trunc)NOTE:
make sure docker container is stopped before remove it.
Docker is stateless, which means everytime stop docker container and start it again, the previous store is gone, so at that time, if we want persist storage, we need volume, which is as belows:
Start a nginx container: docker run -p 8080:80 --name web --rm nginx
Update the default content nginx runs: docker cp index.html web:/usr/share/nginx/html
Refresh the web to see content in index.html
Stop the container and restart it, which is step 1: docker run -p 8080:80 --name web --rm nginx, and index.html is not persisted.
To persist storage, need start container with volume: docker run -p 8080:80 --name web -v web:/usr/share/nginx/html --rm nginx or can mount a volume from host as long as set a directory: docker run -p 8080:80 --name web -v $PWD:/usr/share/nginx/html --rm nginx and no need to restart container when update the mounted file
Or we can create a volume to allow multiple container mount from
Create a volume: docker volume create --name webdata
Start a container with the created volume: docker run -d --name web1 -v webdata:/usr/share/nginx/html -p 8000:80 nginx and check the default content with curl localhost:8000
Change the index content: docker exec web1 bash -c 'echo "foo" > /usr/share/nginx/html/index.html' and curl again to check content has been changed
Then we stop the container docker stop web1 remove it docker rm web1, and start a container with the similar command docker run -d --name web1 -v webdata:/usr/share/nginx/html -p 8000:80 nginx(can change container name, port, etc.) With curl, we can see the same content as before foo!
If start a new container with same volume for nginx, will get same content foo, and any container change the index file, the other containers with the same volume will be changes as well. Cause they all use the same volume.
Inspect Docker Volumes:
check volume in specific container docker inspect -f '{{ .Mounts }}' web1
inspect the volume docker volume inspect webdata
list all volumes docker volume ls
to remove a volume, all the related containers should be stopped and removed, to remove docker volume rm webdata
NOTE:
It's not recommended to store data inside docker container, cause it's ephemeral. But docker has volume concept to allow us to mount data from.
Docker prune:
to remove containers that are not currently running: docker container prune, similarly, we have docker image prune, docker volume prune.
Another useful command is : docker system prune -a, not remove all unattached images/volumes, but also remove unused images as well. (oh, I just removed all my docker containers/images/volumes/networks...)
Start a node server with docker
create node entry file index.js
var http=require('http');
var server = http.createServer(function(req, res) {
response.writeHead(200, {"Content-Type": "text/pain"});
response.end("Hellow world\n");
}
)
server.listen(8000);
create Dockerfile, which is a docker engine to create docker image
FROM mhart/alpine-node
COPY index.js .
CMD node index.js
build docker image with docker build -t ${image_name} .
run docker container with image docker run -p ${host_port}:${docker_port} ${image_name}
Couses Link
pull a docker image:
docker pull mongo:${version}
remove docker image:
docker rmi ${image_name|image_id}
run docker container:
docker run ${image}
run docker container at background:
docker run -d ${image}
check docker running containers:
docker ps
check docker running containers regardless its status:
docker ps -a
start or stop docker container:
docker start/stop ${container_id}
remove docker container:
docker rm ${container_id}
remove unused images:
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
NOTE: make sure docker container is stopped before remove it.Docker is stateless, which means everytime stop docker container and start it again, the previous store is gone, so at that time, if we want persist storage, we need volume, which is as belows:
docker run -p 8080:80 --name web --rm nginx
docker cp index.html web:/usr/share/nginx/html
index.html
docker run -p 8080:80 --name web --rm nginx
, and index.html is not persisted.docker run -p 8080:80 --name web -v web:/usr/share/nginx/html --rm nginx
or can mount a volume from host as long as set a directory:docker run -p 8080:80 --name web -v $PWD:/usr/share/nginx/html --rm nginx
and no need to restart container when update the mounted fileCreate a volume:
docker volume create --name webdata
docker run -d --name web1 -v webdata:/usr/share/nginx/html -p 8000:80 nginx
and check the default content withcurl localhost:8000
docker exec web1 bash -c 'echo "foo" > /usr/share/nginx/html/index.html'
and curl again to check content has been changeddocker stop web1
remove itdocker rm web1
, and start a container with the similar commanddocker run -d --name web1 -v webdata:/usr/share/nginx/html -p 8000:80 nginx
(can change container name, port, etc.) With curl, we can see the same content as beforefoo
!foo
, and any container change the index file, the other containers with the same volume will be changes as well. Cause they all use the same volume.docker inspect -f '{{ .Mounts }}' web1
docker volume inspect webdata
docker volume ls
docker volume rm webdata
Docker prune:
docker container prune
, similarly, we havedocker image prune
,docker volume prune
.docker system prune -a
, not remove all unattached images/volumes, but also remove unused images as well. (oh, I just removed all my docker containers/images/volumes/networks...)Start a node server with docker
docker build -t ${image_name} .
docker run -p ${host_port}:${docker_port} ${image_name}