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

남이섬·2021년 11월 2일
0

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) 옵션을 사용해서 파일 이름을 지정한다

profile
즐겁게 살자

0개의 댓글