https://sddev.tistory.com/218
위 링크 내용을 가져와서 내용 습득을 위해 다시 한번 정리한 것입니다.
[Docker ] Docker 실습
Docker 설치
공식 사이트 주소 : https://www.docker.com/get-started
Desktop 버전 설치, Community로도 왠만한 기능은 사용 가능
# Dockerfile 작성하기
@ Dockerfile 만드는 순서
1.베이스 이미지를 명시하기(파일 스냅샷에 해당)
2.추가적으로 필요한 파일을 다운 받기 위한 몇가지 명령어를 명시
3.컨테이너 시작시 실행 될 명령어를 명시
- FROM
생성할 이미지의 베이스가 될 이미지를 뜻합니다.
FROM 명령어는 Dockerfile을 작성할 때 반드시 한 번 이상 입력해야 합니다.
- MAINTAINER
이미지를 생성한 개발자 정보를 나타냅니다.
- RUN
이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행합니다.
RUN 명령어에 ["/bin/bash", "echo hello" >> test.html"] 같이 입력하면
/bin/bash 셸을 이용해 'echo hello >> test2.html'을 실행한다는 뜻입니다.
- ADD
파일을 이미지에 추가합니다.
Dockerfile이 위치한 디렉터리에서 파일을 가져옵니다.
ADD <DockerFile 경로 기준 파일 상대경로> <컨테이너 내 폴더 경로>
ex) ADD test.html /var/www/html 이라면 Dockerfile과 같은 디렉토리에 있는 test.html 파일을
이미지 내부의 /var/www/html에 추가한다는 뜻입니다.
- WORKDIR
명령어를 실행할 디렉터리를 나타냅니다. 배시 쉘에서 cd 명령어를 입력하는 것과 같은 기능을 합니다.
즉, 컨테이너 내부에서 작동을 합니다.
- EXPOSE
Dockerfile의 빌드로 생성된 이미지에서 노출할 포트를 설정합니다.
그러나 EXPOSE를 설정한 이미지로 컨테이너를 생성했다고 해서 반드시 이 포트가 호스트의 포트와 바인딩되는 것은
아니며, 단지 컨테이너의 80번 포트를 사용할 것임을 나타내는 것뿐입니다.
- CMD
CMD는 컨테이너가 시작될 때마다 실행할 명령어를 설정하며, Dockerfile에서 한 번만 사용할 수 있습니다.
- ADD, COPY
ADD와 COPY는 큰 차이점이 없는 것처럼 보입니다. 하지만 차이점이 존재합니다.
COPY는 로컬 디렉터리에서 읽어 들인 컨텍스트로부터 이미지에 파일을 복사하는 역할을 합니다.
ADD는 외부 URL 및 tar 파일에서도 파일을 추가할 수 있다는 점이 다릅니다.
ADD를 사용하는 것은 그다지 권장하지 않습니다.
- ENTRYPOINT, CMD
ENTRYPOINT, CMD는 역할 자체는 비슷하지만 서로 다른 역할을 담당하는 명령어입니다.
위의는 entrypoint를 사용하지 않은 경우입니다. 이 때는 /bin/bash에 접속한 것을 볼 수 있습니다.
이번에는 entrypoint를 사용하였습니다. 이 때는 /bin/bash를 출력한 것을 볼 수 있습니다.
즉 둘 다 컨테이너가 시작될 때 수행할 명령을 지정한다는 점에서 같지만, entrypoint는 커맨드를 인자로 받아
사용할 수 있는 스크립트의 역할을 할 수 있다는 점에서 다릅니다.
Dockerfile 작성
# 베이스 이미지는 ubuntu:18.04 를 사용
FROM ubuntu:18.04
# 이미지 생성한 개발자 정보
MAINTAINER sddev1002 <sddev1002@gmail.com>
# 명령어 실행(일반 텍스트)
RUN apt-get update
RUN apt-get install -y apache2 # Install Apache web server (Only 'yes')
# 로컬 파일 추가
ADD test.html /var/www/html
# 컨테이너 내 명령어 실행될 경로 지정
WORKDIR /var/www/html
# 명령어 실행(리스트 형태)
RUN ["/bin/bash", "-c", "echo hello >> test2.html"]
# 컨테이너를 80번 포트로 설정 (외부 노출)
EXPOSE 80
# apache 서버가 죽지 않고 백그라운드로 돌아가기 위해서 아래의 명령어 실행
# 컨테이너 생성 후, apachectl -D FOREGROUND 명령어가 실행됨
CMD ["apachectl", "-D", "FOREGROUND"]
# CMD apachectl -D FOREGROUND
^z
# Dockerfile로 이미지 만들기
# dockerfile이 존재하는 폴더로 이동
docker build -t <이미지명> .
docker images # 생성된 이미지 목록 조회
해당 Dockerfile이 있는 위치에서 위의 명령어를 입력하면 <이미지명> 이라는 이름의 Image가 생성된다.
.은 Dockerfile이 존재하는 현재 폴더 위치를 의미한다.
-t : tag의 약자로, 이미지에 대한 이름을 tag로 지정할 수 있다.
# 이미지로 컨테이너 생성 및 실행하기
댓글
댓글 쓰기