SW/리눅스

Linux : Docker 실행하는 방법, 명령어, 예제

얇은생각 2022. 5. 2. 07:30
반응형

도커는 거의 모든 곳에서 실행되는 휴대용 자급자족 컨테이너로 애플리케이션을 개발, 테스트 및 배포할 수 있는 플랫폼입니다.

도커 실행 명령은 지정된 이미지에서 컨테이너를 만들고 지정된 명령을 사용하여 컨테이너를 시작합니다. 도커 작업을 시작할 때 가장 먼저 숙지해야 할 명령 중 하나입니다.

도커 컨테이너를 실행하는 다양한 방법을 보여주기 위해 공식 Nginx 이미지를 사용할 것입니다.

 

 

Linux : Docker 실행하는 방법, 명령어, 예제

 

 

도커 실행 명령

도커 실행 명령은 다음 형식을 사용합니다.

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

 

 

컨테이너를 만들 이미지의 이름이 도커 실행 명령에 필요한 유일한 인수입니다. 이미지가 로컬 시스템에 없으면 레지스트리에서 꺼냅니다.

명령이 지정되지 않은 경우 컨테이너를 실행할 때 Dockerfile의 cmd 또는 ENTERPOINT 지침에 지정된 명령이 실행됩니다.

버전 1.13부터 도커 CLI가 재구성되었습니다. 모든 명령이 상호 작용하는 개체 아래에 그룹화되었습니다.

run 명령은 컨테이너와 상호 작용하므로 도커 컨테이너의 하위 명령입니다. 새 명령의 구문은 다음과 같습니다.

docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

 

 

이전 1.13 이전 구문은 여전히 지원됩니다. 후드 아래에서 도커 실행 명령은 도커 컨테이너 실행의 별칭입니다. 사용자는 새 명령 구문을 사용하는 것이 좋습니다.

도커 설명서 페이지에서 모든 도커 컨테이너 실행 옵션 목록을 찾을 수 있습니다.

 

 

 

컨테이너를 포그라운드로 실행

기본적으로 도커 실행 명령에 옵션이 제공되지 않으면 루트 프로세스가 포그라운드에서 시작됩니다. 이는 루트 프로세스의 표준 입력, 출력 및 오류가 터미널 세션에 첨부되었음을 의미합니다.

docker container run nginx

 

 

nginx 프로세스의 출력이 터미널에 표시됩니다. 웹 서버에 대한 연결이 없으므로 터미널이 비어 있습니다.

컨테이너를 중지하려면 CTRL+C를 눌러 실행 중인 Nginx 프로세스를 종료합니다.

 

 

 

컨테이너를 분리 모드에서 실행

터미널 세션을 종료할 때 컨테이너를 계속 실행하려면 분리된 모드에서 시작합니다. 이것은 백그라운드에서 Linux 프로세스를 실행하는 것과 유사합니다.

분리된 컨테이너를 시작하려면 -d 옵션을 사용합니다.

docker container run -d nginx

# 050e72d8567a3ec1e66370350b0069ab5219614f9701f63fcf02e8c8689f04fa

 

 

분리된 컨테이너는 루트 프로세스가 종료되면 중지됩니다.

도커 컨테이너 ls 명령을 사용하여 실행 중인 컨테이너를 나열할 수 있습니다.

분리된 컨테이너 루트 프로세스에 터미널을 연결하려면 도커 컨테이너 연결 명령을 사용합니다.

 

 

 

종료 후 컨테이너를 제거

기본적으로 컨테이너가 종료되면 파일 시스템이 호스트 시스템에 유지됩니다.

--rm options는 컨테이너가 자동으로 종료될 때 컨테이너를 제거하도록 도커 실행 명령을 지시합니다.

docker container run --rm nginx

 

 

Nginx 이미지는 컨테이너가 종료된 후 컨테이너의 파일 시스템을 정리하는 가장 좋은 예가 아닐 수 있습니다. 이 옵션은 일반적으로 테스트 또는 데이터베이스 백업과 같은 단기 작업을 수행하는 포그라운드 컨테이너에 사용됩니다.

 

 

 

컨테이너 이름을 설정

도커에서 각 컨테이너는 UUID 및 이름으로 식별됩니다. 기본적으로 명시적으로 설정되지 않은 경우 컨테이너 이름은 도커 데몬에 의해 자동으로 생성됩니다.

--name 옵션을 사용하여 컨테이너에 사용자 지정 이름을 할당합니다.

docker container run -d --name my_nginx nginx

# docker: Error response from daemon: Conflict. The container name "/my_nginx" is already in use by container "9...c". You have to remove (or rename) that container to be able to reuse that name.

 

 

컨테이너 이름은 고유해야 합니다. 동일한 이름으로 다른 컨테이너를 시작하려고 하면 다음과 유사한 오류가 발생합니다.

