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가 정상적으로 동작하는 모습을 볼 수 있습니다.
'Kubernetes > Docker' 카테고리의 다른 글
[Docker] insecure-registry 구성 및 설정 (0) | 2022.06.05 |
---|---|
[Docker] Ubuntu 환경에서 Docker 명령어 사용하기 #3 (0) | 2022.06.02 |
[Docker] Ubuntu 환경에서 Docker 명령어 사용하기 #2 (0) | 2022.05.31 |
[Docker] Ubuntu 환경에서 Docker 명령어 사용하기 #1 (0) | 2022.05.28 |
[Docker] Ubuntu 환경에서 Docker 설치하기 (0) | 2022.05.28 |