컨테이너, 이미지, 볼륨, 네트워크, 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 볼륨(docker volume create myvol, 그런 다음 docker run에 -v myvol:/data)을 사용하세요. 특정 호스트 디렉토리를 마운트하려면 바인드 마운트(-v /호스트/경로:/컨테이너/경로)를 사용하세요. 볼륨은 Docker에 의해 완전히 관리되고 이식 가능하므로 프로덕션에 권장됩니다.