Docker 프로젝트 패키지 의 셸 시작 항목

4101 단어 DockerDockerfile
목차
머리말
간단 한 서술
구덩이 밟 기 기록 및 해결 방법
셸 스 크 립 트 설명
프로그램 언어 설치 부분 linux 패키지
Docker 시간 대 조정
미 러 시작 용기 종료 솔 루 션
전체 Dockerfile 인 스 턴 스
머리말
  본 고 는 주로 실제 프로젝트 를 거울 로 포장 하 는 과정 을 말한다.예전 에 제 가 포장 한 프로젝트 는 main 파일 만 있 었 고 main 파일 을 직접 시 작 했 습 니 다. 이번 프로젝트 는 sehll 스 크 립 트 로 시 작 했 습 니 다. 스 크 립 트 시작 도 흔 한 상황 중 하나 일 것 입 니 다.
간단 한 서술
  이번 패키지 프로젝트 는 골 랑 이 개발 언어, 마이크로 서비스 구조 로 개발 한 서비스 다.대외 적 인 api 서비스 인터페이스 가 있 고 여러 개의 내부 grpc 서비스 가 있 습 니 다.모든 grpc 서 비 스 는 설정 파일 의 포트 수량 에 따라 셸 스 크 립 트 에서 각 grpc 에 대응 하 는 포트 를 읽 고 해당 하 는 grpc 서 비 스 를 시작 할 수 있 습 니 다.그래서 전체 항목 은 셸 스 크 립 트 를 통 해 실 행 됩 니 다.
구덩이 밟 기 기록 및 해결 방법
셸 스 크 립 트 설명
  저 희 는 평소에 프로젝트 배 치 는 Liux 환경 에서 프로젝트 실행 과 스 크 립 트 의 실행 에 전혀 문제 가 없습니다.그래서 dockerfile 은 다음 과 같 습 니 다.
FROM golang:1.15 as build

..........    ........

WORKDIR /home/e-chat/script
RUN chmod +x *.sh
CMD ["./start_all.sh"]

잘못 보고 할 거 야.예 를 들 어 다음 과 같은 오류: souce 명령 과 셸 의 배열 기 호 를 식별 할 수 없습니다. "(")
./auto_start_rpc.sh: 3: ./auto_start_rpc.sh: source: not found
./auto_start_rpc.sh: 4: ./auto_start_rpc.sh: source: not found
./auto_start_rpc.sh: 5: ./auto_start_rpc.sh: source: not found
./auto_start_rpc.sh: 8: ./auto_start_rpc.sh: Syntax error: "(" unexpected

그러나 제 가 포장 한 항목 은 골 랑 미 러 를 기본 으로 포장 한 것 이기 때문에 Liux 환경 이 없어 서 셸 스 크 립 트 를 사용 할 수 없습니다.
해결 방법:
1. centos 나 unbantu 미 러 를 사용 하여 golang 을 설치 하고 스 크 립 트 를 실행 합 니 다. 이렇게 하 는 것 은 서버 와 똑 같은 Liux 환경 이 므 로 문제 가 되 지 않 습 니 다. 나 쁜 점 은 미 러 가 크다 는 것 입 니 다.
2. 이 점 은 중점적으로 추천 합 니 다. 셸 스 크 립 트 설명 방식 을 바 꿉 니 다.\#!/usr/bin/sh    -------->바 꾸 기 --->  #!/usr/bin/env bash    비 Liux 환경 에서 셸 스 크 립 트 를 사용 할 수 있 습 니 다.
프로그램 언어 설치 부분 linux 패키지
  golang 은 기본 미 러 로 구 축 된 프로젝트 로 Liux 명령 을 사용 하려 고 합 니 다. 예 를 들 어 우리 프로젝트 의 셸 스 크 립 트 는 명령, ps, netstat, awk, vim 등 명령 을 사용 해 야 합 니 다. 그러나 이 명령 들 은 지원 되 지 않 습 니 다. 설치 해 야 사용 할 수 있 습 니 다.
1. 프로그램 상호작용 이 필요 없 는 설치 패키지 에 대해 직접 apt - get - install dockerfile 에 다음 과 같이 쓰 여 있 습 니 다.
RUN apt-get install apt-transport-https && apt-get update && apt-get install procps\
&&apt-get install net-tools

2. 대화 가 필요 한 설치 패키지 에 대해 서 는 Y/n 을 입력 해 야 다음 단 계 를 진행 할 수 있 습 니 다. 직접 설치 할 수 없습니다. 다음 과 같은 절차 가 필요 합 니 다. 예 를 들 어 설치, vim, awk 등 입 니 다. 다음 과 같은 설 치 를 사용 합 니 다.
#      
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get install -y vim curl tzdata gawk

Docker 시간 대 조정
docker 의 기본 시간 대 는 UTC 이 고 우리 가 있 는 시간 대 는 동 8 구 입 니 다. 우 리 는 프로젝트 를 배치 하고 로 그 를 보 거나 콘 솔 을 보면 시간 이 몇 시간 차이 가 나 므 로 시간 대 를 우리 나라 가 있 는 시간 대 로 바 꿔 야 합 니 다.
#        
RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

미 러 시작 용기 종료 솔 루 션
Docker 는 가상 컴퓨터 가 아 닙 니 다. 용기 도 프로 세 스 입 니 다. 프로 세 스 인 만큼 용 기 를 시작 할 때 명령 을 실행 하고 종 료 됩 니 다. 용기 의 경우 시작 프로그램 은 용기 응용 프로 세 스 입 니 다. 용 기 는 주 프로 세 스 를 위해 존재 합 니 다. 주 프로 세 스 가 종료 되면 용기 가 존재 하 는 의 미 를 잃 고 종 료 됩 니 다.
따라서 프로 세 스 를 막 아야 합 니 다. 블 로 거들 은 스 크 립 트 를 막 고 스 크 립 트 를 계속 실행 시 켜 야 합 니 다. 그러면 용기 가 프로그램 이 계속 실행 되 고 용기 가 계속 실행 되 며 종료 되 지 않 습 니 다. 다음 셸: start all. sh 인 스 턴 스:
#!/usr/bin/env bash

#--------  shell     ----#

#         ,      ,    
while [ true ]; do
  sleep 1
done

 
전체 Dockerfile 인 스 턴 스
FROM golang:1.15 as build

RUN rm -rf /var/lib/apt/lists/*

RUN apt-get install apt-transport-https && apt-get update && apt-get install procps\
&&apt-get install net-tools
#      
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get install -y vim curl tzdata gawk
#        
RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && dpkg-reconfigure -f noninteractive tzdata


# go mod            ,         
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,direct

#         
VOLUME /home/log

#       
WORKDIR /home/e-chat

#            
COPY . .

WORKDIR /home/e-chat/script
RUN chmod +x *.sh
CMD ["./start_all.sh"]

 
 
 
 
 
 
 
 
 
 
 
 
 

좋은 웹페이지 즐겨찾기