Quick Syntax
# server: 새 container 생성, background 실행, 이름과 port 지정
docker run --name web -d -p 8080:80 nginx:alpine
# application 설정: runtime environment를 file에서 전달
docker run --name api -d --env-file ./app.env my-api:1.2.3
# one-shot command: 종료 뒤 container를 자동 삭제
docker run --rm alpine:3.21 sh -c 'echo "health check"'
# image가 local에 없으면 pull, 있으면 local image 사용
docker run --pull=missing --name worker my-worker:1.2.3문법은 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]입니다. run은 기존 container를 재개하는 명령이 아니라 새 container를 create하고 start하는 명령입니다.
실행 방식
-d는 container를 detached mode로 실행해 terminal을 즉시 돌려줍니다. -i는 stdin을 연결하고 -t는 pseudo-TTY를 할당하므로, 대화형 shell에는 보통 -it를 함께 씁니다. foreground command가 exit하면 detached 여부와 관계없이 container는 exited 상태가 됩니다.
# interactive shell
docker run --rm -it alpine:3.21 sh
# command와 argument를 image의 기본 CMD 대신 실행
docker run --rm alpine:3.21 echo 'hello from container'image에 shell이 없으면 -it를 붙여도 shell이 생기지 않습니다. docker run -it my-image가 무엇을 실행하는지는 image의 ENTRYPOINT와 CMD에 따라 달라집니다. shell 실행이 목적이면 shell이 image에 있는지 확인하고, ENTRYPOINT가 있으면 --entrypoint sh처럼 명시적으로 교체해야 할 수 있습니다.
이름·image·설정
--name을 주면 이후 logs, stop, inspect에서 stable identifier를 쓸 수 있습니다. 같은 name의 stopped container가 남아 있으면 새 docker run --name은 충돌합니다. 기존 상태를 이어갈지, 삭제하고 새 image로 recreate할지 먼저 결정합니다.
--pull은 image pull 방식을 정합니다. missing은 local image가 없을 때만 pull하는 기본값, always는 create 전에 항상 pull, never는 local image가 없으면 오류입니다. deployment에서 tag를 쓸 때 always는 최신 tag를 받을 수 있지만, digest pinning이 주는 재현성을 대신하지는 않습니다.
-e와 --env-file은 runtime process environment를 설정합니다. environment variable은 docker inspect 등에서 보일 수 있으므로 password·token을 일반 .env file이나 명령행에 넣는 방식은 피하고, secret 전달 절차를 사용합니다.
docker run -d --name api \
-e PORT=3000 \
--env-file ./non-secret.env \
my-api:1.2.3종료와 정리
--rm은 container가 exit할 때 container와 연결된 anonymous volume을 자동 제거합니다. disposable command에는 편하지만, exit 뒤 logs·writable layer·restart count를 조사해야 하는 service에는 맞지 않습니다. --rm과 --restart policy는 함께 사용할 수 없습니다.
# container는 남겨 두고 exit state와 logs를 조사할 수 있음
docker run --name migration my-app:1.2.3 migrate
docker logs migration
docker inspect --format '{{.State.ExitCode}}' migration
docker rm migrationhost port publish의 address·protocol·노출 범위는 포트 공개와 bridge 네트워크, 기존 container를 재시작하거나 삭제하는 기준은 컨테이너 생명주기와 기본 명령 카드에서 다룹니다.
docker run option 하나가 image 보안·network 공개·data lifetime을 동시에 정할 수 있습니다. 처음에는 name, image reference, command, port, mount, environment, resource limit, restart policy를 확인하고, 장기 service에는 Compose로 선언을 남기십시오.
참고 링크
2 sources