Docker 설치 및 응용

12225 단어 nginxpm2docker
Docker 가 뭐야?
Docker 는 가상 용기 기술 로 본질 적 으로 홈 호스트 에서 실행 되 는 프로 세 스 (공유 커 널) 로 네 임 스페이스 (Namespaces) 를 통 해 자원 격 리 를 실현 하고 CGroups (Control Groups) 를 통 해 자원 의 한 도 를 실현 하 는 동시에 쓰기 시 복사 (copy - on - write) 를 통 해 효율 적 인 파일 작업 을 수행 합 니 다.
Namespaces 격 리: 파일 시스템, 네트워크, 프로 세 스 간 통신, 호스트 이름, 프로 세 스 번호, 사용자 권한
CGroups 한도: CPU, 메모리, 디스크 I / O, 대역 폭
copy - on - write: 여러 용기 사이 에 미 러 를 공유 합 니 다.
1. docker 설치
1. 설치
설치 하기 전에 docker 가 설치 되 어 있 는 지, 그리고 Liux 커 널 이 요 구 를 만족 시 키 는 지 확인 합 니 다.
#   docker
$ docker -v

#     ,     >3.10
$ uname -r

1.) 빠 른 설치
아래 단축 명령 으로 설치
$ curl -sSL https://get.docker.com/ | sh

2.) 수 동 설치
패키지 에 의존 하여 수 동 으로 설치 할 수도 있 습 니 다 (centos 를 예 로 들 면)
#   yum 
$ sudo yum update

#      
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

#     docker   
$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#        docker,  
$ yum list docker-ce --showduplicates | sort -r
$ sudo yum install docker-ce

2. docker 마 운 트 해제
# Ubuntu|Debian
$ sudo apt-get remove docker-ce docker-ce-cli

# centOS
$ sudo yum remove docker docker-common docker-selinux docker-engine container-selinux

Docker 마 운 트 해제 기본 값 은 원래 Docker 의 미 러, 네트워크, 저장 볼 륨 등 을 유지 합 니 다. Docker 를 새로 설치 하려 면 디 렉 터 리 / var / lib / docker 를 삭제 해 야 합 니 다.
3. docker 서비스
#   /    
$ sudo systemctl start docker
$ sudo systemctl stop docker

#       
$ sudo systemctl enable docker

2. docker 상용 명령
docker 시스템 설정 정보 보기
$ sudo docker info

1.) sudo 권한 설정
docker 명령 을 사용 할 때마다 sudo 가 필요 합 니 다. 귀 찮 습 니 다. 다음 명령 을 통 해 현재 사용 자 를 docker 부속 그룹 에 추가 할 수 있 습 니 다.
$ sudo usermod -aG docker        #          

2.) 용기 / 미 러 보기
$ docker ps  #       
$ docker images  #       

#       
$ docker inspect xxx

#     top  
$ docker top xxx

3.) 미 러 다운로드
용 기 를 만 들 기 전에 원 격 미 러 를 내 릴 수도 있 고 만 들 때 다운로드 할 수도 있 습 니 다.
#        
$ docker search xxx
#   
$ docker pull xxx

4.) 새 용기
최소 매개 변수 생 성
# -d:      ,-it:          ,       console  
$ docker run -d -it --name     --restart always    

더 많은 매개 변수: 맵 포트, dns, 지속 적 인 저장 볼 륨, 프로 세 스 초기 화 용기 종료 방지
# -p:    ,--dns:  dns     (/etc/resolv.conf),-v:    (     ),/bin/sh:        ,       
$ docker run -dit -p     :     --dns=8.8.8.8 --name     -v     :     --restart always   :   /bin/sh

docker 에 centos 를 설치 하면 systemctl 명령 관리 프로 세 스 를 사용 할 수 없습니다. 다음 오 류 를 보고 하 십시오. D - Bus 연결 을 받 지 못 했 습 니 다.
원인: systemd 프로 세 스 를 시작 할 수 있 는 특권 이 필요 합 니 다. 솔 루 션:
docker run -dit --privileged      init

