Docker 배치 node.js 응용

9790 단어 Web
전언
도커가 뭐예요?
통속적으로 docker는 용기를 만들고 관리하는 기술이다.그럼 용기가 뭐예요?용기의 기능은 가상 기기와 매우 비슷하여 모두 물리 호스트에서 여러 개의 운영체제를 운행하는 기술이다.가장 큰 차이점은 가상 기기 기술은 하드웨어를 가상한 후에 그 위에 완전한 운영체제를 운행하고 이 시스템에서 필요한 응용 프로세스를 다시 운행하는 것이다.한편, 용기 내의 응용 프로세스는 숙주의 내부 핵에 직접 실행되고 용기 안에 자신의 내부 핵이 없고 하드웨어 가상도 하지 않는다.따라서 용기는 전통적인 가상 기기보다 더욱 가볍다.
기본 개념
  • 미러 Docker 미러는 용기가 실행될 때 필요한 프로그램, 라이브러리, 자원, 설정 등 파일을 제공하는 것 외에 실행할 때 준비된 설정 파라미터(예를 들어 익명 볼륨, 환경 변수, 사용자 등)도 포함한다.미러에는 동적 데이터가 포함되지 않으며 구성한 후에도 컨텐츠가 변경되지 않습니다.우리는 명령이나 일부 기초 렌즈를 통해 자신이 필요로 하는 렌즈를 구축할 수 있다.
  • 용기 용기는 거울의 실체로 볼 수 있고 용기는 창설, 시작, 정지, 삭제, 정지 등으로 볼 수 있다.

  • docker를 사용하는 이유
    우리는 node를 배치하고 있다는 것을 안다.js의 응용 시 node와 npm가 설치되어 있고 데이터베이스와 관련이 있으면 데이터베이스 환경과 데이터베이스 정보가 필요합니다.응용 프로그램을 시작할 때 프로그램에 의존하는 제3자 라이브러리를 설치해야 한다.단순히 한 대의 기계에 배치하는 것만으로도 괜찮다.그러나 만약에 우리가 많은 기계에 이 응용을 배치해야 한다면 일반적인 방법에 따라 여러 기계에서 응용에 필요한 환경을 끊임없이 반복해서 구축하는 것은 시간이 많이 걸리는 과정이다.만약 우리가 docker 형식을 사용한다면 로컬에서 프로그램의 렌즈 (프로그램 실행에 필요한 모든 환경을 포함) 를 만들 수 있고, 원격 호스트에서 우리가 만든 렌즈를 업로드한 다음, docker를 사용하여 렌즈에 따라 프로그램 프로세스를 실행하는 용기를 만들 수 있으며, 몇 줄의 명령을 사용하면 여러 호스트에서 프로그램을 실행할 수 있다.
    환경 설명
    이 문서의 모든 작업은 Ubuntu 16.0에서 수행됩니다.
    사전 준비
    본문의 독자는node에 익숙하다.js 기술, 이미 node를 사용할 수 있습니다.js는 간단한 응용을 구축합니다.따라서 본고의 설명에는 구체적인 node가 포함되지 않는다.js 코드 튜토리얼.이 밖에 본문의 node.js는 MySql 저장소를 디자인하는데 데이터베이스와 관련이 없는 것은 3절부터 볼 수 있다.
    1. docker 설치
    참고 문장
    2. MySQL 용기 제작
    MySQL 데이터베이스 미러링 잡아당기기
    docker pull mysql/mysql-server:tag  

    tag: 가져오고 싶은 거울의 버전 번호(예를 들어 5.5, 5.6, 5.7, 8.0, or latest).여기 쓰는 건 5.7이에요.8.0 또는 latest를 사용하는 것을 권장하지 않습니다.새 버전의 mysql 동작은 이전과 다릅니다. 인터넷의 대다수 강좌에 따라 처리하면 예상치 못한 오류가 발생할 수 있습니다.본인은 이미 구덩이를 밟았다.
    MySQL 데이터베이스 컨테이너 실행
    sudo docker run --name db-manage -d -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 mysql/mysql-server:5.7  

    -name db-manage: MySQL 미러가 실행 중인 컨테이너의 이름 - d detach를 지정하여 백그라운드에서 컨테이너를 실행합니다. -e MYSQL_ROOT_PASSWORD=123(또는 – env) 환경 변수 - 파라미터가 docker가 제공하는 환경 변수 MYSQLROOT_PASSWORD=password: 데이터베이스 루트 계정 비밀번호를 password-p3306:3306(또는 -publish)로 설정하면 엔진 사용자가 용기 안의 3306 포트를 외부의 3306 포트에 비추고 싶다고 알려줍니다.
    mysql/mysql-server:5.7: 끌어낸 mysql 데이터베이스 렌즈입니다
    외부에서 데이터베이스에 접근할 수 있는 권한 추가
    MySQL은 기본적으로 외부 네트워크에서 액세스할 수 없으며 기본적으로 로컬 IP(127.0.0.1)만 액세스할 수 있습니다.우리는 이따가 node를 실행해야 한다.js의 용기는 MySQL 서비스를 실행하는 용기에 접근할 수 있는 권한을 가지고 있습니다.혹시 의심스러울지도 몰라요. 모두 한 기계에 있는데 IP 주소가 있어야 하는 거 아니에요?그렇지 않습니다.실제 호스트는 그 위에서 실행되는 용기마다 IP를 따로 분배하기 때문에 용기마다 IP 주소가 다르다.
    1. MySQL 컨테이너에 들어가기
    sudo docker exec -it db-manage bash

    db-manage: MySQL을 실행하는 컨테이너 이름
    2. 컨테이너에서 Mysql 서비스에 들어가기
    mysql -uroot -ppassword

    root: 데이터베이스 사용자 이름password: 용기를 실행할 때 설정한 데이터베이스 비밀번호
    3. 외부 액세스 권한 추가
    다음 명령을 실행합니다. (이전에 MySQL 버전이 5.7보다 높으면 오류가 발생합니다. 다음 버전의 MySQL에 사용자 권한을 추가하는 명령은 아래에 보여 주지 않기 때문에, 홈페이지를 참고하십시오.)
    #      
    USE mysql;
    #  root      ip    
    GRANT ALL PRIVILEGES ON *.* TO "root"@"%" IDENTIFIED BY "password" WITH GRANT OPTION; 
    #       
    FLUSH PRIVILEGES;

    MySQL 명령의 번호가 나뉘어진 끝에 FLUSH PRIVILEGES 업데이트 권한 설정을 사용해야 유효합니다. 지정한 IP 연결에 MySQL 데이터베이스에만 권한을 부여하려면 명령을 사용하십시오. (MySQL에 사용자 권한을 더 추가하면 이 글을 참고할 수 있습니다)
    #  root    192.168.1.3    
    GRANT ALL PRIVILEGES ON *.* TO "root"@"192.168.1.3" IDENTIFIED BY "password" WITH GRANT OPTION; 

    3. 노드 프로그램 용기 제작
    node를 끌어당기다.js 기본 이미지
    sudo docker pull node:tag  

    tag에서 가져오려는 미러의 버전 번호입니다.여기는 9.11.2-jessie를 사용하여 docker 공공 거울 홈페이지 참조(/node/">https://hub.docker.com//node/)
    자신의 노드를 만들어라.js 서비스 미러
    사전 요구 사항: 1.실행 가능한 node가 있습니다.js 프로그램 2.node.js 링크 데이터베이스 설정은 다음과 같습니다.
    const address = {
        host     : process.env.DATABASE_HOST || 'localhost',
        user     : 'root',
        password : 'choosealife',
        port:  process.env.PORT || '3306',
        database: 'manage',
    };

    1. 프로그램 폴더 루트 디렉터리에 들어가기
    cd node-app

    2. Dockerfile 파일 만들기(파일 이름은 변경할 수 없음)
        touch Dockerfile  
    #        node     node:
    FROM node:9.11.2-jessie
    #                     ,   'manage'     .
    ADD . /manage
    #         
    RUN cd /manage;
    npm install --production
    #         
    EXPOSE 3000
    #       (manage ADD        , server.js            )
    CMD ["node","/manage/server.js"]
    

    3. 미러링 만들기
     sudo docker build -t node-image-name .

    참고: node-imge-name은 미러 이름입니다.명령 뒤에 하나..잊으면 안돼.
    4. node 프로그램 미러링을 실행하고 실행 중인 MySQL 컨테이너와 연결
    sudo docker run --name manage-system -it -p 3000:3000 --link db-manage:db-manage -e DATABASE_HOST=db-manage  node-manage-image
  • docker run -it는 용기에서 docker 렌즈를 실행하고 인터랙티브 터미널을 사용합니다.
  • -p 3000: 3000은 숙박 호스트의 3000 포트를 컨테이너의 3000 포트에 매핑
  • linkdb-manage:db-manage는db-manage라는 용기에 연결되고db-manage로 이 용기를 가리킨다
  • -e DATABASE_HOST=db-manage는 node.js 데이터베이스 연결에 설정된 환경 변수 DATABASEHOST가 db-manage
  • 로 설정됨
  • node-image-name는 용기에서 실행되는 렌즈 이름
  • 4. docker를 원격 창고에 업로드
  • docker hub 참고 문장
  • 에 업로드
  • 텐센트 클라우드 서버에 올린 참고 기사
  • 아리운 서버에 올린 참고 기사
  • 5. 자주 사용하는 docker 명령
    1. 기본 미러링
    sudo docker pull [  ] [Docker Registry   [:   ]/]   [:  ]

    2. 미러링 만들기
    #           Dockerfile, version    ,    latest, .       
    sudo docker build -t imgae-name:version .

    3. 미러 보기
    sudo docker image ls

    4. 미러 제거
    sudo docker image rm image-name

    5. 미러 생성 컨테이너 지정
    sudo docker run -it image-name

    6. 이미 존재하는 컨테이너를 시작합니다.
    sudo docker container start container-name

    7. 이미 실행 중인 컨테이너 중지
    sudo docker container stop container-name

    8. 실행 중인 용기를 다시 시작합니다
    sudo docker container restart container-name

    9. 모든 컨테이너 보기
    sudo docker container ls -a

    10. 컨테이너 삭제
    #       ,   -f             
    sudo docker container rm  container-name
    #              
     sudo docker container prune

    좋은 웹페이지 즐겨찾기