Introduction to Docker, including 3 basic concepts#
1.1 Docker consists mainly of images and containers#
Image: A Docker image is like a template, similar to a file system
Container: Containers are created using images. Images and containers are like classes and instances in object-oriented programming. Containers can be created, started, stopped, and deleted, etc.
Repository: A repository is a place to store images, divided into private repositories and public repositories. Similar to Git
1.2 Docker's operating principle#
Docker is a Client-Server system. The Docker daemon runs on the host and is accessed from the client through a socket. When the Docker server receives instructions from the Docker client, it executes the command.
I. Installing Docker on Mac#
1.1 Docker for Mac is supported by homebrew's cask, so you can directly install it using brew cask install docker
1.2 You can also download it directly from the official website: https://download.docker.com/mac/stable/Docker.dmg
1.3 Docker reference documentation: https://docs.docker.com
1.4 Docker Hub for finding image sources: https://hub.docker.com
II. Using Docker#
1.1 Check version#
docker --version
docker-compose --version
docker-machine --version
1.2 View Docker system information (including the number of images and containers, etc.)#
docker info
1.3 Help command#
docker help
1.4 Check CPU usage#
docker stats
III. Basic Docker commands#
Image-related commands:
1.1 View available versions of an image (using nginx as an example)#
docker search nginx
1.2 Download an image#
docker pull nginx:latest # (followed by the image version)
1.3 Run an nginx server#
docker run -d -p 81:80 --name webserver nginx
Options:
# --name webserver: Container name for distinguishing containers
# -p 81:80: Port mapping, mapping the local port 81 to the internal port 80 of the container
# -v ~/nginx/html:/usr/share/nginx/html: Data volume mounting (ro/rw), mounts the directory in the host project to the directory in the container. By default, rw can only be changed outside the host machine, and cannot be changed inside the container.
# -d: Run the container in the background
# -it: Run interactively, enter the container to view the content
# -P: Random port
# -e: Environment configuration
Note: To start in the background, there must be a foreground process. If Docker doesn't find an application, it will automatically stop.
Key point: Data volume mounting can achieve data sharing, container persistence, and synchronization operations. You can use docker volume
to view the status of volumes, and use volumes-from
to achieve data sharing between multiple containers.
1.4 Stop the nginx service#
docker stop webserver (container ID)
1.5 Delete the nginx service#
docker rm webserver
1.6 Start/restart the nginx service#
docker start/restart webserver
1.7 List all images (the list includes repository name, tag, image ID, creation time, and space occupied)#
docker images ls
Explanation:
REPOSITORY: Repository source of the image
TAG: Tag of the image
IMAGE ID: ID of the image
CREATED: Creation time of the image
SIZE: Size of the image
Options:
-a: List all images
-q: Only display the image ID
Note: The image ID is a unique identifier. One image can have multiple tags.
1.8 View the space occupied by images, containers, and volumes#
docker system df
1.9 Delete an image#
Specify the image:
docker rmi [image name/image short ID/image long ID/image digest]
Multiple images:
docker rmi image ID image ID image ID
All images:
docker rmi $(docker images -aq)
2.0 Delete all images with the repository name "redis" using the docker images ls
command#
docker rmi $(docker images ls -q redis)
2.1 View image history#
docker history image ID
Container-related commands
1.1 List containers#
docker ps
Options:
-a: Show all containers, including those not running
-l: Show the most recently created container
-n: List the most recently created n containers
-q: Only display the container ID
1.2 Enter a container#
docker exec -it [container name] /bin/bash
docker attach container ID
Difference: docker exec
opens a new terminal after entering the container, allowing operations inside it; docker attach
enters the terminal currently running in the container without starting a new process.
1.3 Exit a container#
Stop the container and return to the host:
exit
Exit the container without stopping it:
ctrl+p+q
1.4 Delete a container#
Specify the container:
docker rm [container ID]
Multiple containers:
docker rm container ID container ID container ID
All containers:
docker rm $(docker ps -aq)
docker ps -a -q | xargs docker rm
Note: You cannot delete a running container. To delete a running container, you need to add the -f parameter: docker rm -f container ID
1.5 Start/restart a container#
docker start/restart container ID
1.6 Stop/force stop a container#
docker stop/kill container ID
1.7 View container logs#
docker logs -f -t --tail 100 container ID
# --tail must be followed by a number of lines
1.8 View process information in a container#
docker top container ID
1.9 View metadata of a container (important command)#
docker inspect container ID
2.0 Copy data from a container to the host#
docker cp container ID:container path host path
IV. Dockerfile instructions
FROM: Base image, everything starts from here
MAINTAINER: Author of the image, Name <Email>
RUN: Commands to run during image build
ADD: Step, add content
WORKDIR: Working directory of the image
VOLUME: Mounted directory
EXPOSE: Port configuration
CMD: Specifies the command to run when the container starts. Only the last one will take effect and can be replaced.
ENTRYPOINT: Specifies the command to run when the container starts, additional commands can be appended
ONBUILD: Runs when building an inherited Dockerfile
COPY: Similar to ADD, copies files to the image
ENV: Sets environment variables during the build process