p. 155
- 동작중인 컨테이너를 commit 을 통해 이미지로 변환
- tar 파일을 이용하여 내용을 이미지로 전송하는 방식으로 새로운 이미지 만들기 -> image save
- Docker File 을 이용하여 이미지 생성하기 ( 일종의 명세서를 작성하여 생성 )
Docker File 에 적힌 명령은 순차적으로 인식되며, 이를 통해 이미지를 build 한다. 이렇게 생성한 이미지는 로컬에 위치하며, 이를 다른 registry 에 Push 할 수 있다. 단, Push 할 때는 형식에 맞게 이름을 변경 해야 한다
도커는 개발 환경의 컨테이너화를 위한 표준
Docker File 은 도커 이미지, 즉 필요로 하는 개발 환경을 제공하기 위한 여러 가지 명령어들의 집합체
docker build -t test:1.0 .
cmd 는 생성된 이미지가 컨테이너로 실행할 때 실행되는 명령어이며, 여러개의 cmd 를 작성하여도 마지막 하나만 처리된다. Entrypoint 도 생성된 이미지가 컨테이너로 실행될 때 사용되며, 이 역시 여러개 작성하여도 마지막 하나만 처리된다
label : 이미지 작성 목적으로 버전, 타이틀, 설명, 라이선스 정보 등을 작성한다
volume : 볼륨을 이미지 빌드에 미리 설정하는 것으로, volume 으로 지정된 컨테이너의 경로는 볼륨의 기본 경로 /var/lib/docker 와 자동으로 연결된다
RUN : 명령어 작성, 이미지에 패키지 설치, 업데이트 등의 명령을 실행하고자 하는 경우 작성한다
- shell 형식
RUN apt -y install nginx
RUN yum -y install httpd- exec 형식
RUN ["echo","테스트"]
CMD : 이미지가 컨테이너로 배포될 때 실행할 명령어를 추가할 수 있다
CMD nginx -g 'damon off;'
CMD ["nginx","-g","daemon off;"]
- CMD 는 보통 Docker FIle 맨 밑에 작성
ENTRYPOINT : 이미지가 컨테이너로 배포될 때 사용하는 명령어
ENTRYPOINT nginx -g 'daemon off;'
COPY : Host 환경의 파일, 디렉터리를 이미지 안에 복사하는 경우 작성한다. Build 작업이 일어나는 디렉터리 외부의 File 이나 디렉터리는 COPY 할 수 없다
ADD : COPY 를 포함한다. URL 에 있는 파일을 붙여넣기 하는 것도 가능하다. 또한 패키지, 압축 파일의 경우에는 이를 해제하여 내용물만 붙여넣기 할 수 있다. 단, URL 상의 tar 파일등은 해제 되지 않은 상태에서 붙여넣기 된다
COPY test.tar /var/www/html - test.tar 그대로 복사되어 붙여넣기 된다
ADD test.tar /var/www/html - test.tar 을 압축 해제해서 안에 내용물이 복사되어 붙여넣기 된다
VOLUME : 이미지에 볼륨을 할당하고자 할 때 사용한다
VOLUME /var/log
VOLUME ["/var/log"]
EXPOSE : 마치 방화벽에서 몇 번 Port 를 열지 지정하는 것과 유사하다
EXPOSE 80
EXPOSE 8080
EXPOSE ["80","8080"] -> 80 번 Port 와 8080 번 Port 를 연다
WORKDIR : 컨테이너 내에서 작업할 경로 설정
WORKDIR /var/www
"/var/www 에서 작업할 내용"
WORKDIR /root
"/root 에서 작업할 내용"
- RUN cd /var/www 로 할 경우, 해당 /var/www 로 이동한 다음, RUN 명령이 끝나면 다시 원래 위치로 돌아온다. 따라서, RUN 으로는 특정 경로에서 작업하는 것이 불가능하다
USER : 작업 사용자 지정
ARG : 컨테이너가 아니라 이미지에서 사용하는 변수 지정
둘 다 Docker File 내에서 1 번만 사용 가능하다. 여러번 사용하면 마지막 하나만 처리된다
ex)
FROM ubuntu
ENTRYPOINT ["top"]
CMD ["-d","10"]
- 위 형식으로 이미지 생성 후 아래 코드로 배포
docker container run -it test:1.0- top 주기를 10에서 2로 줄이고자 CMD 를 전달했다
docker container run -it test:1.0 -d 2- 이 경우, Docker File 에 적힌 CMD 가 아닌, 전달한 CMD 를 선택하여 top -d 2 를 실행한다
CMD, ENTRYPOINT 에서 실행하는 명령어가 docker container run 에서 실행하는 옵션과 동일한 경우, ENTRYPOINT 는 모두 처리한다. 하지만, CMD 는 동일 옵션이 있는 경우 docker container run 에 있는 옵션만을 처리한다
ENTRYPOINT 는 고정적으로 실행할 명령을 작성하고, CMD 는 변경될 가능성이 있는 매개 변수, 옵션 등에 대하여 지정할 때 주로 사용한다
추가적으로 만약 컨테이너로 배포될 때 실행해야할 명령어가 ENTRYPOINT 나 CMD 두 개 가지고는 부족한 경우에는 shell 파일을 만들고, CMD 나 ENTRYPOINT 를 이용하여 해당 shell 을 실행하도록 설정한다
ex ) 웹 개발 팀장이 팀원들 중에 /blog 를 만드는 팀 에게 아래와 같이 지시했다
"제가 index.html 만들테니, blog 팀은 개발된 파일이나 디렉터리를 blog.tar 로 만드세요"
단, 위의 실습전 각 ubuntu 의 Ip 주소는 192.168.1.118 로 한다
- centos 나 ubuntu 이미지에 웹 서버를 설치하면 /var/www/html 이 홈 디렉터리가 되고, 그냥 웹 서버 이미지를 사용하면, 홈 디렉터리는 위와 같다
# Let NetworkManager manage all devices on this system
network:
ethernets:
ens32:
addresses: [192.168.1.118/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 168.126.63.1]
dhcp4: no
version: 2
#renderer: NetworkManager
FROM ubuntu:18.04
RUN apt-get update
RUN apt-get -y install nginx
EXPOSE 80
ADD index.html /var/www/html/index.html
CMD ["nginx", "-g", "daemon off;"]
- 컨테이너 두 개 필요 ( xe 컨테이너, db 컨테이너 )
- centos:7 을 base 로 xe1.0 이미지 만들기 -> xe01 컨테이너
- mysql:5.7 -> db01 컨테이너
db 정보 : root / test123 / xbdb
centos 에는 php, php-fpm, php-gd, php-mysql, 소스코드 풀기를 해야 한다
docker container run -d --name db01 -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress --restart=always mysql:5.7
- 위 글에서 이어서 진행한다
안녕하세요 운영자님
인카토스입니다.
먼저, 댓글로 인사를 드리게 된 점 양해 부탁 드립니다.
이렇게 연락 드린 이유는 이번에 저희가 제작한 도커 각티슈케이스 제품 협찬을 제안드리고 싶어서 연락 드렸습니다.
개발자들에게 많은 사랑은 받은 각티슈케이스입니다.
저희 상품 블로그 포스팅이 가능하실지 여쭙고자 연락드렸습니다.
아니면 클리앙,서버포럼, okky,2cpu,그누보드 등 가입되어 있으신 개발자 커뮤니티가 있으시다면 해당 커뮤니티에 아래와 비슷하게 게시글을 올려주실수 있을까요?
클리앙 : https://www.clien.net/service/board/park/17797443
연락드릴수 있는방법이 댓글밖에 보이지 않아 이렇게 먼저 연락드립니다.
협찬제안에 긍정적인 검토 부탁드리고 제안이 마음에 드신다면 하기 메일로 메일주시면 제품 보내드리도록 하겠습니다.
sungjh0726@naver.com
협찬제품 링크 : https://incatos.shop/surl/P/11