일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 관리
- springboot jar
- react map error
- Oracle
- sudo
- mysql error
- Docker
- springboot
- systemd
- Access denied for user ''@'localhost'
- 파일 시스템
- sts
- map is not a function
- spring framework
- join
- docker container
- install
- 도커
- mysql
- mac mariadb
- jdk
- ps
- jar deploy
- jar배포
- 설치
- brew install mariadb
- DB
- root
- 도커파일
- Dockerfile
- Today
- Total
Yoon.s
Dockerfile [1] 구성요소, FROM, CMD, ENTRYPOINT, ENV 본문
Dockerfile 기반 image 생성
Dockerfile -> Docker image -> Docker container
(build) (run)
Dockerfile 구성요소
#주석
<명령><매개 변수>
*시작하기전, /home 디렉터리에 class라는 디렉터리를 만들어서 class에서 예제를 실행해보겠습니다!
mkdir class
cd class
docker build <옵션><Dockerfile 경로>
옵션. -t 또는 --tag : +사용자ID/ 이미지 이름:tag (tag 작성 안할 시 기본 tag는 latest)
(Dockerhub에 올리기 위해 사용자 ID를 준다. 그렇지 않는 경우는 생략)
↑ docker images에는 현재 저희가 원하는 이미지가 없습니다!
docker build --tag test:0.1 .
을 통해서 우리가 작성한 Dockerfile을 이미지로 build합니다! (--tag 옵션으로 네임은 0.1로 설정)
마지막에는 . 으로 현재 위치에 이미지를 저장하겠다는 것입니다!
(* Dockerfile이 있는 위치에서 build 해야 합니다!!)
build가 끝나고, docker images를 확인하면 저희가 사용한 busybox:latest 이미지가 생성되고
그 이미지를 가지고 새로 작성한 Dockerfile인 test:0.1 이미지가 생성되고 return 됩니다!
그렇다면 위의 vi편집에서 사용한 FROM과 CMD는 어떤 의미일까요?
- FROM
- CMD 명령 | ["<실행파일>", "<매개변수1>", "<매개변수>",,,]
컨테이너가 실행될 때 일어날 프로세스 (한번만 실행됩니다)
/bin/sh 기반 실행
↑ 우선, 충돌을 방지하기 위해 cmd 디렉터리를 새로 생성합니다! (이름이 같을 시 충돌 가능성이 높아집니다)
그렇다면 build 할때 docker 경로는 현재위치가 아닌 cmd로 지정해야겠죠?!
컨테이너를 실행(run)하면 CMD 안에 있던 내용인 echo hello world가 실행되어
hello wolrd가 출력되게 됩니다!!
(--rm 옵션의 경우에는 ! 테스트 목적으로 실행하고 바로 삭제되도록 하기 위함입니다!! )
여기서 재미있는 부분은 :)
컨테이너 실행시 echo Love u라는 명령어를 추가하면 기존 내용은 사라지고 Love u가 덮어쓰기 되어
출력됩니다!!
- ENTRYPOINT 명령 | ["<실행파일>", "<매개변수1>", "<매개변수>",,,]
CMD와 비슷해보이지만 큰 차이점을 가지고 있습니다!!
↑ 이번에도 entry라는 디렉터리를 생성하고 시작합시다! (충돌방지)
Dockerfile에 CMD대신 ENTRYPOINT로 작성해보고 컨테이너를 실행시키면 hello world로 같은 결과가 나오죠?
하지만 CMD와 다른 점은 앞서 두번째 실행했던 부분에서 차이를 보입니다!
컨테이너 실행 시 echo Love u 명령을 추가했을 때
CMD는 기존 내용을 무시하지만 ENTRYPOINT는 무시하지않고 출력합니다!
하지만 --entrypoint 옵션을 주시면 무시될 수 있습니다!!
- ENV <환경변수><value>
환경변수를 만든다.
RUN, CMD, ENTRYPOINT에 적용
$ 변수 구문으로 사용
-e (--env)옵션으로 overwrite 가능
↑ env 디렉터리를 새로 생성하고 그 디렉터리에서 실행해보았습니다.
Dockerfile에 FROM, ENV, CMD 명령을 줍니다!
Dockerfile 설명** busybox(태그 latest)를 가져와 ENV를 이용하여 CLASS 변수를 docker로 설정하고
CMD로 hello 다음에 CLASS(docker)를 읽어 출력하라는 의미입니다!!
--env (-e)를 적용함으로써 CLASS에 docker가 아닌 Container로 바꿔줌으로서
overwrite되어 hello Container가 출력되게 됩니다.
'인프라 > Docker' 카테고리의 다른 글
Docker container [1] 이미지 전송/복사 (0) | 2020.07.22 |
---|---|
Dockerfile [3] VOLUME (0) | 2020.07.21 |
Dockerfile[2] COPY, ADD, RUN, USER (0) | 2020.07.21 |
Docker 시작하기[2] -Ubuntu편 <컨테이너 생성, 목록, 접속> (0) | 2020.07.16 |
Docker 시작하기 - Ubuntu편 <도커 설치, 이미지> (0) | 2020.07.16 |