5. 용기 시동 / 정지
$ docker start | restart xxx  #   /  

$ docker stop xxx  #     
$ docker kill xxx  #     ,    

6.) 용기 에 들어간다
# /bin/sh /bin/bash   sh bash
$ docker exec -it xxx /bin/sh

#       
$ docker exec -it xxx sh -c "chmod +x ./app/entry.sh && ./app/entry.sh"

7. 용기 / 미 러 삭제
#          
$ docker stop xxx 
$ docker rm xxx

#     
$ docker rm xxx -f

#     
$ docker rmi xxx  # -f     

8. 용기 / 미 러 이름 변경
#     
$ docker rename          

#     
$ docker tag         #        ,  id  
$ docker rmi    

3. 미 러 구축
1. 수 동 으로 미 러 구축
기본 미 러 로 용 기 를 만 들 고 수 동 으로 모든 것 을 설치 한 다음 용기 로 미 러 를 만 듭 니 다.
$ docker commit         

2. 미 러 자동 구축: Dockerfile
1.) Dockerfile 설정
새 Dockerfile 을 만 들 고 관련 내용 을 설정 합 니 다. 다음은 alpine 기반 pm2 를 설정 하고 node 응용 을 실행 하 는 것 을 예 로 들 겠 습 니 다.
#      
FROM alpine

#      
MAINTAINER hoby 

#     
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo 'Asia/Shanghai' > /etc/timezone

# RUN  :       ,        
RUN echo 'nameserver 8.8.8.8' >> /etc/resolv.conf \
    && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
    && apk add --update-cache bash \
    && apk add bash \
    && apk add nodejs && apk add npm \
    && npm config set registry https://registry.npm.taobao.org

#       ,   
WORKDIR /app

#       
ENV NODE_ENV=production

#       www.js entrypoint.sh   
COPY ./app /app

#  COPY  , ADD      
#ADD ./x.tar.xz /app

#   entrypoint    
RUN chmod a+x ./entrypoint.sh

#           ,    docker run       
ENTRYPOINT ["/bin/sh", "./entrypoint.sh"]

#             ,  docker run       
#CMD ["/bin/sh"]

#     
EXPOSE 3000

예제 관련 파일:
./app/www.js
// node server
var http = require('http')

http.createServer((req, res) => {
    res.end('hello world!')
}).listen(3000)

console.log('node server is running at 3000...')

./app/entrypoint.sh
#!/bin/bash
node /app/www.js

미 러 구축:
$ docker build -t myimage:latest .  #       ,'.'      Dockerfile  

용기 새로 만 들 고 시작 하기:
$ docker run -dit -p 8000:3000 --dns=8.8.8.8 --name     --restart always myimage:latest

2.) Dockerfile 구축 요약
a. 구축 할 때 패 키 지 를 다운로드 할 수 없 으 며, 용기 dns 가 잘못 되 었 음 을 설명 합 니 다. / etc / resolv. conf 를 수정 해 야 합 니 다.
b. alpine 미 러 기본 sh 터미널, bash 설치
c. 하나의 용기 에서 하나의 응용 만 실행 하 는 것 을 권장 합 니 다. 여러 응용 은 다음 copose 배 치 를 참조 하 십시오.
d. Docker 미 러 구축 은 레이 어 링 으로 여러 RUN 명령 을 통합 합 니 다.
e. - v 영구 화 경 로 를 만 들 때 호스트 경로 가 새로 만 들 어 졌 을 때 용기 경로 내용 이 비 워 집 니 다.
f. ENTRYPOINT 와 CMD 가 exec 인 자 를 사용 할 때 두 개의 따옴표 가 필요 합 니 다.
g. dockerignore 를 추가 하여 컴 파일 속 도 를 높 인 다.
.git/
node_modules/

