Get

# Mac
brew install docker-desktop

在这里插入图片描述

Image

Docker Hub

# pull(specific platform)
docker pull [--platform=xxx][image]

# query
docker images

# remove image
docker rmi [ID/NAME]

在这里插入图片描述

Container

# run
docker run 
[-d, detached mode] 
[-p xx:xx, port mapping] 
[-v /xx/xx:/xx/xx, volume mapping] 
[-e, environment]
[--name xx, specify the name]
[-it --rm, enter container and remove it automatically after use]
[--restart always/unless-stopped, always restart & restart contrainer that were unexpected stopped but do not restart contatiner that were manually stopped]
[--network {host} xx]
[ID/NAME]

# process status (only running)
docker ps [-a, all containers]

# remove container
docker rm [-f, --force] [ID/NAME]

# volume
docker volume list
docker volume rm [NAME]
docker volume prune -a	# remove all local volumes not used by containers

# option
docker start [ID/NAME]
docker stop [ID/NAME]

# inspect, view container information. 
docker inspect [ID/NAME]

# logs
docker logs [-f, --follow ] [ID/NAME]

# enter the interior of the container
docker exec -it [ID/NAME] /bin/sh

# run command on the interior of the container 
docker exec [ID/NAME] [CMD]

P.S.
The usage of docker run -v

  1. Bind Mount, synchronous update
    -v /host:/container[:ro, read-only]
  2. Named volume, local data persistent
    -v myvolume:/container

Docker file

# Docker file
FROM [basic image]

WORKDIR [change a dir as the woking dir]

COPY [relative local dir] [relative image dir]

RUN [commands to install dependencies]

EXPOSE [port]

CMD [ ["xx", "xx"], the default command executed when the container start]
# Build 
docker build [-t {username/}xx{:version}, named image] [build dir]

# Push image to Docker Hub
docker login
docker push [username/imageName]

Network

# Create Subnet
docker network create [NAME]

# remove 
docker network rm

# list
docker network list

Docker Compose

# docker-compose.yaml
services:
	serviceA:
		image: xx
		environment:
			xx: xx
		volumes:
			- /datadir:/data/db
	
	serviceB:
		iamge: xx
		ports:
			- 8081: 8081

# Start
docker compose [-f /dir/file, file] up [-d, detached mode]  

Practice

version: "3.8"

services:
  # ─── MySQL ────────────────────────────────────────────────
  mysql:
    image: mysql:8.0
    container_name: hmdp-mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 401025
      MYSQL_DATABASE: hmdp
      MYSQL_USER: hmdp
      MYSQL_PASSWORD: 401025
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
      - ./init-sql:/docker-entrypoint-initdb.d
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --sql-mode=''
    networks:
      - hmdp-net
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-u", "root", "-p401025"]
      interval: 10s
      timeout: 5s
      retries: 5

  # ─── Redis ────────────────────────────────────────────────
  redis:
    image: redis:7.0-alpine
    container_name: hmdp-redis
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    networks:
      - hmdp-net
    command: redis-server --requirepass 401025
    healthcheck:
      test: ["CMD", "redis-cli", "-a", "401025", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

  # ─── Nginx ────────────────────────────────────────────────
  nginx:
    image: nginx:1.25-alpine
    container_name: hmdp-nginx
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/html:/usr/share/nginx/html:ro
    networks:
      - hmdp-net

# ─── 持久化卷 ──────────────────────────────────────────────
volumes:
  mysql_data:
  redis_data:

# ─── 内部网络 ──────────────────────────────────────────────
networks:
  hmdp-net:
    driver: bridge

更多推荐