Docker부터 시작

소개하다.


Docker는 웹 응용 프로그램을 위탁 관리하는 가장 유행하는 기술 중의 하나가 되고 있다.소프트웨어 애플리케이션을 패키지, 배포 및 실행하는 데 사용되는 툴 모음입니다.개발자는 이미지 패키지라는 패키지를 만들기 위해 프로필을 작성할 수 있다. 이 패키지는 분산되고 웹 기반 저장소 (일부는 공공이고 일부는 개인적) 를 통해 나누어 준다.저장소에서 다운로드한 이미지는 응용 프로그램을 실행하는 컨테이너라는 격리 환경을 만들기 위해 템플릿으로 사용됩니다.한 호스트에 많은 용기가 나란히 존재할 수 있다.메모리와 CPU 리소스는 컴퓨터에서 실행되는 모든 컨테이너 간에 공유되지만 각 컨테이너에는 자체적으로 완전히 격리된 파일 시스템과 환경이 있습니다.이것은 매우 편리하다. 원인은 매우 많지만, 가장 중요한 것은 호스트에 하나 이상의 응용 프로그램을 설치하고 실행하는 과정을 간소화하는 것이다.

Docker 설치


MacOS나 Windows에서 Docker를 설치하는 가장 좋은 방법은 Docker Desktop을 설치하는 것입니다.Docker의 전체 설치와 관리를 위한 GUI를 제공합니다.GUI를 사용하여 Docker 데몬을 시작하거나 중지하거나 Docker 플랫폼에 소프트웨어 업데이트를 설치하도록 관리할 수 있습니다.(추가 장점: Docker Desktop은 로컬 Kubernetes 그룹을 관리할 수 있습니다. 이것은 본문과 무관하지만, Kubernetes를 사용하기 시작하는 간단한 방법을 제공합니다. 이것은 확장된 호스트에서 실행 용기를 관리할 수 있는 플랫폼입니다.)Linux 사용자는 릴리스 패키지 관리자에서 docker를 설치할 수 있지만, docker 데스크톱 GUI는 포함되지 않습니다.가장 유행하는 Linux 릴리스의 설치 지침은 Docker 설명서에 나와 있습니다.

타사 컨테이너 사용


컴퓨터에 Docker를 설치한 후 먼저 타사 이미지 기반 컨테이너를 실행합니다.이 연습은 Docker의 힘을 빨리 보여주는 좋은 방법이다.먼저 원하는 시스템 터미널을 열고 docker pull nginx을 입력합니다.

이 명령은 Docker Hub에서 공식 nginx 이미지를 다운로드합니다.Docker Hub은 Docker 이미지의 호스팅 호스트입니다.너는 그것을 Docker의 npm로 상상할 수 있다.우리는 이미 최신 버전의nginx 이미지를 내놓았지만, npm와 마찬가지로 명령을 docker pull nginx:1.18으로 변경해서 다운로드할 특정 버전을 선택할 수 있습니다.다운로드할 수 있는 버전을 포함한 이미지에 대한 자세한 내용은 Docker Hub 페이지에서 확인할 수 있습니다.
현재 우리는 이미 그림을 다운로드했다. 우리는 그것을 사용하여 로컬 기계에 용기를 만들 수 있다. 우리가 그것을 다운로드하는 것처럼 간단하다.docker run -d -p 8080:80 nginx을 실행하여nginx 용기를 시작합니다.나는 명령에 몇 가지 옵션을 추가했다.기본적으로,nginx는 포트 80에서 실행되며, 시스템 설정이 포트 80을 공개하는 것을 막을 수 있습니다.따라서 -p 8080:80을 사용하여 컨테이너의 포트 80을 로컬 시스템의 포트 8080에 연결합니다.우리는 -d을 사용하여 실행 중인 용기와 터미널 세션을 분리합니다.이것은 같은 터미널을 계속 사용할 수 있고,nginx 용기가 백엔드에서 계속 실행될 수 있도록 합니다.
현재 웹 브라우저를 사용하여 http://localhost:8080으로 이동하고 Docker 내부에서 제공하는nginx 환영 페이지를 볼 수 있습니다.docker kill 명령을 사용하여 백엔드에서 실행되는nginx 용기를 정지할 수 있습니다.먼저 docker ps을 사용하여 용기 ID를 얻고 docker kill <container ID>을 실행할 수 있습니다.현재 http://localhost:8080으로 다시 이동하면 오류가 발생하고 docker ps에 실행 중인 용기가 없습니다.

