일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Jenkins
- ^M바꾸기
- 줄복사
- object
- javaascript
- ubuntu
- local
- Change port
- duplicate lines
- key bindings
- gradle
- ADB
- not to accept jdbcUrl
- spring boot
- mariadb
- jdbc
- driverspy
- pkgutil
- docker
- install
- 전송포맷
- spring
- Java
- svn backup
- remove
- JavaScript
- change file content
- JAR
- install maven
- maven
- Today
- Total
Simplify
Dockerfile 에서 파일 내용 수정하기 How to modify file contents in Dockerfile 본문
Dockerfile 에서 파일 내용 수정하기 How to modify file contents in Dockerfile
Simplify - Jonghun 2019. 12. 30. 15:09docker 를 공부하면서.. 이런것은 안될까.. 저런것은 안될까 했던 것들이 거의 다 있습니다. 이걸 검색하신 분들 대부분, 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)을 모두 삭제, 변경하는 작업 등도 가능합니다. 이에 대해서는 더 많은 부분을 검색해 보시고 더 좋은 방법을 찾아보시는게 좋아 보입니다.