--- 도커 파일 이해
# vi Dockerfile
FROM ubuntu:18.04
MAINTAINER johnlee
LABEL "name"="webserver"
=> LABEL : Description과 유사
ENV aloha=date
ENV path=/var/www/html
RUN sed -i 's/archive.ubuntu.com/ftp.daumkakao.com/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install apache2 -y
COPY nihao /var/www/html/nihao
=> cp 명령어와 유사
COPY hello.html $path
ADD aws.tar /var/www/html
=> ADD는 외부 tar 파일을 도커 이미지 안쪽에 풀어 넣음
WORKDIR /var/www/html
=> WORKDIR은 cd(chage directory)와 같은 기능
RUN echo ohayo >> ohayo.html
VOLUME /var/www/html
=> -v 옵션과 같이 외부 특정 공간을 컨테이너 내부에서 이용할 수 있도록 마운트
=> -v와 같이 도커 호스트 폴더는 지정할 수 없음, 컨테이너의 경로인 /var/www/html만 정할 수 있음
EXPOSE 80
=> 컨테이너 포트로 80포트를 쓰고 있다고 알려주는 의미, 호스트 포트를 랜덤으로 주기 위해서는 -P를 사용
=> EXPOSE 자체로는 설정에 아무 영향을 주지 않음
ENTRYPOINT ["apachectl"] # ["apachectl", "-D", "FOREGROUND"] 처럼 ENTRYPOINT와 CMD 하나로 쓰기도 가능
=> 실행 명령을 주고, 해당 도커 이미지를 pull해서 사용하는 사람이 apachectl을 수정할 수 없음
CMD ["-D", "FOREGROUND"] # apachectl -DFOREGROUND 의 의미
=> 여기서는 옵션을 줌
# docker build -t skk2022/hello:v1.0 .
=> -t는 태그를 의미
=> skk2022 : 도커 허브의 아이디
=> 빌드라는 것은 도커 파일을 읽어서 도커 파일 내의 스크립트를 수행하는 작업
=> . 은 현재 경로를 의미 : 도커 파일이 현재 위치에 있다는 의미
CI/CD : build(CI) > push(CD) > run(CD)
- 도커파일
# tar cvf test.tar images index.html
=> cvf : 타르 파일을 만드는 명령어
=> c는 archive의 약자, v는 view의 약자, f는 파일명
=> images 폴더와 index.html 파일을 하나의 타르 파일로 만듦# mkdir test && cd $_
# vi DockerfileFROM nginx:latest
ADD test.tar /usr/share/nginx/htmlCMD ["nginx", "-g", "daemon off;"]
=> 도커 이미지가 컨테이너로 바뀌는 순간 CMD가 기동됨
- wordpress dockerfile
# mkdir wordpress && cd $_
# vi Dockerfile
FROM centos:7
MAINTAINER skk@gmail.com
RUN yum install -y httpd php php-mysql php-gd php-mbstring wget unzip
RUN wget https://ko.wordpress.org/wordpress-4.8.2-ko_KR.zip
WORKDIR /var/www/html
RUN unzip /wordpress-4.8.2-ko_KR.zip
RUN mv wordpress/* .
RUN chown -R apache:apache /var/www
CMD httpd -DFOREGROUND
=> ["httpd","-D","FOREGROUND"]와 같은 의미로, []안에 들어가게 하는 것이 퍼포먼스가 더 좋음
# docker image build -t skk2022/wordpress:v1.0 .
# docker push skk2022/wordpress:v1.0
# docker container run -d -p 88:80 --name wordpress wordpress:v1.0
--- 도커 데이터 관리
- Bind Mount
# mkdir volume && cd $_
# mkdir bm01 ; touch bm01/test.txt
# docker container run -itd --name bm-test -v /root/volume/bm01:/mnt centos:7
# docker container exec bm-test ls /mnt
=> exec : 동작 중인 컨테이너에 명령을 실행하기 위해 사용
- Volume
# docker volume create my-vol01
# docker volume list
# docker volume inspect my-vol01
"Mountpoint": "/var/lib/docker/volumes/my-vol01/_data"
# docker container run -itd --name vol-test -v my-vol01:/mnt centos:7
# docker container run -itd -p 801:80 --name vol-web -v my-vol01:/usr/local/apache2/htdocs:ro httpd:latest
=> ro : read only의 약자
# curl 192.168.0.151:801
<html><body><h1>It works!</h1></body></html>
# docker container exec vol-test sh -c "echo "Nihao" > /mnt/index.html"
=> sh : shell명령어
# curl 192.168.0.151:801
Nihao
--- 도커 네트워크 관리
# docker network list
# docker network inspect bridge
"com.docker.network.bridge.name": "docker0",
# docker network create new-net --subnet 172.31.0.0/16 --ip-range 172.31.0.0/20 --gateway 172.31.0.1
# docker network list
--- onbuild 명령어 활용
--- 운영자 역할
# mkdir onbuild && cd $_
# vi Dockerfile.base
=>
FROM ubuntu:18.04
RUN sed -i 's/archive.ubuntu.com/ftp.daumkakao.com/g' /etc/apt/sources.list
RUN apt-get -y update
RUN apt-get -y install nginx
EXPOSE 80
ONBUILD ADD website*.tar /var/www/html/
=> 두 번의 빌드를 하게 되는데, 두 번째 빌드할 때 ADD가 실행되어 html 폴더에 ADD됨
CMD ["nginx", "-g", "daemon off;"]
# docker build -t halilinux/web-base:v1.0 -f Dockerfile.base .
=> -f : Dockerfile이 아니라 다른 이름으로 도커 파일 이름을 정했으므로 -f 옵션을 사용해 명시해 줘야 함
# docker login
# docker push halilinux/web-base:v1.0
# vi Dockerfile:
FROM halilinux/web-base:v1.0
--- 개발자 역할
# mkdir onbuild && cd $_
# ls
website.tar
Dockerfile
# docker build -t halilinux/web-site:v1.0 .
# docker run -d -p 80:80 --name=photoview halilinux/photoview-image:v1.0
# docker login
# docker push halilinux/web-site:v1.0
'KOSA 클라우드 솔루션즈 아키텍트 양성과정' 카테고리의 다른 글
[7.14] Kubernetes (ECS, ad-hoc, yaml, Node, Cluster) (0) | 2022.07.14 |
---|---|
[7.13] Docker( Volume, drain, swarm) (0) | 2022.07.13 |
[7.11] Docker(컨테이너, 이미지 삭제, 파일 이해) (0) | 2022.07.11 |
[7.8] Docker(image, container) (0) | 2022.07.08 |
[7.7] Ansible(환경 설정 자동화, nginx, wordpress 설치) (0) | 2022.07.07 |