게시된 이미지만 다운로드하고 실행하는 기능은 Docker의 가장 강력한 기능 중 하나입니다.Docker Hub은 이미 베이킹된 수백만 장의 그림을 가지고 있는데, 그 중 많은 그림들이 Docker Hub에 포함된 소프트웨어 개발자의 정식 지원을 받았다.따라서 맞춤형 설치 프로세스를 따르지 않고도 서버와 워크스테이션에 타사 소프트웨어를 빠르고 쉽게 배포할 수 있습니다.하지만 이는 Docker가 할 수 있는 전부가 아닙니다.또한 이를 사용하여 자신의 이미지를 구축할 수 있어 소프트웨어의 간소화 배치 과정에서 이익을 얻을 수 있습니다.

자체 구축


앞에서 말한 바와 같이 Docker는 제3자로부터 온 소프트웨어 응용 프로그램을 실행하기에 적합할 뿐만 아니라Docker가 제공하는 최적화 배치 작업 흐름에 따라 응용 프로그램이 자신의 이미지를 구축하고 게시할 수 있습니다.Docker 이미지는 2개의 프로파일 Dockerfile.dockerignore으로 구성됩니다.Dockerfile은 그 중에서 가장 중요한 것이다.이것은 docker가 용기에서 프로그램을 실행하는 방법을 알려주는 설명을 포함합니다..dockerignore 파일은 Git의 .gitignore 파일과 유사합니다.컨테이너 이미지에 복사할 수 없는 항목 파일 목록이 포함되어 있습니다.
이 예에서, 우리는 죽어가는 'Hello World' 프로그램을 Dockerize할 것이다. 이 프로그램은 Node로 작성된 것이다.js와 Express.예제 항목은 다음과 같이 package.jsonindex.js입니다.
소포.json:
{ 
    "name": "hiwrld",
    "version": "1.0.0",
    "description": "hi world",
    "main": "index.js",
    "scripts": {
      "start": "node index.js"
    },
    "author": "Adam Clarke",
    "license": "MIT",
    "dependencies": {
      "express": "^4.17.1"
    }
  }
색인js:
const express = require('express')
const app = express()
const port = 3000
const greeting = process.env.GREETING

app.get('/', (req, res) => {
 res.send('Hello World!')
})

app.listen(port, () => {
 console.log('Example app listening at http://localhost:' + port)
})
package.json은 저희의 단일express 의존항을 관리하고 프로그램을 시작하는 데 사용할 npm start 명령을 설정합니다.index.js에서, 나는 기본적인express 프로그램을 정의했는데, 이것은 인사말로 루트의 요청에 응답한다.
이 프로그램을 연결하는 첫 번째 단계는 Dockerfile을 만드는 것입니다.빈 Dockerfile에 대해 우리가 해야 할 첫 번째 일은 FROM 명령을 추가하는 것이다.이것은 Docker가 응용 프로그램 이미지의 기반으로 사용할 이미지를 알려줍니다.저장소에 게시된 모든 Docker 이미지는 FROM 명령어에서 사용할 수 있습니다.우리는 이미 노드를 만들었기 때문이다.js 프로그램, 정식 노드 docker 이미지를 사용할 것입니다.따라서 Node를 설치할 필요가 없습니다.우리 자신에게 의지하다.빈 Dockerfile 상단에 다음을 추가합니다.
FROM node:15
프로그램이 실행될 수 있도록 npm 의존항을 용기에 설치해야 합니다.COPYRUN 명령을 사용하여 package.json 파일(로컬 설치 모듈에서 생성된 package-lock.json)을 복제하고 npm install을 실행합니다.우리는 또한 WORKDIR 명령을 사용하여 폴더를 만들고 이미지를 만드는 작업 디렉터리를 만들 것이다.Dockerfile의 아래쪽에 다음을 추가합니다.
# Create a directory for the app and make it the working directory
WORKDIR /usr/src/app

# Copy package files from the local filesystem directory to the working directory of the container
# You can use a wildcard character to capture multiple files for copying. In this case we capture
# package.json and package-lock.json
COPY package*.json ./

