11월 2일 (화) docker run 커맨드 사용법 및 그 외

5086 단어 TILdockerTIL

docker run 커맨드 사용법

Docker를 사용하면서 가장 자주 접하는 커맨드는 단연 컨테이너를 실행하기 위해서 쓰이는 docker run일 것이다

docker run 커맨드는 상당히 여러가지 옵션을 통해 다양한 방식으로 컨테이너를 실행할 수 있도록 해준다

이중에서 자주 쓰이는 옵션 위주로 dockr run 커맨드를 어떻게 사용하는지 알아보자

기본 포멧

$ docker run (<옵션>) <이미지 식별자> (<명령어>) (<인자>)

여기서 이미지 식별자는 필수이며 이미지 ID나 리파지토리(repository):태그(tag)를 사용할 수 있다

-d 옵션

많은 경우 컨테이너를 백그라운드에서 실행해야 하는데, 이 때는 -d 옵션을 사용하면 된다

-d 옵션을 사용하면 컨테이너가 detached 모드에서 실행되며, 실행 결과로 컨테이너 ID만을 출력한다
예를 들어, python:3.8-alpine 이미지로 부터 python -m http.server 명령어를 백그라운드로 실행해보자

$ docker run -d python:3.8-alpine python -m http.server
0b920d2f561437418b8fdc0e9bcfdd4c9d634983ded18ba35a4dbae012753a72
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
0e4fe552200f        python:3.8-alpine   "python -m http.serv…"   5 seconds ago       Up 4 seconds                            gifted_chaplygin

docker ps 커맨드를 날려보니, 방금 백그라운드로 실행한 컨테이너가 보인다

이 명령어를 -d 옵션없이 실행했다면, 해당 터미널에서 Ctrl + C를 눌러서 빠져나오는 순간 해당 컨테이너는 종료된다

$ docker run python:3.8-alpine python -m http.server
^CServing HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Keyboard interrupt received, exiting.
$

-it 옵션

-i 옵션과 -t 옵션은 같이 쓰이는 경우가 매우 많은데, 이 두 옵션은 컨테이너를 종료하지 않은체로, 터미널의 입력을 계속해서 컨테이너로 전달하기 위해서 사용한다

따라서, -it 옵션은 특히 컨테이너의 쉘(shell)이나 CLI 도구를 사용할 때 매우 유용하게 사용된다

—rm 옵션

--rm 옵션은 컨테이너를 일회성으로 실행할 때 주로 쓰이는데, 컨테이너가 종료될 때 컨테이너와 관련된 리소스(파일 시스템, 볼륨)까지 깨끗이 제거해준다

—name 옵션

Docker 컨테이너를 제어할 때 컨테이너 ID를 사용하면 읽거나 기억하기가 어려워서 불편하게 느껴진다
이럴 경우, --name 옵션을 사용해서 컨테이너에 이름을 부여해주면 해당 이름으로 컨테이너를 식별할 수 있다

아래 예제에서는 my-server라는 이름으로 컨테이너를 실행한 후에, docker kill 커맨드로 해당 컨테이너를 종료하거나, docker rm 커맨드로 해당 컨테이너를 삭제할 때 컨테이너 이름을 컨테이너 ID 대신에 사용하고 있다

-p 옵션

-p 옵션은 호스트와 컨테이너 간의 포트(port) 배포(publish)/바인드(bind)를 위해서 사용된다

호스트(host) 컴퓨터에서 컨테이너에서 리스닝하고 있는 포트로 접속할 수 있도록 설정해준다

아래 커맨드는 컨테이너 내부에서 80 포트로 리스닝하고 있는 HTTP 서버를 호스트 컴퓨터에서 818 포트로 접속할 수 있도록 해준다

818포트가 로컬호스트의 포트이고, 80번은 컨테이너의 포트

docker container run --name 컨테이너_이름 -p 818:80 httpd

-e 옵션

Docker 컨테이너의 환경변수를 설정하기 위해서는 -e 옵션을 사용한다
또한, -e 옵션을 사용하면 Dockerfile의 ENV 설정도 덮어써지게 된다

-v 옵션

-v 옵션은 호스트와 컨테이너 간의 볼륨(volumn) 설정을 위해서 사용된다

호스트(host) 컴퓨터의 파일 시스템의 특정 경로를 컨테이너의 파일 시스템의 특정 경로로 마운트(mount)를 해준다

-w 옵션

-w 옵션은 Dockerfile의 WORKDIR 설정을 덮어쓰기 위해서 사용된다

--entrypoint 옵션

--entrypoint 옵션은 Dockerfile의 ENTRYPOINT 설정을 덮어쓰기 위해서 사용한다

예를 들어, python:3.8-alpine 이미지로 부터 python --version을 실행하고 싶다면 다음과 같이 커맨드를 실행하면 된다

docker cp - 호스트 컨테이너 사이 파일 복사

1. 호스트 -> 컨테이너

docker cp [host 파일경로] [container name]:[container 내부 경로]

ex

docker container cp ./ 컨테이너_이름:/usr/local/apache2/htdocs/

2. 컨테이너 -> 호스트

docker cp [container name]:[container 내부 경로] [host 파일경로]

Docker 이미지 만들기

docker container commit <컨테이너_이름> <REPOSITORY:TAG>
docker container commit 컨테이너_이름 my_pacman:1.0

Dockerfile을 작성했으면 docker build 명령어로 이미지를 생성할 수 있다

--tag(또는 -t) 옵션은 새로 생성할 이미지 이름을 지정한다
리포지토리 이름을 지정하고,태그를 지정한다
마지막에 점(.)은 Dockerfile의 위치를 경로를 지정한다

파일 이름이 Dockerfile이 아닌 경우 --file(또는 -f) 옵션을 사용해서 파일 이름을 지정한다

좋은 웹페이지 즐겨찾기