How to Build and Run Node Apps with Docker and Compose
차례:
- 도커 실행 명령
- 포 그라운드에서 컨테이너 실행
- 컨테이너를 분리 모드로 실행
- 종료 후 컨테이너 제거
- 컨테이너 이름 설정
- 컨테이너 포트 게시
- 데이터 공유 (마운팅 볼륨)
- 대화식으로 컨테이너 실행
- 결론
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
대화식으로 컨테이너 실행
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 컨테이너를 만들고 실행하는 데 사용됩니다.
Bing은 연산자 및 구문에 대한 설명과 예제가 포함 된 광범위한 검색 쿼리 목록을 게시했습니다. 단위로 구성됩니다.

Bing Search는 기본 검색 쿼리를 보강하는 여러 가지 방법을 제공합니다. 대부분의 경우 Bing은 Bing API를 사용하여 요청을 조정하는 방법에 대해 이야기했습니다.
예제가 포함 된 Linux 티 명령

tee 명령은 표준 입력에서 읽고 표준 출력과 하나 이상의 파일에 동시에 씁니다. 티는 배관을 통해 다른 명령과 함께 가장 일반적으로 사용됩니다.
예제가 포함 된 Netcat (nc) 명령

Netcat (또는 nc)은 TCP 또는 UDP 프로토콜을 사용하여 네트워크 연결에서 데이터를 읽고 쓰는 명령 줄 유틸리티입니다. Netcat은 크로스 플랫폼이며 Linux, macOS, Windows 및 BSD에서 사용할 수 있습니다.