4. 다 용도 용기 배치
Docker Compose 는 다 중 용기 애플 리 케 이 션 을 관리 하 는 도구 입 니 다.
1. docker - compose 설치
다운로드 주소 작성:https://get.daocloud.io/#inst...
$ curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose

#   
$ docker-compose -v

2, docker - compose 명령
기본적으로 현재 디 렉 터 리 에 docker - compose. yml 파일 이 있어 야 합 니 다.
#   yml  
$ docker-compose config

#            
$ docker-compose ps

#   /  /        ( yml      )
$ docker-compose start | restart | stop

#        (      yml       )
$ docker-compose up -d  # -d    

#               ,     ,            ,     
$ docker-compose up -d --force-recreate

#     :       ,     (        )
$ docker-compose stop && docker-compose up -d

#       ,  -f   ,          
$ docker-compose -f a.yml -f b.yml up -d

#    Dockerfile    ,     
$ docker-compose up -d --build

#        
$ docker-compose down

3. docker - compose 설정
프로젝트 루트 디 렉 터 리 에 docker - compose. yml 파일 을 새로 만 듭 니 다.
1.) 설정 예시
다음은 nginx + node + mongo + redis 연합 용기 의 설정 입 니 다. 프로젝트 이름 은 proj 로 가정 합 니 다.
version: '3'
services:
    web:
        image: nginx
        container_name: proj-web
        restart: always
        ports:
            - 1081:81
        volumes:
            - ./bin/nginx.conf:/etc/nginx/conf.d/web.conf
            - ./web/dist:/app
        command: ['nginx', '-g', 'daemon off;']
        links:
            - server

    server:
        image: keymetrics/pm2
        container_name: proj-server
        restart: always
        ports:
            - 1082:82
        volumes:
            - ./server:/app
        working_dir: /app
        environment:
            - MONGO_SERVER=mongo
            - MONGO_PORT=27017
            - REDIS_SERVER=redis
            - REDIS_PORT=6379
        command: npm start
        links:
            - mongo
            - redis

    mongo:
        image: mongo
        container_name: proj-mongo
        restart: always
        ports:
            - 10017:27017
        volumes:
            - ./mongo/configdb:/data/configdb
            - ./mongo/db:/data/db
        command: mongod --auth

    redis:
        image: redis
        container_name: proj-redis
        restart: always
        ports:
            - 10379:6379
        volumes:
            - ./redis/data:/data
            - ./bin/redis.conf:/usr/local/etc/redis.conf
        command: redis-server /usr/local/etc/redis.conf

주의해 야 할 것:
a.) command 는 exec 와 셸 두 가지 모드 를 지원 합 니 다. (위의 웹 과 server 참조)
b.)
nginx, pm2 등 프로 세 스 는 용기 가 종료 되 지 않도록 - no - daemon 인 자 를 추가 해 야 합 니 다.
c.) npm start 작업 디 렉 터 리 설정 필요
d.) links 후 용기 에서 서비스 이름 을 hostname 으로 직접 접근 할 수 있 습 니 다. 다음 과 같 습 니 다.
# nginx    
proxy_pass http://server:81/;

# mongo  
mongodb://mongo:27017/xxxDB

# node          ,     
'mongodb://www:123456@' + process.env.MONGO_SERVER + ':' + process.env.MONGO_PORT + '/xxxDB'

2.) 용기 배치
docker - compose. yml 같은 디 렉 터 리 에서 다음 명령 을 실행 하고 용 기 를 만 들 고 시작 합 니 다.
$ docker-compose up -d

기본 up 명령 은 용기 가 존재 하지 않 거나 yml 파일 설정 이 변 했 을 때 만 재 부팅 용 기 를 실행 합 니 다. node 등 웹 프로젝트 자체 가 업데이트 되 었 을 때 자동 으로 재 부팅 되 지 않 습 니 다. 솔 루 션:
$ docker-compose stop && docker-compose up -d