# now install the dependencies into the container image
RUN npm install
현재 Docker가 응용 프로그램 의존 항목을 설치할 수 있도록 이미지를 설정했습니다. 응용 프로그램 코드를 복사하고 Docker가 응용 프로그램을 어떻게 실행하는지 알려야 합니다.우리는 다시 COPY을 사용할 것이지만, 또한 CMDEXPOSE 지령을 추가할 것이다.이것은 Docker에게 프로그램을 시작하는 방법과 어떤 포트가 실행될 수 있는지 설명할 것입니다.Dockerfile에 다음 행을 추가합니다.
# Copy everything from the local filesystem directory to the working directory. Including
# the source code
COPY . .

# The app runs on port 3000
EXPOSE 3000

# Use the start script defined in package.json to start the application
CMD ["npm", "start"]
완료한 Dockerfile은 다음과 같습니다.
FROM node:15

# Create a directory for the app and make it the working directory
WORKDIR /usr/src/app

# Copy package files from the local filesystem directory to the working directory of the container
# You can use a wildcard character to capture multiple files for copying. In this case we capture
# package.json and package-lock.json
COPY package*.json ./

# now install the dependencies into the container image
RUN npm install

# Copy everything from the local filesystem directory to the working directory. Including
# the source code
COPY . .

# The app runs on port 3000
EXPOSE 3000

# Use the start script defined in package.json to start the application
CMD ["npm", "start"]
이제 완전한 Dockerfile이 생겼습니다. .dockerignore을 만들어야 합니다.프로젝트가 간단하므로 로컬 노드 modules 폴더만 무시할 수 있습니다.이것은 로컬 설치된 모듈이 npm을 사용하여 용기 이미지에 설치된 후 Dockerfile의 COPY . . 명령을 통해 로컬 디스크에서 복사되지 않도록 합니다.npm 디버그 로그는 필요하지 않으며, Docker 이미지의 저장 공간을 최대한 줄이는 것이 최선이기 때문에 무시할 것입니다.프로젝트 디렉토리에 다음 .dockerignore을 추가합니다.
node_modules
npm-debug.log
더 큰 프로젝트에서 .git 폴더와 프로그램 실행에 필요하지 않은 텍스트 및/또는 프로필, 예를 들어 지속적인 통합 프로필이나 프로젝트 자술 파일을 추가해야 할 수도 있습니다.
현재 Docker 프로필이 있습니다. 이미지를 만들어서 실행할 수 있습니다.Docker 이미지를 구축하기 위해 터미널을 열고 Dockerfile이 있는 위치로 이동한 다음 docker build -t hello-world .을 실행합니다.Docker는 작업 폴더에서 Dockerfile을 찾고 'Hello World' 탭을 만드는 그림을 만들 것입니다."탭"은 이름일 뿐입니다. 나중에 그림을 인용할 수 있습니다.

그림 구축이 완료되면 실행할 수 있습니다!이전에nginx를 사용했을 때와 마찬가지로 docker run -d -p 3000:3000 hello-world만 실행하면 됩니다.현재, 당신은 브라우저를 http://localhost:3000으로 내비게이션할 수 있으며, 우리의 예시 응용 프로그램은 예의 바르게 당신을 환영할 것입니다.이전처럼 docker psdocker kill을 사용하여 실행 중인 용기를 검증하거나 정지할 수 있습니다.

결론


지금까지 우리는 Docker가 제공하는 힘을 똑똑히 보아야 한다.Docker는 클라우드에서 제3자 소프트웨어와 응용 프로그램을 실행하는 것을 매우 쉽게 할 뿐만 아니라 사용자에게 도구를 제공하여 사용자가 자신의 응용 프로그램을 쉽게 배치할 수 있도록 합니다.여기서 우리는 단지 Docker의 능력을 초보적으로 이해했을 뿐이다.응용 프로그램에서 Docker 및 기타 클라우드 네이티브 기술을 사용하는 방법에 대한 자세한 내용은 This Dot 블로그를 참조하십시오.
현대 인터넷 컨설팅 회사로 기업의 디지털화 전환을 돕는 데 주력하고 있다.React, Angular, Vue, 웹 구성 요소, GraphQL, Node, Bazel 또는 Polymer에 대한 전문가 아키텍처 지침, 교육 또는 컨설팅은 thisdotlabs.com을 참조하십시오.
이런 인터넷 매체는 모든 사람을 위해 포용성과 교육적인 네트워크를 만드는 데 전념한다.이벤트, 팟캐스트, 무료 콘텐츠를 통해 현대 인터넷의 최신 진전을 알 수 있습니다.자세한 내용은 thisdot.co을 참조하십시오.

좋은 웹페이지 즐겨찾기