dockerfile
vi Dockerfile
FROM ubuntu
MAINTAINER 이름이니셜 <이메일계정>
LABEL "version" = "3.0"
docker build -t myimg:3.0 .
Dockerfile 에서 사용하는 논리연산자
&& – AND 연산자
→ 예) cp && cal
cal && cp
|| – OR 연산자
; – 명령어의 나열
→ 예) cal ; sleep 20 ; date ; cp ; lsblk
vi lunch.txt
FROM ubuntu
MAINTAINER 이름이니셜 <이메일계정>
LABEL "version" = "3.0"
RUN useradd bbb
RUN apt-get update
RUN apt-get -y install nginx
RUN echo 아무글자나입력 > /usr/share/nginx/html/index.html
RUN echo 아무글자나입력 > /var/www/html/index.html
RUN rm -rf /var/lib/apt/lists/*
RUN mkdir /WebData
rm -f Dockerfile
docker build -t myimg:4.0 -f lunch.txt .
vi lunch.txt
FROM ubuntu
MAINTAINER 이름이니셜 <이메일계정>
LABEL "version" = "3.0"
RUN useradd bbb && \
apt-get update && \
apt-get -y install nginx && \
echo hello docker > /usr/share/nginx/html/index.html && \
echo hello docker > /var/www/html/index.html && \
rm -rf /var/lib/apt/lists/* && \
mkdir /WebData
docker build -t myimg:5.0 -f lunch.txt .
docker image ls

--> 레이어를 많이 만들면 이미지 사이즈가 커진다.
그래서 && ,||, ;를 사용해서 하나의 명령에 집어 넣으려고 한다.
CMD와 ENTRYPOINT의 공통점
이미지가 컨테이너로 실행될 때 명령어 및 인자 값을 지정할 때 사용
--> 컨테이너의 PID 1번 프로세스를 지정한다.
CMD와 ENTRYPOINT의 차이점
ENTRYPOINT는 반드시 수행해야 하는 명령어를 지정 ( 유저가 변경 불가능)
CMD는 유저에 의해 변경 가능한 것. 옵션 인자 등.
docker build -t myimg .
docker run -d --name myweb -p 8282:80 myimg
→ docker ps
→ 윈도우 웹브라우저 – http://192.168.137.10:8282
→ rmac
vi cold.txt
FROM centos
ENTRYPOINT ["ping", "localhost"]
CMD ["-c", "3"]
docker build -t myping:1.0 -f cold.txt .
docker run --name c2 myping:1.0
docker run --name c3 myping:1.0 -c 10
ps --forest → sh → ps --forest
exit
일반적으로 RUN명령은 Shell 방식으로 쓰고
CMD, ENTRYPOINT는 Exec방식으로 사용. -> (shell형식으로 사용하면, shell이 먼저 실행되고 그 쉘에 의해 CMD 명령이 실행된다. -> PID 1번이 shell로 지정이 된다.)
COPY 명령어와 ADD 명령의 차이점
vi index.html
<html>
<body bgcolor=green>
<h1> hello Dockerfile </h1>
</body>
</html>
vi Dockerfile
FROM ubuntu
MAINTAINER 이름이니셜 <이메일계정>
LABEL "version" = "3.0"
RUN useradd bbb && \
apt-get update && \
apt-get -y install nginx && \
rm -rf /var/lib/apt/lists/* && \
mkdir /WebData
COPY index.html /usr/share/nginx/html/index.html ← 수정한 부분
COPY index.html /var/www/html/index.html ← 수정한 부분
CMD ["nginx", "-g", "daemon off;"]
docker build -t myweb .
→ docker image ls
docker run -d --name c4 -p 8484:80 myweb
→ docker ps
→ 웹브라우저 – http://192.168.137.10:8484
vi Dockerfile
FROM centos
COPY index.html /aaa/index.html
COPY webdata.tar /bbb/
cp /etc/passwd . → ls
tar -cvf webdata.tar cold.txt index.html passwd → ls
tar -tvf webdata.tar
docker build -t testimg:1.0 .
docker run -it --name testcon1 testimg:1.0
→ ls /
→ ls -l /aaa
→ ls -l /bbb
→ exit
vi Dockerfile
FROM centos
ADD index.html /aaa/index.html
ADD webdata.tar /bbb/
ADD https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-online-installer-v2.10.0.tgz /ccc/1.tgz
docker build -t testimg:2.0 .
docker run -it --rm --name c5 testimg:2.0
→ ls /
→ ls -l /aaa
→ ls -l /bbb
ADD 명령어는 tar파일을 추가하면 압축이 해제되면서 저장.
온라인 상의 데이터도 추가 가능.
COPY는 시스템 내부에 있는 데이터만 복사 가능
ENV,
EXPOSE
vi Dockerfile
FROM nginx:1.12
ADD index.html /usr/share/nginx/html/index.html
ENV DBUSER aaa
ENV DBPASS=123
EXPOSE 443
docker build -t www .
docker image inspect nginx:1.12 | grep -A 3 ExposedPorts
docker image inspect www | grep -A 3 ExposedPorts

docker run -d --name c1 -p 9090:80 www
→ 웹브라우저 – http://192.168.137.10:9090
docker exec -it c1 /bin/bash
→ env | grep DB
→ exit
rmac
VOLUME, WORKDIR
vi Dockerfile
FROM centos
VOLUME /lasttime
WORKDIR /123
WORKDIR k8s
docker build -t myimg:1.0 .
docker volume ls
docker run -it --name c2 myimg:1.0
→ pwd

→ Ctrl + p, Ctrl + q
docker volume ls
docker inspect c2 | grep -A 10 Mounts

USER
id → su - 일반유저명 → id → exit → id
docker run -d --name c3 -p 8787:80 httpd
docker exec -it c3 /bin/bash
→ id
→ exit
vi Dockerfile
FROM centos
RUN useradd bbb
RUN whoami
USER bbb
RUN whoami
docker build -t myuser .
docker run -it --name c5 myuser
→ id
ARG : 도커파일 내에서 변수를 선언하여 사용할 수 있음.
ONBUILD : 이 이미지를 빌드할 때에는 실행되지 않고 빌드한 이미지를 다른 도커파일에서 FROM으로 사용할 때 실행된다. (여러사람이 개발을 하는 경우, 사용자가 이미지를 사용 시 필수 데이터? 가 있어야 하는 경우.)
vi a.txt
FROM nginx
RUN useradd testweb
RUN mkdir /webdata
ONBUILD ADD devops.tar /usr/share/nginx/html/
ENV Ver 1.0
docker build -t webdev -f a.txt .
devops.tar가 없음에도 불구하고 빌드시에 에러가 발생되지 않는다. -> 실행이 안 됨.
cp ~/3day/index.html /etc/passwd . → ls
tar -cvf devops.tar a.txt index.html passwd → ls
vi Dockerfile
FROM webdev
WORKDIR /webdata
mv devops.tar /tmp
docker build -t finalweb .
mv /tmp/devops.tar .
docker build -t finalweb .
docker run -d --name www4 -p 7080:80 finalweb
→ docker ps
→ 웹브라우저 – http://192.168.137.10:7080
docker exec -it www4 /bin/bash
→ pwd
→ ls /usr/share/nginx/html
→ env
→ exit
rmac
HEALTHCHECK
리눅스 리턴코드
cal → echo $?
sleep 30 → echo $?
ls /et → echo $?
ps --forest → sh → ps --forest → exit → echo $?
sh → ps --forest → exit 숫자 → → echo $?
vi Dockerfile
FROM nginx
HEALTHCHECK --interval=30s --timeout=3s --retries=2 CMD curl -f http://localhost/index.html || exit 1