3. mysql 용기 설정
공식 mysql 용 기 는 상대 적 으로 스마트 하여 루트 비밀번호, 웹 데이터베이스, 사용자 / 비밀번호, 사용자 권한 및 초기 화 설정 을 자동 으로 만 들 수 있 습 니 다. 참고 > >
    mysql:
        image: mysql
        container_name: proj-mysql
        restart: always
        ports:
            - 10306:3306
        environment:
            MYSQL_ROOT_PASSWORD: ${dbRootPass}
            MYSQL_USER: ${dbUser}
            MYSQL_PASSWORD: ${dbPass}
            MYSQL_DATABASE: ${dbName}
        volumes:
            - ./bin/my.cnf:/etc/my.cnf
            - ./bin:/docker-entrypoint-initdb.d/
            - ./mysql/db:/var/lib/mysql
        command: --default-authentication-plugin=mysql_native_password

compose 설정 지원 변수 바 꾸 기, 디 렉 터 리 에. env 파일 만 설정 하면 됩 니 다:
dbRootPass=root123
dbUser=www
dbPass=123456
dbName=xxxDB

항목 아래. / bin / my. cnf 설정:
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

프로젝트 아래... / bin / init. sql, 건축 표 등 을 넣 고 sql 을 초기 화 합 니 다. 다음 과 같 습 니 다.
use xxxDB;

create table xxxTable
(
  id int(11) auto_increment primary key not null,
  name varchar(45),
  update_time datetime
);

주의해 야 할 것:
environment: 설 정 된 루트 비밀번호, 데이터베이스, 데이터베이스 권한 사용자 / 비밀 번 호 는 데이터베이스 가 처음 생 성 될 때 만 생 성 되 며 용기 의 재 구축 이나 재 부팅 에 따라 달라 지지 않 습 니 다.
volumes: 콜론 뒤의 내용 은 용기 약속 경로 입 니 다. 수정 하지 마 십시오.
command: 내 장 된 my sqld 명령 에 인 자 를 추가 하여 my sql 5.7 버 전 을 해결 한 후 caching 을 사용 합 니 다.sha2_password 인증 방식 의 호 환 문제
4.) Dockerfile 혼합 배치
제3자 기 존 미 러 를 사용 하 는 것 외 에 도 Dockerfile 을 통 해 자신의 미 러 를 설정 하고 실시 간 으로 구축 한 후 용 기 를 시작 할 수 있 습 니 다.
    myapp:
        container_name: proj-myapp
        build: .    #        Dockerfile  

배치 할 때 -- build 인 자 를 추가 해 야 합 니 다.
$ docker-compose up -d --build

5. 시각 화 용기 관리 도구
Portainer 는 경량급 Docker 환경 UI 인터페이스 관리 시스템 입 니 다.
1. 빠 른 배치
$ docker volume create portainer_data #            
$ docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

2. 관련 설정
1.) 대화 모드
용 기 를 만 들 때 고급 설정 에서 Console 항목 은 대화 모드 를 선택 하 십시오. 그렇지 않 으 면 콘 솔 을 사용 할 수 없습니다.
  • [x] Interactive & TTY (-i -t)

  • 2.) 입구 명령
    용기 고급 설정 에서 command 의 셸 명령 은 따옴표 만 추가 해 야 합 니 다. 예 를 들 어:
    Command: 'pm2' 'start' './www.js' '--no-daemon'
    Working Dir:  /app

    3.) 볼 륨 추가
    portainer 에서 volume 은 기본적으로 / var / lib / docker / volumes 에서 bid 단 추 를 누 르 면 해당 하 는 host 경 로 를 수정 / 사용자 정의 합 니 다.
    4.) 응용 로그 보기
    Container status 아래 logs 를 누 르 고 로그 인터페이스 에서 끄 기
    자동 새로 고침 로그 자동 새로 고침 기능

    좋은 웹페이지 즐겨찾기