2024.08.02 - [Server/Docker] - [Docker] 도커와 컨테이너 사용법 (명령어) 알아보기
dockerfile 을 생성하기 앞서 이전 게시글에서 학습한 내용의 일부입니다.
DockerFile 을 빌드하여 Docker Image 를 만들고,
Docker Image 를 실행하여 Docker Container 를 만듭니다.
⭐ DockerFile
- 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 파일입니다.
- Dockerfile 을 빌드하여 DockerImage 를 생성할 수 있습니다.
⭐ DockerFile 기본 문법
💫 자주 사용하는 명령어
- FROM : 베이스 이미지 지정 명령입니다.
-> 예시) FROM httpd:alpine - LABEL : 버전 정보, 작성자와 같은 이미지 설명을 작성하기 위한 명령입니다.
-> 예시) LABEL version="1.0.0" - CMD : docker 컨테이너가 시잘할 때, 실행하는 쉘 명령을 지정하는 명령입니다.
RUN 과 비슷하지만, RUN 은 이미지 작성시 실행하는 명령이며, CMD 는 컨테이너를 시작할 때 실행하는 명렁입니다.
-> 예시) CMD ['python', 'app.py'] - RUN : 쉘 명령을 실행하는 명령으로, 이미지 작성 시 실행되며 일종의 새로운 이미지 layer 를 만드는 역할을 합니다.
-> 예시) RUN ["apt-get", 'install', nginx'] - ENTRYPOINT
-doker 컨테이너가 시작할 때 실행한느 쉘 명령을 지정하는 명령입니다.
-doker run 커멘트 실행 시 별도 명령어도 넣을 수 있으며, 이 때 CMD 명령은 해당 명령으로 덮어씌워집니다.
-ENTRYPOINT로 지정한 명령은 doker run 커멘트 실행 시 함께 넣어진 별도 명령어가 있더라도 덮어씌워지지 않고 실행됩니다. - EXPOSE : docker 컨테이너 외부에 오픈할 포트 설정입니다.
-> 예시) EXPORT 8080 - ENV : docker 컨테이너 내부에서 사용할 수 있는 환경 변수를 지정합니다.
-> 예시) ENV PATH /usr/bin:$PATH - WORKDIR : docker 컨테이너에서의 작업 디렉토리를 설정합니다.
- COPY : 파일 또는 디렉토리를 docker 컨테이너에 복사합니다. ADD 와 달리 URL 은 지정할수 없으며, 압축 파일을 자동으로 플어주지 않습니다.
-> _예시) COPY testLiyo.sh /root/testLiyo.sh
💫 자주 사용하지 않는 명령어
- ADD
-파일, 디렉토리, 특정 URL 의 데이터를 docker 이미지에 추가합니다.
-> 예시) ADD file /var/www/html
-추가할 파일이 tar 압축 파일인 경우 자동으로 압축을 풀어줍니다. ( 압축파일을 그대로 넣고 싶을 때에는 문제가 됩니다..)
-동일한 이름의 파일 또는 디렉토리가 이미 _docker 이미지에 있을 시에는 덮어 씌우지 않습니다.
-> 예시) ADD test.sh /root/test.sh
- SHELL : 쉘 프로그램 지정 명령입니다. CMD 등으로 대체가 가능하여 잘 사용되지는 않습니다.
-> 예시) SHELL ['/bin/bash','-c'] - ARG : dockerfile 내에서 필요한 변수를 설정합니다. docker 이미지/컨테이너에서 사용한느 환경 변수를 설정하는 ENV 와 달리 _dockerfile 스크립트 작성을 위해 필요한 변수를 설정합니다.
-> _예시) ARG env=dev - USER : docker 이미지 및 컨테이너에서 작업을 하는 사용자 ID 를 지정합니다.
-> 예시) USER bi - ONBUILD : 생성한 이미지를 시반으로 새로운 이미지를 생성할 경우 실행하는 명령을 지정합니다.
-> 예시) ONBUILD ADD myweb.tar/var/www/html - VOLUME : 이미지를 위한 볼륨을 생성합니다.
-> DockerFile 에서 VOLUME 명령을 사용하면 이미지 내부에 볼륨을 생성합니다. 호스트의 디렉토리나 파일을 컨테이너 내부에 마운트 하는 것이 아닌, 컨테이너 내부에서 볼륨을 생성하여 사용합니다.
-> _VOLUME 명령어를 사용하면 컨테이너가 종료되더라도 볼륨은 삭제되지 않습니다.
⭐ DockerFile 생성하기
동작 중인 컨테이너의 상태와 사용 중인 리소스의 양을 확인하는 docker stats 명령어를 학습하던 중 부하테스트를 위한 임의의 stress 컨테이너를 생성해보려 합니다.
# dockerfile
FROM ubuntu
RUN apt-get update && apt-get install -y stress
CMD stress -c 2
별다른 확장자 없이 파일 명을 dockerfile 로 해주니까 도커 파일로 인식하는 모습입니다.
⭐ DockerFile 빌드하기
DockerFile 을 빌드하여 도커 이미지를 생성할 수 있습니다.
> docker build -t stress .
docker desktop 에서 확인해 보니stess 이미지가 생성됐습니다.
💫 DockerFile build 옵션
- -t (--tag) : 이미지의 이름을 설정합니다.
-> 저장소 (DockerHub ID)/이미지 이름:태그
-> 저장소 이름 및 태그 이름은 작성하지 않아도 무관하며, 태그이름이 없을 경우 디폴트로 latest 가 태그로 붙여집니다. - -f : 이미지 빌드 시 디폴트로 DockerFile 파일명으로 된 파일을 찾아서 이미지를 빌드합니다.
-> 그 외에 파일명으로 이미지를 빌드할 경우 해당 옵션을 사용해서 파일명을 지정할 수 있습니다. - --pull : FROM 으로 지정된 이미지는 한 번 다운로드받으면 이미지 생성 시 마다 새로 다운로드 받지 않고 이미 다운로드 받은 이미지를 사용합니다. PULL 옵션은 이미지 생성 시마다 새로 다운로드를 받으라는 옵션입니다.
-> 예시) --pull=true
-> DockerHub 에 베이스 이미지를 수시로 업데이트하고 이를 기반으로 새로운 이미지 생성 시 자주 사용되는 옵션입니다.
🌠 문제해결
평소에 도커를 사용하면서 기본경로인 System32 에서 명령을 입력해도 잘 실행이 됐어서 별생각 없이 빌드 명령어도 같은 경로에서 진행하다 이미지를 어떻게 생성하지? 에 대한 난관에 부딪혔습니다..
도커를 학습하면서 이미지나 컨테이너가 도커 서버에서 돌고 있어서 어느 경로에서 실행하여도 문제없이 동작하였는데, 도커파일 을 빌드시키려니 도커 허브에 저장해야 하나? 따로 도커파일을 생성하거나 저장하는 곳이 있나?
하고,, 가장 기초를 망각하고 한참을 헤맸습니다.
실행을 하고 싶으면 그 파일이 있는 경로에서 실행하면 될 것을,,,,
역시 뭐든 기본이 가장 중요하다는 것을.... 깨달으며 마무리하겠습니다. 🤣
'Server > Docker' 카테고리의 다른 글
[Docker] (HTTP code 500) server error - Ports are not available: exposing port TCP 0.0.0.0:1433 (0) | 2024.10.04 |
---|---|
Docker-compose.yml: `version` is obsolete 오류 해결 (0) | 2024.08.19 |
[Docker] 도커와 컨테이너 사용법 (명령어) 알아보기 (0) | 2024.08.03 |
[Docker] 다운로드 및 세팅하기 (0) | 2024.08.02 |