I. 도커란 무엇인가요?
Docker는 Linux 컨테이너의 캡슐화이며 컨테이너를 사용하기 위한 사용하기 쉬운 인터페이스를 제공합니다. 현재 가장 널리 사용되는 Linux 컨테이너 솔루션입니다.
Docker는 애플리케이션과 해당 애플리케이션의 종속성을 가져와 파일 안에 패키징합니다. 이 파일을 실행하면 가상 컨테이너가 생성됩니다. 프로그램은 실제 물리적 컴퓨터에서 실행되는 것처럼 이 가상 컨테이너에서 실행됩니다. Docker를 사용하면 환경에 대해 걱정할 필요가 없습니다.
전반적으로 Docker의 인터페이스는 매우 간단하며, 사용자는 애플리케이션을 넣을 컨테이너를 쉽게 생성하고 사용할 수 있습니다. 또한 일반 코드를 관리하는 것처럼 컨테이너를 버전 관리, 복사, 공유 및 수정할 수 있습니다.
Docker 사용법
현재 Docker의 주요 용도는 크게 세 가지로 분류할 수 있습니다.
1, 일회성 환경을 제공합니다. 예를 들어, 다른 사람의 소프트웨어에 대한 로컬 테스트, 단위 테스트 및 빌드 환경을 제공하기 위한 지속적 통합이 있습니다.
2. 탄력적인 클라우드 서비스 제공. Docker 컨테이너는 필요에 따라 켜고 끌 수 있기 때문에 동적 확장 및 축소에 적합합니다.
3. 마이크로서비스 아키텍처 형성. 여러 개의 컨테이너를 사용하면 하나의 머신에서 여러 서비스를 실행할 수 있으므로 마이크로서비스 아키텍처를 로컬에서 시뮬레이션할 수 있습니다.
Docker 설치
Docker는 커뮤니티 에디션과 엔터프라이즈 에디션의 두 가지 버전이 있는 오픈 소스 상용 제품입니다. 엔터프라이즈 에디션에는 일반적으로 개인 개발자에게는 제공되지 않는 일부 유료 서비스가 포함되어 있습니다. 다음 설명은 커뮤니티 에디션에 대한 설명입니다.
설치가 완료되면 다음 명령을 실행하여 설치가 성공적으로 완료되었는지 확인합니다.
$ docker version
#
$ docker info
도커를 사용하려면 sudo 권한이 있어야 합니다. 모든 명령에 sudo를 입력하지 않으려면 사용자를 도커 사용자 그룹에 추가하면 됩니다 공식 문서.
# service 명령 사용법
$ sudo service docker start
# systemctl 명령 사용법
$ sudo systemctl start docker
이미지 파일
Docker는 애플리케이션과 해당 종속 요소를 이미지 파일로 패키징합니다. 이미지 파일은 컨테이너의 템플릿으로 간주할 수 있으며, 도커는 이미지 파일을 기반으로 컨테이너의 인스턴스를 생성합니다. Docker는 이미지 파일을 기반으로 컨테이너 인스턴스를 생성하며, 동일한 이미지 파일에서 동시에 실행되는 컨테이너 인스턴스를 여러 개 생성할 수 있습니다.
이미지는 바이너리 파일입니다. 실제로 이미지 파일은 다른 이미지 파일을 상속하고 약간의 사용자 지정을 추가하여 만드는 경우가 많습니다. 예를 들어 우분투 이미지에 아파치 서버를 추가하여 자신만의 이미지를 만들 수 있습니다.
# 머신의 모든 이미지 파일을 나열합니다.
$ docker image ls
# 이미지 파일 삭제
$ docker image rm [imageName]
이미지 파일은 범용적이므로 한 컴퓨터에서 다른 컴퓨터로 이미지 파일을 복사해도 잘 작동합니다. 일반적으로 시간을 절약하려면 직접 만드는 대신 다른 사람의 이미지 파일을 사용하는 것이 좋습니다. 사용자 정의하고 싶더라도 처음부터 새로 만들기보다는 다른 사람의 이미지 파일을 기반으로 만들어야 합니다.
이미지 파일을 웹의 리포지토리에 업로드하여 더 쉽게 공유할 수 있으며, Docker의 공식 리포지토리인 Docker Docker Hub 가장 중요하고 일반적으로 사용되는 이미지 리포지토리입니다. 이미지 파일을 판매할 수도 있습니다.
예: hello world
다음은 가장 간단한 이미지 파일인 "hello world" 로 Docker를 맛볼 수 있는 예시입니다.
먼저 다음 명령을 실행하여 리포지토리에서 로컬로 이미지 파일을 가져옵니다.
$ docker image pull library/hello-world
Docker에서 공식적으로 제공하는 이미지 파일은 library 그룹 내에 배치되므로 기본 그룹이므로 생략할 수 있습니다. 따라서 위의 명령은 다음과 같이 작성할 수 있습니다.
$ docker image pull hello-world
캡처에 성공하면 로컬에서 이미지 파일을 볼 수 있습니다.
$ docker image ls
이제 이미지 파일을 실행합니다.
$ docker container run hello-world
docker 컨테이너 실행 명령은 이미지 파일에서 실행 중인 컨테이너 인스턴스를 생성합니다.
도커 컨테이너 실행 명령에는 이미지 파일을 자동으로 가져오는 기능이 있습니다. 지정된 이미지 파일을 로컬에서 사용할 수 없는 경우 리포지토리에서 자동으로 가져옵니다. 따라서 이전 도커 이미지 가져오기 명령은 필수 단계가 아닙니다.
실행이 성공하면 화면에 다음과 같은 출력이 표시됩니다.
$ docker container run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
... ...
이 프롬프트가 출력된 후 헬로월드가 실행을 중지하고 컨테이너가 자동으로 종료됩니다.
일부 컨테이너는 제공되는 서비스 때문에 자동으로 종료되지 않습니다. 예를 들어 우분투를 실행하는 이미지를 설치하면 명령줄에서 우분투 시스템을 경험할 수 있습니다.
$ docker container run -it ubuntu bash
자동으로 종료되지 않는 컨테이너의 경우 docker container kill 명령을 사용하여 수동으로 종료해야 합니다.
$ docker container kill [containID]
컨테이너 파일
이미지 파일에 의해 생성된 컨테이너 인스턴스는 그 자체로 컨테이너 파일이라고 하는 파일입니다. 즉, 컨테이너가 생성되면 이미지 파일과 컨테이너 파일이라는 두 개의 파일이 동시에 존재하게 됩니다. 그리고 컨테이너를 닫아도 컨테이너 파일은 삭제되지 않고 컨테이너 실행만 중지됩니다.
# 머신에서 실행 중인 컨테이너를 나열합니다.
$ docker container ls
# 종료된 컨테이너를 포함하여 머신의 모든 컨테이너를 나열합니다.
$ docker container ls --all
위 명령의 출력에는 이전 섹션에서 컨테이너를 종료한 docker 컨테이너 종료 명령과 같이 여러 곳에서 필요한 컨테이너의 ID가 포함되어 있습니다.
종료된 컨테이너 파일은 여전히 하드 드라이브 공간을 차지하며 docker container rm 명령을 사용하여 삭제할 수 있습니다.
$ docker container rm [containerID]
위 명령을 실행한 후 docker container ls --all 명령을 사용하면 삭제된 컨테이너 파일이 사라진 것을 확인할 수 있습니다.
Docker파일 파일
이미지 파일 사용법을 배웠다면 다음 질문은 이미지 파일을 어떻게 생성할 수 있을까요? 소프트웨어를 홍보하려면 이미지 파일을 직접 만들어야 합니다.
이를 위해서는 Docker파일 파일을 사용해야 합니다. 이 파일은 이미지를 구성하는 데 사용되는 텍스트 파일로, Docker에서 바이너리 이미지 파일을 생성합니다.
다음은 도커파일 파일을 작성하는 방법의 예시입니다.
VIII. 예시: 나만의 도커 컨테이너 만들기
koa-demos 프로젝트를 예로 들어 사용자가 Docker 컨테이너 내에서 Koa 프레임워크를 실행할 수 있는 Dockerfile 파일을 작성하는 방법을 소개하겠습니다.
준비 과정으로 먼저 소스 코드를 다운로드하세요.
도커파일 파일을 작성합니다.
먼저 프로젝트의 루트 디렉토리에 . dockerignore라는 새 텍스트 파일을 만들고 다음을 작성합니다.
.git
node_modules
npm-debug.log
위의 코드는 이 세 경로를 제외하고 이미지 파일에 포함하지 않아야 함을 나타냅니다. 제외할 경로가 없는 경우 파일을 그대로 두어도 됩니다.
그런 다음 프로젝트의 루트 디렉토리에 새 텍스트 파일 Dockerfile을 만들고 다음을 내용.
FROM node:8.4
COPY . /app
WORKDIR /app
RUN npm install --registry=https://...org
EXPOSE 3000
위의 코드는 다음과 같은 의미를 가진 총 5줄로 구성되어 있습니다.
- FROM node:8.4: 이 이미지 파일은 공식 노드 이미지를 상속하며, 콜론은 레이블을 나타내며, 여기서 레이블은 8.4, 즉 노드 버전 8.4입니다.
- COPY . /app: 현재 디렉터리에 있는 모든 파일을 이미지 파일의 /app 디렉터리에 복사합니다.
- WORKDIR /app: 다음 작업 경로를 /app로 지정합니다.
- npm 설치 실행: /app 디렉토리에서 npm 설치 명령을 실행하여 종속 요소를 설치합니다. 설치 후에는 모든 종속 요소가 이미지 파일로 패키징됩니다.
- EXPOSE 0030: 컨테이너 포트 3000을 노출하여 이 포트에 외부 연결을 허용합니다.
、이미지 파일 생성
$ docker image build -t koa-demo .
#
$ docker image build -t koa-demo:0.0.1 .
위 코드에서 -t 매개변수는 이미지 파일의 이름을 지정하는 데 사용되며, 그 뒤에 콜론으로 레이블을 지정합니다. 지정하지 않으면 기본 레이블은 최신이며, 끝에 있는 점은 Docker파일 파일이 있는 경로를 나타내므로 위 예제에서는 현재 경로이므로 점입니다.
실행이 성공하면 새로 생성된 이미지 파일 koa-demo를 확인할 수 있습니다.
$ docker image ls
, 컨테이너 생성
docker 컨테이너 실행 명령은 이미지 파일에서 컨테이너를 생성합니다.
$ docker container run -p 8000:3000 -it koa-demo /bin/bash
#
$ docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash
위 명령의 각 매개변수의 의미는 다음과 같습니다:
- -p 매개변수: 컨테이너의 포트 3000을 로컬 머신의 포트 8000에 매핑합니다.
- it 매개변수: 컨테이너의 셸이 현재 셸에 매핑된 다음 로컬 창에 입력한 명령이 컨테이너에 전달됩니다.
- koa-demo:0.0.1: 이미지 파일의 이름입니다.
- /bin/bash: 컨테이너가 시작된 후 실행되는 첫 번째 내부 명령입니다. 사용자가 셸을 사용할 수 있도록 Bash가 시작되는 곳입니다.
문제가 없으면 위 명령을 실행하면 명령줄 프롬프트로 돌아갑니다.
root@66d80f4aaf1e:/app#
이는 이미 컨테이너 내부에 있으며 반환되는 프롬프트가 컨테이너 내부의 셸 프롬프트임을 의미합니다. 다음 명령을 실행합니다.
root@66d80f4aaf1e:/app# node demos/01.js
이 시점에서 Koa 프레임워크가 실행 중입니다. 로컬 브라우저를 열고 방문하면 demo 찾을 수 없음"이 표시되는데, 이는 데모에서 경로를 작성하지 않기 때문입니다.
이 예제에서 노드 프로세스는 Docker 컨테이너의 가상 환경 내에서 실행됩니다. 프로세스가 접하는 파일 시스템 및 네트워크 인터페이스는 가상이므로 로컬 파일 시스템 및 네트워크 인터페이스와 분리되어 있으므로 컨테이너와 물리적 머신 간의 포트 매핑을 정의해야 합니다.
이제 컨테이너의 명령줄에서 Ctrl + c를 눌러 노드 프로세스를 중지한 다음 Ctrl + d를 눌러 컨테이너를 종료합니다. 또는 docker 컨테이너 종료로 컨테이너를 종료할 수 있습니다.
# 로컬 컴퓨터의 다른 터미널 창에서 컨테이너의 ID를 조회합니다.
$ docker container ls
# 지정된 컨테이너를 중지합니다.
$ docker container kill [containerID]
컨테이너는 실행이 중지된 후에도 사라지지 않으므로 다음 명령어로 컨테이너 파일을 삭제하세요.
# 컨테이너의 ID 찾기
$ docker container ls --all
# 지정된 컨테이너 파일 삭제
$ docker container rm [containerID]
컨테이너가 종료된 후 컨테이너 파일을 자동으로 삭제하려면 docker 컨테이너 실행 명령의 --rm 매개변수를 사용할 수도 있습니다.
$ docker container run --rm -p 8000:3000 -it koa-demo /bin/bash
CMD 명령
이전 섹션의 예제에서는 컨테이너가 시작된 후 명령 노드 demos/01.js를 수동으로 입력해야 했지만, 이 명령어를 Docker파일에 작성하면 컨테이너가 시작된 후 이미 명령이 실행되어 더 이상 수동으로 입력할 필요가 없습니다.
FROM node:8.4
COPY . /app
WORKDIR /app
RUN npm install --registry=https://...org
EXPOSE 3000
CMD node demos/01.js
위의 Docker파일 안에는 컨테이너가 시작된 후 노드 demos/01.js가 자동으로 실행됨을 나타내는 마지막 줄에 CMD 노드 demos/01.js가 추가로 있습니다.
RUN 명령과 CMD 명령의 차이점이 무엇인지 궁금할 수 있습니다. 간단히 말해, RUN 명령은 이미지 파일의 빌드 단계에서 실행되고 그 결과가 이미지 파일에 패킹되며, CMD 명령은 컨테이너가 시작된 후에 실행됩니다. 또한 Docker파일에는 여러 개의 RUN 명령이 포함될 수 있지만 CMD 명령은 하나만 포함될 수 있습니다.
CMD 명령을 지정한 후에는 docker 컨테이너 실행 명령에 추가 명령을 지정할 수 없으며, 그렇지 않으면 CMD 명령을 덮어쓰게 된다는 점에 유의하세요. 이제 컨테이너를 시작하려면 다음 명령을 사용할 수 있습니다.
$ docker container run --rm -p 8000:3000 -it koa-demo:0.0.1
、이미지 파일 게시
컨테이너가 성공적으로 실행되면 이미지 파일의 유효성이 확인됩니다. 이 시점에서 다른 사람들이 사용할 수 있도록 웹에서 이미지 파일을 공유하는 것을 고려할 수 있습니다.
먼저 hub.docker.com 또는 cloud.docker.com으로 이동하여 계정을 등록합니다. 그런 다음 다음 명령어로 로그인합니다.
$ docker login
그런 다음 로컬 이미지에 사용자 이름과 버전으로 레이블을 지정합니다.
$ docker image tag [imageName] [username]/[repository]:[tag]
#
$ docker image tag koa-demos:0.0.1 ruanyf/koa-demos:0.0.1
이미지 파일에 사용자 아이디를 표시하지 않고 다시 작성할 수도 있습니다.
$ docker image build -t [username]/[repository]:[tag] .
마지막으로 이미지 파일을 게시합니다.
$ docker image push [username]/[repository]:[tag]
성공적으로 게시했으면 hub.docker.com에 로그인하면 게시된 이미지 파일을 볼 수 있습니다.
IX. 기타 유용한 명령
도커의 주요 용도는 위와 같으며, 그 외에도 매우 유용한 몇 가지 명령이 있습니다.
도커 컨테이너 시작
이전 도커 컨테이너 실행 명령은 새 컨테이너를 생성하며, 이 명령이 실행될 때마다 새 컨테이너가 만들어집니다. 같은 명령을 두 번 실행하면 동일한 컨테이너 파일이 두 개 생성됩니다. 컨테이너를 재사용하려면 이미 생성되어 실행이 중지된 컨테이너 파일을 시작하는 데 사용되는 docker container start 명령을 사용하세요.
$ docker container start [containerID]
도커 컨테이너 중지
도커 컨테이너 종료 명령은 컨테이너를 종료하는 데 사용되며, 이는 컨테이너 내부의 마스터 프로세스에 SIGKILL 신호를 보내는 것과 동일합니다. 도커 컨테이너 종료 명령도 컨테이너를 종료하는 데 사용되며, 이는 컨테이너 내부의 마스터 프로세스에 SIGTERM 신호를 보낸 다음 일정 시간이 지난 후 SIGKILL 신호를 보내는 것과 동일합니다.
$ docker container stop [containerID]
이 두 신호의 차이점은 SIGTERM 신호를 수신한 애플리케이션이 스스로 정리할 수도 있지만 신호를 무시할 수도 있다는 점입니다. 시그킬 신호를 수신하면 즉시 강제로 종료되며 진행 중인 모든 작업이 손실됩니다.
도커 컨테이너 로그 도커 컨테이너 로그 명령은 도커 컨테이너의 출력, 즉 컨테이너 내부 셸의 표준 출력을 보는 데 사용됩니다. docker run 명령이 -it 매개 변수 없이 컨테이너를 실행하는 경우 이 명령을 사용하여 출력을 봅니다.
$ docker container logs [containerID]
도커 컨테이너 실행
도커 컨테이너 실행 명령은 실행 중인 도커 컨테이너를 입력하는 데 사용됩니다. docker 실행 명령이 -it 매개변수 없이 컨테이너를 실행하는 경우 이 명령으로 컨테이너에 들어갈 수 있습니다. 컨테이너에 들어가면 컨테이너 셸에서 명령을 실행할 수 있습니다.
$ docker container exec -it [containerID] /bin/bash
도커 컨테이너 CP
docker 컨테이너 cp 명령은 실행 중인 Docker 컨테이너에서 로컬 컴퓨터로 파일을 복사하는 데 사용됩니다. 현재 디렉터리에 복사본을 작성하는 방법은 다음과 같습니다.
$ docker container cp [containID]:[/path/to/file] .




