Docker 의 는 단순한 가상화 OS 이다 ‘ㅅ’a
보통 OS 테스트를 할때 이용 할수 있다.
일반적인 사용 법은 image 를 pull 해서 받아온다음에 run 을 통해 실행을 시킨다.
좀더 깊게 들어가면 엔지니어가 세팅할때 쓴 명령어를 Dockerfile 으로 만들어서 build 명령을 통해서 docker image 를 만들고 배포 할 수 있다.
배포된 이미지는 개발자가 pull 해서 잘 쓸꺼라고 생각한다.
윈도우 에서 C:\
드라이브에 dockerWORK
이란 폴더를 생성 하고, Dockerfile 이라는 확장자가 없는 txt 파일을 만든다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
FROM rockylinux:latest MAINTAINER Enteroa <enteroa@kakao.com> version: demonize RUN dnf -y install epel-release dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm &&\ dnf -y module enable php:remi-7.3 &&\ dnf -y install procps vim php httpd php-bcmath php-cli php-common php-gd php-intl php-mbstring php-mysqlnd php-opcache php-pdo php-pear php-pecl-mcrypt php-soap php-xml &&\ dnf clean all &&\ sed -i 's+^post_max_size = 8M+post_max_size = 120M+g;s+^upload_max_filesize = 2M+upload_max_filesize = 100M+g;s+^short_open_tag = Off+short_open_tag = On+g;s+;mysqli.allow_local_infile = On+mysqli.allow_local_infile = On+g' /etc/php.ini &&\ sed -i 's+pid = /run/php-fpm/php-fpm.pid+pid = /run/httpd/php-fpm.pid+g' /etc/php-fpm.conf &&\ sed -i 's+listen = /run/php-fpm/www.sock+listen = 9000+g' /etc/php-fpm.d/www.conf &&\ sed -i 's+SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"+SetHandler "proxy:fcgi://127.0.0.1:9000"+g' /etc/httpd/conf.d/php.conf &&\ sed -i 's+UserDir disabled+UserDir html+g;s+tory "/home/\*/public_html">+tory "/var/*/html">+g' /etc/httpd/conf.d/userdir.conf &&\ echo "alias ll='ls -l'" >> /etc/bashrc &&\ DOTHT_NUM=$(grep -n '^<Files ".ht' /etc/httpd/conf/httpd.conf | awk -F: '{print $1+1}') \ sed -i "${DOTHT_NUM}s+Require all denied+Require all granted+g;s+#ServerName www.example.com:80+ServerName localhost+g" /etc/httpd/conf/httpd.conf &&\ ln -sf /dev/stdout /var/log/httpd/access_log && ln -s /dev/stderr /var/log/httpd/error_log WORKDIR /var/www/html EXPOSE 80 ENTRYPOINT ["/bin/sh", "-c" , "/usr/sbin/php-fpm -D && /usr/sbin/httpd -D FOREGROUND"] |
주된 내용은 서버에서 apache 2.4 와 php-fpm 7.3.x 를 구성하기 위한 명령어 및 설정값을 수정 하는 명령어 모음 이다.
cmd 창을 열어서 아래와 같이 빌드명령을 실행한다.
목적이 Docker hub 에 배포 하기 위함 이므로 내docker ID 인 san0123/ 을 넣고 뒷부분에는 사용한 OS 와 설치되는 서비스 명을 붙여 rocky8-http-php 으로 명명 하였다.
설치하는 목적상 php 버전만 변경 되기 때문에 태그로 php 버전을 명시 하였다. :7.3
–no-cache 옵션은 빌드시 캐쉬된 부분을 무시하는 옵션.(테스트로 빌드를 마구 하다보면 필요한 옵션)
1 2 3 |
c:\> cd C:\dockerWORK c:\dockerWORK> docker build --no-cache -t san0123/rocky8-http-php:7.3 ./ |
빌드는 실제 서버에서 명령을 실행한것처럼 순차 실행이 되기 때문에 시간은 오래 걸린다.
컴퓨터 사양에 따라 틀리겠지만 위 Dockerfile은 약 4분 가량 소요 되었다.
아래와 같이 생성된 docker 이미지를 확인할 수 있다.
1 2 3 4 |
c:\dockerWORK> docker images REPOSITORY TAG IMAGE ID CREATED SIZE san0123/rocky8-http-php 7.3 50f60b564539 22 seconds ago 363MB |
생성된 이미지는 아래 명령어로 점검을 해보고 나서 배포하는것을 추천한다. (검사 안하고 올리면 위험할수 있다고 경고 나온다.)
1 |
c:\dockerWORK> docker scan san0123/rocky8-http-php:7.3 |
Docker 허브에 배포를 진행 한다.
1 2 3 4 5 6 7 |
c:\dockerWORK> docker push san0123/rocky8-http-php:7.3 The push refers to repository [docker.io/san0123/rocky8-http-php] 5f70bf18a086: Layer already exists 0311e5a0529a: Pushed 65dbea0a4b39: Layer already exists 7.3: digest: sha256:80bd5a17fcdb5a76c6ddb5825a814c9fce1eca5d36d705b18bf9cefe154ee11b size: 1153 |
배포가 완료 되었다 ‘ㅅ’a
생성한 이미지를 업로드 한뒤에 docker 허브 사이트를 접속 하면 자신이 업로드한 Docker 이미지를 확인할 수 있고
사용 설명등을 써준다 ‘ㅅ’a (누구나 검색해볼수 있기 때문에 영어로 ?)
https://hub.docker.com/r/san0123/rocky8-http-php
배포된 이미지를 다운 받아 사용 하는 방법은 다음과 같다.
1 2 3 |
이미지 다운로드 C:\> docker pull san0123/rocky8-http-php:7.3 컨테이너 실행 C:\> docker run -d -p 80:80 -v w:/project-1:/var/www/html san0123/rocky8-http-php:7.3 |
또는 아래와 그림과 같이 이미지에서 run 에서 옵션을 주어 실행하면 된다.
실행 명령어상 자신의 PC의 80 포트는 컨테이너의 apache 의 80 포트로 연결 하고
윈도우의 w:\project-1
경로를 서버내 /var/www/html
으로 연결 하기 때문에 w:\project-1\index.php
를 아래와 같이 생성 하고 브라우져로 http://127.0.0.1 으로 접속 하면 phpinfo 를 확인 할 수 있다.
1 2 |
<?php phpinfo(); |
httpd 의 access_log, error_log 등은 아래 그림과 같이 도커에서 직접 확인이 가능 하다.
서버의 터미널 접속은 아래와 같이 docker 프로그램에서 클릭을 통해 접속이 가능 하다.
cli 접속은 php.ini 혹은 httpd.conf 등을 수정 하려고 했을것이고, 적용을 위해 apache 혹은 php-fpm 을 재시작 해야 하는 경우 아래와 같이 재시작 버튼으로 컨테이너를 재시작을 한다.
컨테이너 재시작을 하는 경우 CLI 가 닫히는것은 어쩔수 없다…..