반응형

 

 

Docker

Ubuntu 환경에서 Docker 명령어 사용하기


Ubuntu 20.04.4 LTS 환경으로 테스트 진행

 

 

 

 

 

Dockerfile을 생성하여 파일을 docker build 하려고 할 때 아래와 같은 에러가 발생합니다.

원인을 몰라 한참 찾아봤었는데 처음에는 뭐가 문제인지 잘몰랐었는데 Dockerfile을 만들어서

build 해줄 때 filename을 Dockerfile 이라고 만들어줘야 하는 거였다.

 

Dockerfile을 만들때에는 디렉토리를 새로만들고 해당 디렉토리로 들어가서 build 해줘야한다.

 

나는 바보인가보다 ㅠ

 

unable to prepare context: unable to evaluate symlinks in Dockerfile path:

 

 

$ sudo docker build -t kubers:1 .
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/djwlstn123/k8s/Dockerfile: no such file or directory

EX)
$ sudo docker build -t kuard-amd64:1 .
Sending build context to Docker daemon  2.048kB
Step 1/3 : FROM alpine

 

 

반응형
반응형

 

 

 

 

Docker

Ubuntu 환경에서 Docker 명령어 사용하기


Ubuntu 20.04.4 LTS 환경으로 테스트 진행

 

 

 

 

 

 

 

Dockerfile 

Dockerfile은 Docker 이미지 설정 파일이며, Dockerfile에 설정된 내용으로 이미지를 생성할 수 있습니다.

  • Dockerfile은 대소문자를 구분하지 않습니다.
  • Dockerfile 명령은 순서대로 실행됩니다.
  • Dockerfile은 FROM 명령으로 시작해야 합니다.
  • #은 주석으로 사용합니다.
  • 각 명령들은 독입적으로 실행됩니다. 

 

 

 

Dockerfile 에서 사용하는 환경 변수 목록

 

  • FROM

FROM 명령은 기본 베이스 이미지를 설정하는 명령입니다.

이미지 이름만 설정하면 latest를 사용하여 생성됩니다. 

이미지 이름은 생략할 수 없습니다.

Dockerfile 하나에 FROM을 여러개 생성할 수 있으나 --tag 옵션으로 이미지 이름을 설정했다면 마지막 FROM에 적용됩니다.

FROM [이미지이름]:[태그]

EX)
FROM ubuntu:14.04

 

 

  • MAINTAINER

MAINTAINER 명령은 이미지 생성하는 관리자의 정보를 설정하는 명령입니다.

빌드에 영향을 주지 않기 때문에 생략하는 경우도 있습니다.

MAINTAINER [NAME] [Email]

EX)
MAINTAINER JinSu <djwlstn123@naver.com>

 

 

  • RUN

RUN 명령은 현재 생성되는 과정의 이미지 위에 스크립트 또는 명령을 실행해주는 명령입니다.

실행한 결과는 새 이미지로 생성되며, 실행 내역은 이미지 히스토리에 기록됩니다.

RUN [명령어]
RUN ["실행파일", "매개변수1", "매개변수2"]

EX)
RUN apt-get -y update
RUN /bin/bash -c

 

 

  • CMD

CMD 명령은 컨테이너가 시작될 때 실행할 실행 파일 또는 쉘 스크립트 명령입니다.

Dockerfile에는 하나의 CMD 명령만 있을 수 있습니다. (둘 이상의 CMD를 나열하면 마지막 CMD만 적용됩니다.)

여러 명령어를 사용하려면 따로 스크립트를 생성하여 설정해주어야합니다.

CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)
CMD [명령]


EX)
CMD ["nginx"]

 

 

  • ENTRYPOINT

ENTRYPOINT 명령은 컨테이너가 시작될 떄 스크립트 또는 명령을 실행합니다.

docker run, start 명령으로 정지된 컨테이너를 시작할 때 실행됩니다. 

ENTRYPOINT는 Dockerfile에 단 한번만 사용할 수 있습니다.

ENTRYPOINT [명령]
ENTRYPOINT ["실행파일", "매개변수1", "매개변수2"]

EX)
셸(/bin/sh)로 명령 실행
ENTRYPOINT cat /home/study/test.text
셸없이 바로 실행
ENTRYPOINT ["cat", "/home/study/test.text"]

 

 

  • ADD

ADD 명령은 새로운 파일이나 또는 디렉토리를 이미지로 복사하는 명령입니다.

절대경로를 사용할 수 없으며,  디렉토리를 지정하면 디렉토리 모든 파일을 복사합니다.

인터넷에 있는 URL을 설정할 수 있습니다.

ADD [복사할 파일 경로] [이미지에 파일이 위치할 경로]

EX)
ADD *.txt /root/

 

 

  • COPY

COPY 명령은 새로운 파일이나 또는 디렉토리를 이미지로 복사하는 명령입니다.

ADD 명령과 달리 URL을 사용할 수 없으며 압축 파일 그대로 복사됩니다. 절대경로 방식으로 설정해야 합니다.

COPY [복사할 파일 경로] [파일이 위치할 경로]

EX)
COPY test.txt relativeDir/

 

 

  • ENV

ENV 명령은 환경 변수를 설정하는 명령입니다.

ENV로 설정한 변수는 RUN, CMD, ENTRYPOINT에 적용됩니다.

ENV [환경변수] [값]

EX)
ENV PATH /go/bin:$PATH

 

 

  • EXPOSE

EXPOSE 명령은 호스트와 연결할 포트 번호를 설정하는 명령입니다.

