동빈나님의 도커 강좌를 실습하면서 남긴 진행 기록입니다.
인스턴스의 도커를 설치하고, 이미지를 빌드하고 컨테이너를 구동시킨다.
그리고 php의 소스코드를 컨테이너에 빌드한다.
도커의 이미지를 로드할 때 메모리가 부족할 수 있으므로 메모리를 체크하며 진행한다.
df -h
패키지 업데이트
sudo apt update
유틸리티 설치
sudo apt install apt-transport-https
sudo apt install ca-certificates
sudo apt install curl
(특정한 웹사이트에서 데이터를 다운로드 받을 때 사용)
sudo apt install software-properties-common
curl을 활용하여 도커 설치를 위한 gpg를 다운로드하고 apt 기능 리스트에 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
도커 레포지터리에서 wubunutu 18.04 버전에 맞는 도커를 다운로드하고 리포지터리 리스트에 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/unbuntu bionic stable"
sudo apt update
apt list에 도커를 다운받기 위한 경로가 추가돼었으므로 도커 ce 설치
apt-cache policy docker-ce
sudo apt install docker-ce
Docker-ce가 설치되지 않고 에러가 발생하면 아래 커맨드를 입력해준다.
Package docker-ce is not available, but is referred to by another package.
sudo apt-get update
sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
도커는 설치하면 자동으로 시스템 서비르 등록되므로 시스템 서비스 상태 확인이 가능하다.
sudo systemctl status docker
docker pull 명령어로 특정한 서버 파일을 이미지 형태로 다운받게 해준다.
docker pull hello-world
도커 이미지 확인
docker images
컨테이너 실행
docker run hello-world
컨테이너 동작 확인
docker ps -a
간단한 웹 서버 컨테이너를 아파치 웹서버로 구동되게 도커파일 작성
cd /home/wubuntu
도커파일 이름은 Dockerfile로 고정
sudo vi Dockerfile
FROM ubuntu:18.04
MAINTAINER whrod whrodtube@gmail.comRUN apt-get update
RUN apt-get install -y apache2 # Install Apache web server (only 'yes')EXPOSE 80
CMD ["apachectl", "-D", "FOREGROUND"]
이미지 빌드
docker build -t example .
이미지 확인
docker images
컨테이너 포트(우측)와 서버 포트(좌측)를 연결해서 컨테이너를 실행
docker run -p 80:80 example
AWS EC2 인스턴스 보안 그룹에 인바운드 규칙 설정 (80번 HTTP 포트)
실제로 아파치 웹 서버가 구동
ex) http://13.125.218.128/:80
앞서 만든 example 이미지에 php 소스코드를 빌드한다.
example 이미지를 수정하기 위해 실행하고 있는 컨테이너를 확인 후 삭제해준다.
컨테이너 확인
docker ps -a
컨테이너 삭제 (컨테이너를 삭제해도 이미지는 삭제되지 않는다.)
docker rm -f 컨테이너id
모든 컨테이너 강제 삭제
docker rm -f 'docker ps -a -q'
(docker ps -a -q 앞뒤로 백틱)이미지 확인
docker images
이미지 삭제
docker rmi -f 이미지id
모든 이미지 삭제
docker rmi -f 'docker images'
(docker images 앞뒤로 백틱)
기존 example 도커파일에 있는 경로로 이동해서
cd /home/ubuntu/
도커파일을 수정한다.
sudo vi Dockerfile
도커 파일에 PHP 설치와 인터렉션을 방지하는 환경 변수를 추가해준다.
FROM ubuntu:18.04
MAINTAINER whrod whrodtube@gmail.com# Avoiding user interaction with tzdata
ENV DEBIAN_FRONTEND=noninteractiveRUN apt-get update
RUN apt-get install -y apache2 # Install Apache web server (only 'yes')
RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:ondrej/php # For Installing PHP 5.6
RUN apt-get update
RUN apt-get install -y php5.6EXPOSE 80
CMD ["apachectl", "-D", "FOREGROUND"]
수정한 example의 도커파일을 빌드하고
docker build -t example .
볼륨 옵션을 열어서 마운팅해서 컨테이너 실행( /var/www/html
는 php의 기본 소스코드 경로 )
볼륨마운팅 된 경로에서 html문서나 php의 소스코드를 작성하면 컨테이너 내부에 있는 php 소스코드 경로와 연결이 됨
docker run -p 80:80 -v /home/ubuntu/html:/var/www/html example
터미널에서 볼륨마운팅 된 경로 /home/ubuntu/html
로 이동하여 php의 버전을 확인할 수 있는 소스코드로 index.php를 수정해서 적용되는지 확인해본다.
cd /home/ubuntu/html
sudo vi index.php
<?php phpinfo(); ?>
80 포트(http://13.125.218.128/:80)에 재접속하면 php 소스코드가 적용된 것을 확인할 수 있다.
컨테이너를 실행하면서 다른 포트를 설정해주면 같은 인스턴스 내에서 여러 컨테이너를 실행시켜 서버를 구동시킬 수 있다.
81번 포트로 컨테이너를 실행 시킨후
AWS EC2 인스턴스 보안그룹에서 인바운드 규칙에 81번 포트를 추가해준다.
docker run -p 81:80 -v /home/ubuntu/html:/var/www/html example
81 포트(http://13.125.218.128/:81)에 접속하면 php 버전 확인 페이지를 볼 수 있다.
참고)
https://www.youtube.com/watch?v=odmG6RJQboE&list=PLRx0vPvlEmdChjc6N3JnLaX-Gihh5pHcx&index=4