기계적 인조 인간

예제가 포함 된 Docker 실행 명령

How to Build and Run Node Apps with Docker and Compose

How to Build and Run Node Apps with Docker and Compose

차례:

Anonim

Docker는 거의 모든 곳에서 실행되는 휴대용의 자급 자족 컨테이너로 응용 프로그램을 개발, 테스트 및 배포 할 수있는 플랫폼입니다.

docker run 명령은 주어진 이미지에서 컨테이너를 만들고 주어진 명령을 사용하여 컨테이너를 시작합니다. Docker 작업을 시작할 때 익숙해 져야하는 첫 번째 명령 중 하나입니다.

공식 Nginx 이미지를 사용하여 Docker 컨테이너를 실행하는 다양한 방법을 보여줍니다.

도커 실행 명령

docker run 명령은 다음 형식을 docker run .

docker run IMAGE

컨테이너가 작성되어야하는 이미지 이름은 docker run 명령에 필요한 유일한 인수입니다. 이미지가 로컬 시스템에 없으면 레지스트리에서 이미지를 가져옵니다.

명령을 지정하지 않으면 컨테이너를 실행할 때 Dockerfile의 CMD 또는 ENTRYPOINT 명령에 지정된 명령이 실행됩니다.

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

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

docker container run IMAGE

이전의 1.13 이전 구문이 계속 지원됩니다. 후드에서 docker run 명령은 docker container run 의 별칭입니다. 사용자는 새로운 명령 구문을 사용하는 것이 좋습니다.

모든 docker container run 옵션 목록은 도커 설명서 페이지에서 찾을 수 있습니다.

포 그라운드에서 컨테이너 실행

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

docker container run nginx

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

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

컨테이너를 분리 모드로 실행

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

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

docker container run -d nginx

050e72d8567a3ec1e66370350b0069ab5219614f9701f63fcf02e8c8689f04fa

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

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

분리 된 컨테이너 루트 프로세스에 터미널을 연결하려면 docker container attach 명령을 사용하십시오.

종료 후 컨테이너 제거

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

--rm 옵션은 docker run 명령에게 컨테이너가 자동으로 종료 될 때 컨테이너를 제거하도록 지시합니다.

docker container run --rm nginx

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

컨테이너 이름 설정

Docker에서 각 컨테이너는 UUID 와 이름으로 식별됩니다. 기본적으로 명시 적으로 설정하지 않으면 컨테이너 이름은 Docker 데몬에 의해 자동으로 생성됩니다.

컨테이너에 사용자 정의 이름을 지정하려면 --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.

docker container 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 my_nginx

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

컨테이너 포트 게시

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

공개 포트는 컨테이너 포트를 호스트 시스템 포트에 맵핑하여 포트가 Docker 외부의 서비스에 사용 가능하도록하는 것을 의미합니다.

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

-p host_ip:host_port:container_port/protocol

  • host_ip 를 지정하지 않으면 기본값은 0.0.0.0 이며, protocol 을 지정하지 않으면 기본값은 TCP입니다. 여러 포트를 게시하려면 여러 개의 -p 옵션을 사용하십시오.

컨테이너의 TCP 포트 80 (nginx)을 호스트 localhost 인터페이스의 포트 8080에 매핑하려면 다음을 실행하십시오.

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

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

curl -I

결과는 다음과 같습니다.

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

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

컨테이너가 중지되면 컨테이너에서 생성 된 모든 데이터가 제거됩니다. Docker Volumes는 데이터를 유지하고 여러 컨테이너에서 공유하는 데 선호되는 방법입니다.

볼륨을 작성하고 관리하려면 다음과 같이 -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

다음으로 컨테이너의 /usr/share/nginx/html public_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 을 사용할 수도 있습니다.

curl

Testing Docker Volumes

대화식으로 컨테이너 실행

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

-it 옵션은 Docker에게 표준 입력을 터미널에 연결하고 의사 -tty를 할당하도록 지시합니다.

docker container run -it nginx /bin/bash

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

root@1da70f1937f5:/#

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

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

결론

Docker는 응용 프로그램 패키징 및 배포를위한 표준이며 CI / CD, 자동화 및 DevOps의 필수 구성 요소입니다.

docker container run 명령은 Docker 컨테이너를 만들고 실행하는 데 사용됩니다.

도커