容器、映像檔、磁碟區、網路和 Docker Compose 的基本 Docker 命令。
docker run -d IMAGE
docker run -d nginx
docker run -it IMAGE bash
docker run -it ubuntu bash
docker run --name NAME -p HOST:CTR IMAGE
docker run --name web -p 8080:80 nginx
docker run -e KEY=VALUE IMAGE
docker run -e NODE_ENV=production node:18 node app.js
docker run -v /host/path:/ctr/path IMAGE
docker run -v $(pwd)/data:/app/data myapp
docker run --rm IMAGE
docker run --rm alpine echo 'hello'
docker ps
docker ps
docker ps -a
docker ps -a
docker stop CONTAINER
docker stop web
docker start CONTAINER
docker start web
docker restart CONTAINER
docker restart web
docker rm CONTAINER
docker rm web
docker rm -f CONTAINER
docker rm -f web
docker exec -it CONTAINER bash
docker exec -it web bash
docker logs -f CONTAINER
docker logs -f web
docker inspect CONTAINER
docker inspect web
docker stats
docker stats
docker pull IMAGE:TAG
docker pull postgres:16
docker images
docker images
docker build -t NAME:TAG .
docker build -t myapp:latest .
docker build -f PATH/Dockerfile .
docker build -f docker/Dockerfile.prod -t myapp:prod .
docker tag SOURCE TARGET
docker tag myapp:latest registry.io/user/myapp:v1.0
docker push IMAGE
docker push registry.io/user/myapp:v1.0
docker rmi IMAGE
docker rmi myapp:latest
docker image prune
docker image prune
docker image prune -a
docker image prune -a
docker volume create NAME
docker volume create pgdata
docker volume ls
docker volume ls
docker volume inspect NAME
docker volume inspect pgdata
docker volume rm NAME
docker volume rm pgdata
docker run -v VOLUME:/ctr/path IMAGE
docker run -v pgdata:/var/lib/postgresql/data postgres:16
docker network create NAME
docker network create mynet
docker network ls
docker network ls
docker network connect NET CONTAINER
docker network connect mynet web
docker run --network NET IMAGE
docker run --network mynet --name api myapp
docker network rm NAME
docker network rm mynet
docker compose up -d
docker compose up -d
docker compose down
docker compose down
docker compose down -v
docker compose down -v
docker compose ps
docker compose ps
docker compose logs -f SERVICE
docker compose logs -f api
docker compose exec SERVICE bash
docker compose exec api bash
docker compose build
docker compose build
docker compose pull
docker compose pull
docker compose restart SERVICE
docker compose restart api
docker compose -f FILE up -d
docker compose -f docker-compose.prod.yml up -d
FROM BASE:TAG
FROM node:18-alpine
WORKDIR /path
WORKDIR /app
COPY src dest
COPY package*.json ./ COPY . .
RUN command
RUN npm ci --only=production
ENV KEY=VALUE
ENV NODE_ENV=production PORT=3000
ARG NAME=default
ARG APP_VERSION RUN echo $APP_VERSION
EXPOSE PORT
EXPOSE 3000
CMD ["executable", "arg"]
CMD ["node", "server.js"]
ENTRYPOINT ["executable"]
ENTRYPOINT ["docker-entrypoint.sh"]
VOLUME ["/data"]
VOLUME ["/var/lib/mysql"]
USER name
USER node
docker system prune
docker system prune
docker system prune -a
docker system prune -a
docker system df
docker system df
docker container prune
docker container prune
docker info
docker info
docker version
docker version
# Stage 1: build FROM node:18-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # Stage 2: runtime FROM node:18-alpine AS runner WORKDIR /app ENV NODE_ENV=production COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules EXPOSE 3000 USER node CMD ["node", "dist/server.js"]
多階段構建通過僅複製 生產構建產物。 USER node 指令避免以root身份執行,提高安全性。
services:
api:
build: .
ports:
- "3000:3000"
environment:
DATABASE_URL: postgres://user:pass@db:5432/mydb
depends_on:
db:
condition: service_healthy
db:
image: postgres:16-alpine
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user"]
interval: 5s
retries: 5
volumes:
pgdata:docker run從映像建立一個新容器並啟動它。docker start重新啟動現有的已停止容器。首次建立容器或需要新容器時使用docker run。當您想以其現有狀態恢復之前停止的容器時,使用docker start。
使用docker system prune刪除所有已停止的容器、懸掛映像、未使用的網路和建置快取。新增-a標誌還可刪除未使用的映像。使用docker container prune僅針對容器,docker image prune僅針對映像。
COPY只是將檔案從建置內容複製到映像中。ADD做同樣的事情,但還支援URL來源和自動提取壓縮封存(.tar、.tar.gz、.tar.bz2)。最佳實踐:除非特別需要ADD的額外功能,否則使用COPY,因為COPY更透明。
使用Docker磁碟區(docker volume create myvol,然後在docker run中用-v myvol:/data)進行Docker管理的持久命名儲存。使用繫結掛載(-v /主機/路徑:/容器/路徑)掛載特定的主機目錄。磁碟區更適合生產環境,因為它們完全由Docker管理且可移植。