Simplify

Dockerfile 에서 파일 내용 수정하기 How to modify file contents in Dockerfile 본문

Web & Server/Docker & Container

Dockerfile 에서 파일 내용 수정하기 How to modify file contents in Dockerfile

Simplify - Jonghun 2019. 12. 30. 15:09

docker 를 공부하면서.. 이런것은 안될까.. 저런것은 안될까 했던 것들이 거의 다 있습니다. 이걸 검색하신 분들 대부분, Docker 에 대해서 조금은 이해하고 있고, 이제 막 Dockerfile 을 이용해서 이미지를 새로 만들어볼까.. 하는 생각을 가지고 있으리라 생각됩니다. 

 

Dockerfile 에서 주로 하는 작업은 다음 정도로 생각됩니다. (사견입니다)

  • FROM 명령어로 base 이미지 정의하기
  • COPY 명령어로 파일 복사하기 - 내 프로그램 소스, jar, war 등
  • EXPOSE 명령어로 포트 열기
  • WORKDIR 명령어로 시작 위치 정의하기
  • ENTRYPOINT 명령어로 shell 시작하기

이 정도 사용하는 것 같습니다. 

 

만약 base 이미지가 WAS 같은 형태여서.. 내 프로그램을 실행하는 데 있어서 추가로 수정해야 하는 파일이 있다면, 어떻게 해야 할까 고민하다가 아래 소개하는 명령어로 간단히 해결할 수 있어, 공유합니다. 

 

 

RUN 명령어를 이용한 SHELL 명령 실행하기

너무나 단순하게도, RUN 명령어를 사용하면, SHELL 에서 특정 명령을 '실행'합니다. shell 파일을 작성할 때 exec 와 같은 형태라고 생각하면 될 것 같습니다. 이 명령어를 알고 난 뒤에 보니, 거의 모든 작업을 RUN 을 이용할 수 있을 것이라고 생각됩니다.

 

만약, 특정 파일에 어떤 내용을 추가하고자 한다면 다음과 같은 명령어를 사용하면 됩니다. 

RUN   echo "Some line to add to a file" >> /etc/sysctl.conf

그런데, 만약 어떤 파일의 특정 내용을 변경 하고자 하면 어떻게 해야 할까요..? 아래 명령어를 실행합니다. 사실 이건 docker 에 국한된 것이 아닌, 일반적인 shell  프로그래밍이네요..^^

RUN   sed -i "s|some-original-string|the-new-string |g" /etc/sysctl.conf

 

 

sed 명령어를 이용하면 엄청나게 많은 트릭(?)을 구현할 수 있어 융용합니다. 정규식(regular expression)을 이용해서 특정 문자열과 유사한 것들을 모두 변경하는 것도 가능하고, 특정 문구 포함된 라인(line)을 모두 삭제, 변경하는 작업 등도 가능합니다. 이에 대해서는 더 많은 부분을 검색해 보시고 더 좋은 방법을 찾아보시는게 좋아 보입니다.

 

출처 / 참고자료

Comments