티스토리 뷰
이번에는 도커파일을 작성하고 이를 가지고 이미지를 빌드하고 컨테이너를 실행시키는 것을 해보겠다.
■ Dockerfile 작성
디렉토리를 생성하고, 그 안에 HTML 파일을 미리 만들어 둔다.
cd /
mkdir dockerfile && cd dockerfile
echo test >> test.html
아파치 웹 서버가 설치된 이미지를 빌드하는 Dockerfile
vi Dockerfile
@@
FROM ubuntu:14.04
MAINTAINER moon682
LABEL "purpose"="practice"
RUN apt-get update
RUN apt-get install apache2 -y
ADD test.html /var/www/html
RUN ["/bin/bash", "-c", "echo hello >> test2.html"]
EXPOSE 80
CMD apachectl -DFOREGROUND
@@
- FROM: 생성할 이미지의 베이스가 될 이미지를 뜻한다. 사용하려는 이미지가 도커에 없 다면 자동으로 pull 한다.
- MAINTAINER: 이미지를 생성한 개발자의 정보를 나타낸다. 단, 도커 1.13.0 버전 이후로 사용하지 않는다.
- LABEL: 이미지에 부가정보인 메타데이터를 추가한다. ‘키:값’ 형태로 저장된다.
- RUN: 이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행한다. 배열 형태로 사용되 었다. [“실행 가능한 파일”, “명령줄 인자 1”, “명령줄 인자 2, ...]
- ADD: 파일을 이미지에 추가한다. Dockerfile이 위치한 디렉토리에서 test.html파일을 이 미지지의 /var/www/html디렉토리에 추가한다.
- WORKDIR: 명령어를 실행할 디렉토리를 나타낸다. 배시 쉘에서 cd 명령어를 입력하는 것과 같은 기능을 한다.
- EXPOSE: Dockerfile의 빌드로 생성된 이미지에서 노출할 포트를 설정한다.
- CMD: 컨테이너가 시작될 때마다 실행할 명령어(커맨드)를 설정하며, Dockerfile에서 한 번만 사용할 수 있다. 해당 예제에서는 컨테이너가 시작될 때 자동으로 아파치 웹 서버가 실행될 것이다.
■ Dockerfile 빌드
이미지 생성
Dockerfile 빌드
{/dockefile}
docker build -t mybuild:0.0 ./
-t는 생성될 이미지의 이름을 설정한다. -t를 사용하지 않으면 16진수 형태의 이름으로 이미 지가 저장되므로 가급적이면 -t 옵션을 사용
docker run -d -P --name myserver mybuild:0.0
정상적으로 페이지가 뜬다.
캐시를 이용한 이미지 빌드
한 번 이미지 빌드를 마치고 난 뒤 다시 같은 빌드를 진행하면 이전의 이미지 빌드에서 사용 했던 캐시를 사용한다.
vi Dockerfile2
@@
FROM ubuntu:14.04
MAINTAINER moon682
LABEL “purpose”=“practice”
RUN apt-get update
@@
-f 또는 --file 옵션으로 새로운 이름을 지정한다.
# docker build -f Dockerfile2 -t mycache:0.0 ./
---> Using cache
이전에 빌드했던 Dockerfile에 같은 내용이 있다면 새로 빌드하지 않고 이전에 사용한 이미지 레이어를 활용해 이미지를 생성한다. 그러나 캐시 기능이 필요하지 않을 때도 있다. git clone 등의 명령어를 사용해 빌드할 때가 여기에 해당한다. 리비전 관리가 않되기 때문이다.
캐시를 사용하지 않으려면 build 명령어에 --no-cache 옵션을 추가한다.
docker build --no-cache -t mybuild:0.0 ./
또는 캐시로 사용할 이미지를 직접 지정할 수도 있다.
docker build --cache-from nginx -t my_extend_nginx:0.0 ./
'클라우드,가상화,방화벽' 카테고리의 다른 글
ASA방화벽-1 (0) | 2023.05.24 |
---|---|
[docker]도커 스웜(swarm) (1) | 2023.05.22 |
컨테이너 어플리케이션, 도커(네트워크, 이미지) (0) | 2023.05.18 |
AWS-EC2 서버, Route53(DNS), elasticIP, 도메인 연결 (0) | 2023.05.09 |
도커(Docker)기본 개념과 owncloud 실습 (0) | 2023.05.08 |
댓글