docker run --expose 옵션과 같은 설정입니다.

EXPOSE [포트번호]

EX)
EXPOSE 80
EXPOSE 443

 

 

  • USER

USER 명령은 실행할 사용자 계정을 설정하는 명령입니다.

RUN, CMD, ENTRYPOINT에 적용됩니다.

USER [계정 사용자명]

EX)
USER nobody

 

 

  • VOLUME

VOLUME 명령은 디렉토리의 내용을 컨테이너에 저장하지 않고 외부 호스트(파일시스템)에 저장하도록 설정하는 명령입니다.

VOLUME [컨테이너 디렉토리]
VOLUME ["컨테이너 디렉토리1", "컨테이너 디렉토리2"]

EX)
VOLUME /data
VOLUME ["/data", "/var/log/hello"]

 

 

  • WORKDIR

WORKDIR 명령은 RUN, CMD, ENTRYPOINT 명령이 실행될 디렉토리를 설정하는 명령입니다.

절대경로 대신 상대경로도 사용 할 수 있습니다.

WORKDIR [경로]

EX)
WORKDIR /var/www

 

 

  • ONBUILD

ONBUILD 명령은 생성한 이미지를 기반으로 다른 이미지가 생성될 떄 명령을 실행하는 명령입니다.

최초에 ONBUILD 사용한 상태에서는 아무 명령도 실행하지 않으며, 다음 이미지가 FROM으로 사용될 때 실행할 명령을 예약하는 기능입니다.

ONBUILD [Dockerfile 명령] [Dockerfile 명령의 매개변수]

EX)
ONBUILD RUN touch /test.txt
ONBUILD ADD test.txt /test.txt

 

 

 

 

 

 

Dockerfile 예제 작성하기

 

컨테이너 이미지를 만들기 위해 Dockerfile를 설정합니다.

$ vi Dockerfile

FROM ubuntu:14.04
MAINTAINER jinsu <djwlstn123@Naver.com>

RUN apt-get update
RUN apt-get install -y nginx
RUN echo "\n daemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx

VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"]

WORKDIR /etc/nginx

CMD ["nginx"]

EXPOSE 80
EXPOSE 443
  • FROM : 베이스 이미지 선택 [이미지] [태그] 
  • MAINTAINER : 제작자 정보
  • RUN : nginx를 설치하기 위해 필요한 셸 스크립트 또는 명령을 입력
  • VOLUME : /data 경로를 이미지를 외부 저장소랑 공유하는 디렉토리 목록
  • CMD : 컨테이너가 동작하게 됐을 때 실행할 실행 파일이나 셸 스크립트
  • WORKDIR : CMD에서 설정한 실행파일이 실행될 디렉토리
  • EXPOSE : 외부와 연결할 포트 번호

 

 

 

Docker build 명령으로 이미지 생성하기

 

Docker build 명령은 Dockerfile에 설정된 이미지를 생성하는 명령입니다.

$ sudo docker build -t nginxtest:0.1 .

Sending build context to Docker daemon  2.048kB
Step 1/11 : FROM ubuntu:14.04
 ---> 13b66b487594
Step 2/11 : MAINTAINER jinsu <djwlstn123@Naver.com>
 ---> Running in 9d3596a43146
Removing intermediate container 9d3596a43146
 ---> abbb27fabc8c
Step 3/11 : RUN apt-get update
 ---> Running in 620216d05c75
Ign http://archive.ubuntu.com trusty InRelease
Get:1 http://security.ubuntu.com trusty-security InRelease [65.9 kB]
Get:2 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]
Get:3 http://archive.ubuntu.com trusty-backports InRelease [65.9 kB]
Get:4 http://security.ubuntu.com trusty-security/main amd64 Packages [1032 kB]
Get:5 https://esm.ubuntu.com trusty-infra-security InReleas
...
..
.
계속 설치중

$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
nginxtest    0.1       740379f9b11b   About a minute ago   232MB
ubuntu       14.04     13b66b487594   14 months ago        197MB
$
  • 아까 지정한 nginxtest 이름과 tag 0.1이 생성되었습니다.

 

 

 

Docker run 명령으로 컨테이너 생성하기

 

Dockerfile로 nginx를 설치하는 이미지를 설정하고 build하여 생성된 이미지를 run 명령을 통해 컨테이너를 생성하여 실행시키는 명령입니다.

$ sudo docker run --name jinsu-nginx -d -p 80:80 -v /root/data:/data nginxtest:0.1
61edbce54f412f5445422515247b95af982c6c99ad24d758c855056c8d69ab28
$ 

$ sudo docker ps -a
CONTAINER ID   IMAGE           COMMAND   CREATED          STATUS         PORTS                                        NAMES
61edbce54f41   nginxtest:0.1   "nginx"   10 seconds ago   Up 9 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   jinsu-nginx
$
  • docker run -d 옵션은 컨테이너를 백그라운드 상태로 실행하는 옵션입니다.
  • docker run -p 80:80 옵션은 제 ubuntu 80번 포트와 생성하는 컨테이너 80번 포트를 연결하는 옵션입니다.
  • docker run -v 옵션은 제 ubuntu /root/data 디렉토리를 생성하는 컨테이너 /data 디렉토리에 연결하는 명령으로 제 /root/data 디렉토리에 파일을 넣으면 생성된 컨테이너에서 해당 파일을 읽을 수 있습니다.

 

 

http://[ubuntu server IP]:80 으로 접속하면 nginx가 정상적으로 동작하는 모습을 볼 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

반응형

+ Recent posts