Docker

[Docker] 常用指令

Image

  • List all stored images
docker image ls
  • Pull an image
docker pull xxx
  • Build an image
$ docker build -t imagename:2.0 .
  • Delete specific images
docker rmi -f $(docker images -q myname)
# or
docker rmi -f image-name
  • Delete all images
docker rmi -f $(docker images -aq)

Container

  • Show all containers
docker ps -a
  • Run/stop a container
docker run -it ubuntu bash
# -d: Run in detached mode
# -v: HOST_PATH:CONTAINER_PATH
# --restart=always

# Stop a specific container
docker stop container_name

# Stop all containers
docker kill $(docker ps -q)
  • Enter/exit a container
# Enter an exited container
docker start myname
docker exec -it myname bash

# Detach from a container
Ctrl-p + Ctrl-q inside the container shell
# Re-attach into an up container shell
docker attach myname
  • Delete a specific container
docker rm -f container_name
  • Delete all containers
docker rm -f $(docker ps -aq)
  • Mirror ports
# HOST_PORT:CONTAINER_PORT
docker run -p 8000:8000 myimage
  • Copy file from/to container
docker cp test.txt mycontainer:/app/test.txt

Volume

  • List all volumes
docker volume ls
  • Mount a volume from another container
--volumes-from container_name

Networking

  • Link containers (legacy)
--link container_name (legacy)
# Then you can ping container_name
# It’s better to create a network and add the containers to the network as below
  • Create a network
docker network create network-name
# Creates a bridge network by default
  • network mode (–net)
    • none: No network connection
    • container: Mirror a specific container
    • host: Mirror the host
    • bridge: Default. Like NAT
    • custom created network: Overlay or bridge

Tag

  • Tag an image for pushing
docker tag image-name DockerHubAcc/image-name

Save/Export and Load/Import

  • save (for image)
docker save myimage > myimage.tar

# Using gzip for compression
docker save myimage:tag | gzip > myimage_tag.tar.gz
  • load (for image)
docker load < myimage.tar
  • export (for container)
docker export mycontainer > mycontainer.tar
  • import (for container)
docker import mycontainer.tar image-name

Logging/Stats

  • Show log for a container
docker logs container_name
# Use -f to watch the logs
  • Show HW stats
docker stats

Cleanup

  • Delete all stopped containers
docker container prune
  • Clear all space used by images, containers and volumes
docker system prune --volumes  # Only remove dangling images
# -a: Remove all images with no container associated

Dockerfile

  • FROM
  • RUN

Use && and \ to chain commands to avoid too many intermediate images get created.

  • ADD/COPY

ADD can auto extract .tar.gz and handle remote URL, otherwise use COPY.

  • ENV
  • VOLUME

Declare auto created volumes using container paths

  • EXPOSE

Only for declaration purpose. docker run -P takes a random port to map to this exposed port.

  • CMD/ENTRYPOINT

Most likely the same if used alone. If ENTRYPOINT is used, commands are appended as its arguments (either specified in command line or using CMD. CMD will serve as a default argument in this case)

Docker-compose

  • Pull all related images
docker-compose pull
  • Create/delete all objects
# Create all stuffs
docker-compose up -d

# Delete all stuffs
docker-compose down
  • Start/stop the containers
# Start the containers
docker-compose start

# Stop the containers
docker-compose stop
  • Show information
docker-compose logs
docker-compose ps