Docker 이미지는 애플리케이션과 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 Docker 컨테이너의 Blueprint입니다. 컨테이너는 이미지의 런타임 인스턴스입니다.
Docker 파일이 무엇인지, Docker 파일을 사용하여 Docker 이미지를 작성하는 방법 및 Docker 파일을 사용하여 Docker 이미지를 작성하는 방법에 대해 설명합니다.
도커 파일이란 무엇입니까?
Docker 파일은 사용자가 명령줄에서 실행하여 이미지를 생성할 수 있는 모든 명령을 포함하는 텍스트 파일입니다. 여기에는 이미지를 구축하는 데 필요한 도커의 모든 지침이 포함됩니다.
도커 이미지는 실행 가능한 소프트웨어 응용 프로그램을 구성하는 이미지의 도커 파일에 있는 지시사항을 나타내는 일련의 파일 시스템 레이어로 구성됩니다.
Docker 파일은 다음 형식을 사용합니다.
# Comment
INSTRUCTION arguments
명령어는 대소문자를 구분하지 않지만 이름에 대문자를 사용하는 것이 규칙입니다.
다음은 가장 많이 사용되는 Docker 파일 지침 중 일부를 간략하게 설명하는 목록입니다.
ARG - 이 지침을 사용하면 빌드 시 전달할 수 있는 변수를 정의할 수 있습니다. 기본값을 설정할 수도 있습니다.
FROM - 새 이미지를 구축하기 위한 기본 이미지입니다. 이 지침은 Docker 파일에서 코멘트가 없는 첫 번째 지침이어야 합니다. 이 규칙의 유일한 예외는 FROM 인수에 변수를 사용하려는 경우입니다. 이 경우 FROM에는 하나 이상의 ARG 지침이 선행될 수 있습니다.
LABEL - 설명, 버전, 작성자 등 이미지에 메타데이터를 추가하는 데 사용됩니다. 둘 이상의 LABEL을 지정할 수 있으며, 각 LABEL 명령은 키-값 쌍입니다.
RUN - 이 지침에 지정된 명령은 빌드 프로세스 중에 실행됩니다. 각 RUN 명령은 현재 이미지 위에 새 레이어를 만듭니다.
ADD - 지정된 원본에서 도커 이미지의 지정된 대상으로 파일 및 디렉토리를 복사하는 데 사용됩니다. 원본은 로컬 파일, 디렉터리 또는 URL일 수 있습니다. 원본이 로컬 타르 아카이브인 경우 자동으로 Docker 이미지에 압축이 해제됩니다.
COPY - ADD와 유사하지만 원본은 로컬 파일 또는 디렉터리만 사용할 수 있습니다.
ENV - 환경 변수를 정의할 수 있습니다.
CMD - 컨테이너를 실행할 때 실행할 명령을 지정하는 데 사용됩니다. Docker 파일에는 하나의 CMDB 명령만 사용할 수 있습니다.
ENTERTPOINT - CMDB와 유사하게 이 지침에서는 컨테이너를 실행할 때 실행할 명령을 정의합니다.
WORKDIR - 이 지시문은 RUN, CMDB, ENTERPOINT, COPY 및 ADD 지시사항에 대한 현재 작업 디렉토리를 설정합니다.
USER - 다음 실행, CMDB, 진입점, 복사 및 추가 지침을 실행할 때 사용할 사용자 이름 또는 UID를 설정합니다.
VOLUME - 컨테이너에 호스트 시스템 디렉토리를 마운트할 수 있습니다.
EXPERVE - 컨테이너가 런타임에 수신하는 포트를 지정하는 데 사용됩니다.
이미지에 추가할 파일 및 디렉터리를 제외하려면 컨텍스트 디렉터리에 .dockerignore 파일을 생성하십시오. .dockerignore의 구문은 Git의 .gitignore 파일의 구문과 유사합니다.
Docker 파일 지침에 대한 전체 참조 및 자세한 설명은 Docker 파일 참조 페이지를 참조하십시오.
Docker 파일을 생성
Docker 이미지를 생성할 때 가장 일반적인 시나리오는 (일반적으로 Docker Hub에서) 레지스트리에서 기존 이미지를 꺼내고 기본 이미지에 대해 변경할 사항을 지정하는 것입니다. 도커 이미지를 생성할 때 가장 많이 사용되는 기본 이미지는 작고 RAM에서 실행되도록 최적화되었기 때문에 알파인입니다.
Docker Hub는 Docker 이미지를 공용 또는 개인 리포지토리에 보관하는 데 사용되는 클라우드 기반 레지스트리 서비스입니다.
이 예에서는 Redis 서버에 대한 Docker 이미지를 생성합니다. 최신 ubuntu 18.04를 기본 이미지로 사용하겠습니다.
먼저 Docker 파일과 모든 필요한 파일을 포함할 디렉토리를 생성합니다.
mkdir ~/redis_docker
디렉터리로 이동하여 다음 Docker 파일을 생성합니다.
cd ~/redis_docker
nano Dockerfile
# Dockerfile
FROM ubuntu:18.04
RUN apt-get update && \
apt-get install -y redis-server && \
apt-get clean
EXPOSE 6379
CMD ["redis-server", "--protected-mode no"]
도커 파일에 있는 각 행의 의미를 설명하겠습니다.
1번 라인에서는 기본 이미지를 정의하고 있습니다.
3번 라인에서 시작하는 RUN 명령은 apt 인덱스를 업데이트하고 "redis-server" 패키지를 설치하고 apt 캐시를 치료합니다. 지침에 사용된 명령은 Ubuntu 서버에 다시 설치하는 데 사용할 명령과 동일합니다.
EXPOSE 명령은 redis 서버가 수신하는 포트를 정의합니다.
마지막 줄에서는 CMDB 명령을 사용하여 컨테이너가 실행될 때 실행할 기본 명령을 설정하는 중입니다.
파일을 저장하고 편집기를 닫습니다.
이미지를 구축
다음 단계는 이미지를 만드는 것입니다. 이렇게 하려면 Docker 파일이 있는 디렉토리에서 다음 명령을 실행합니다.
옵션 -t는 이미지 이름과 선택적으로 'username/imagename:tag' 형식으로 사용자 이름과 태그를 지정합니다.
빌드 프로세스의 출력은 다음과 같습니다.
docker build -t jjeongil/redis .
# Sending build context to Docker daemon 3.584kB
# Step 1/4 : FROM ubuntu:18.04
# ---> 7698f282e524
# Step 2/4 : RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean
# ---> Running in e80d4dd69263
# ...
# Removing intermediate container e80d4dd69263
# ---> e19fb7653fca
# Step 3/4 : EXPOSE 6379
# ---> Running in 8b2a45f457cc
# Removing intermediate container 8b2a45f457cc
# ---> 13b92565c201
# Step 4/4 : CMD ["redis-server", "--protected-mode no"]
# ---> Running in a67ec50c7048
# Removing intermediate container a67ec50c7048
# ---> d8acc14d9b6b
# Successfully built d8acc14d9b6b
# Successfully tagged linuxize/redis:latest
빌드 프로세스가 완료되면 새 이미지가 이미지 목록에 나열됩니다.
docker image ls
# REPOSITORY TAG IMAGE ID CREATED SIZE
# jjeongil/redis latest d8acc14d9b6b 4 minutes ago 100MB
# ubuntu 18.04 7698f282e524 5 days ago 69
이미지를 도커 허브로 밀어넣으려면 도커 컨테이너 이미지를 도커 허브로 밀어넣기를 참조하십시오.
컨테이너를 실행
이제 이미지가 생성되었으므로 다음을 실행하여 해당 이미지에서 컨테이너를 실행합니다.
docker run -d -p 6379:6379 --name redis jjeongil/redis
-d 옵션은 Docker에게 컨테이너를 분리 모드로 실행하도록 지시하고 -p 6379:6379 옵션은 포트 6379를 호스트 시스템에 게시하며 --name redis 옵션은 컨테이너 이름을 지정합니다. 마지막 인수 jjeongil/redis는 컨테이너 실행에 사용되는 이미지의 이름입니다.
컨테이너가 시작되면 다음 명령을 사용하여 실행 중인 모든 컨테이너를 나열합니다.
docker container ls
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago
레디스 cli을 사용하여 도커 컨테이너에 연결하는 모든 작업이 제대로 작동하는지 확인하려면 다음을 수행합니다.
redis-cli ping
redis 서버는 PONG으로 응답해야 합니다.
'SW > 리눅스' 카테고리의 다른 글
Linux : Cent OS 부팅 USB 만드는 방법, 예제, 명령어 (0) | 2021.09.11 |
---|---|
CentOS 7 : VLC Media Player 설치 방법, 예제, 명령어 (0) | 2021.09.09 |
Debian 9 : Skype 설치 방법, 예제, 명령어 (0) | 2021.09.07 |
CentOS 7 : Memcached 설치 방법, 예제, 명령어 (0) | 2021.09.06 |
Linux : Wc 명령어, 예제, 사용 방법 (줄, 단어, 문자 세기 ) (0) | 2021.09.05 |