도커 컨테이너 ls -a를 실행하여 모든 컨테이너를 나열하고 이름을 확인합니다.

docker container ls

# CONTAINER ID  IMAGE  COMMAND                 CREATED         STATUS         PORTS   NAMES
# 9d695c1f5ef4  nginx  "nginx -g 'daemon of…"  36 seconds ago  Up 35 seconds  80/tcp  m

 

 

의미 있는 이름은 도커 네트워크 내의 컨테이너를 참조하거나 도커 CLI 명령을 실행할 때 유용합니다.

 

 

 

컨테이너 포트를 게시

기본적으로 포트가 게시되지 않은 경우 컨테이너 내에서 실행 중인 프로세스는 컨테이너 내부에서만 액세스할 수 있습니다.

게시 포트란 컨테이너 포트를 도커 외부의 서비스에서 사용할 수 있도록 호스트 시스템 포트에 매핑하는 것을 의미합니다.

포트를 게시하려면 다음과 같이 -p 옵션을 사용하십시오.

-p host_ip:host_port:container_port/protocol

 

 

host_ip을 지정하지 않으면 기본값은 0.0.0.0입니다.

프로토콜이 지정되지 않은 경우, 기본값은 TCP입니다.

여러 포트를 게시하려면 여러 -p 옵션을 사용합니다.

컨테이너의 TCP 포트 80(nginx)을 호스트 로컬 호스트 인터페이스의 포트 8080에 매핑하려면 다음을 실행합니다.

docker container run --name web_server -d -p 8080:80 nginx

 

 

브라우저에서 http://localhost:8080을 열거나 도커 호스트에서 다음 curl 명령을 실행하여 포트가 게시되었는지 확인할 수 있습니다.

출력은 다음과 같습니다.

curl -I http://localhost:8080

# HTTP/1.1 200 OK
# Server: nginx/1.17.6
# Date: Tue, 26 Nov 2019 22:55:59 GMT
# Content-Type: text/html
# Content-Length: 612
# Last-Modified: Tue, 19 Nov 2019 12:50:08 GMT
# Connection: keep-alive
# ETag: "5dd3e500-264"
# Accept-Ranges: bytes

 

 

 

데이터 공유(볼륨 마운트)

컨테이너가 중지되면 컨테이너에서 생성된 모든 데이터가 제거됩니다. 도커 볼륨은 데이터를 지속시키고 여러 컨테이너에서 데이터를 공유하는 데 선호되는 방법입니다.

볼륨을 만들고 관리하려면 다음과 같은 -p 옵션을 사용합니다.

-v host_src:container_dest:options

 

 

host_src는 호스트 또는 명명된 볼륨의 파일 또는 디렉토리에 대한 절대 경로일 수 있습니다.

container_dest는 컨테이너의 파일 또는 디렉터리에 대한 절대 경로입니다.

옵션은 rw(읽기-쓰기) 및 ro(읽기 전용)일 수 있습니다. 옵션이 지정되지 않은 경우 기본적으로 rw입니다.

이 작동 방식을 설명하기 위해 호스트에 디렉토리를 만들고 index.html 파일을 넣어 보겠습니다.

mkdir public_html
echo "Testing Docker Volumes" > public_html/index.html

 

 

그런 다음 public_html 디렉토리를 컨테이너의 /usr/share/nginx/html에 마운트합니다.

docker run --name web_server -d -p 8080:80 -v $(pwd)/public_html:/usr/share/nginx/html nginx

 

 

public_html 디렉터리에 대한 절대 경로를 지정하는 대신 현재 작업 디렉터리를 인쇄하는 $(pwd) 명령을 사용합니다.

이제 브라우저에 http://localhost:8080을 입력하면 index.html 파일의 내용이 표시됩니다. 컬을 사용할 수도 있습니다.

curl http://localhost:8080

# Testing Docker Volumes

 

 

 

컨테이너를 대화식으로 실행

bash와 같은 대화형 프로세스를 처리할 때 -i 및 -t 옵션을 사용하여 컨테이너를 시작합니다.

-it 옵션을 사용하면 표준 입력을 터미널에 연결한 상태로 유지하고 의사-tty를 할당할 수 있습니다.

컨테이너의 Bash 셸이 터미널에 연결되고 명령 프롬프트가 변경됩니다.

docker container run -it nginx /bin/bash

# root@1da70f1937f5:/#

 

 

이제 컨테이너의 셸과 상호 작용하여 컨테이너 내부에 있는 모든 명령을 실행할 수 있습니다.

이 예에서는 Dockerfile에 지정된 명령 대신 실행된 Docker run 명령에 인수로 명령(/bin/bash)을 제공했습니다.

Docker는 애플리케이션 패키징 및 배포의 표준이며 CI/CD, 자동화 및 DevOps의 필수 구성 요소입니다.

도커 컨테이너 실행 명령은 도커 컨테이너를 만들고 실행하는 데 사용됩니다.

반응형