【Docker】dockerfile을 이용하여 EC2에 Apache 컨테이너를 구축

6164 단어 EC2도커

목표



dockerfile을 사용하여 EC2 인스턴스에 Apache 컨테이너를 구축합니다.

소개



Docker 학습의 비망록 메모입니다.
기본적으로는 이하의 사이트(※)의 내용을 참고로 구축하고 있어,
기본적인 컨테이너나 Docker의 개념도 알기 쉽게 기재하고 있기 때문에, 이쪽을 참고로 하는 것이 좋을까 생각합니다.

※참고 사이트(특히 「그 3:Dockerfile이란 무엇인가?」를 본 기사에서는 주로 이용하고 있습니다.)
【연재】 세계 제일 이해가 깊은 컨테이너 & Docker 입문 ~ 그 1:컨테이너란 무엇? ~
【연재】세계 제일 이해가 깊은 컨테이너 & Docker 입문 ~ 그 2:Docker는 무엇? ~
【연재】세계 제일 이해가 깊은 컨테이너 & Docker 입문 ~ 그 3:Dockerfile이란 무엇인가? ~

전제



EC2 인스턴스(Amazon Linux 2 AMI(HVM), SSD Volume Type 이용)(※)가 구축된 것.

※보안 그룹으로 TCP8080번 포트를 비우는 것.

작업 흐름




항번
제목


1
Docker 데몬 시작

2
Docker 이미지 만들기

3
Docker 컨테이너 시작

4
연결 검증


절차



1.Docker 데몬 시작



①Docker 설치
EC2 인스턴스에 OS 로그인 후 Docker를 설치합니다.
sudo yum install -y docker

②Docker 데몬 기동 및 자동 기동의 유효화
sudo systemctl start docker
sudo systemctl status docker
sudo systemctl enable docker
sudo systemctl is-enabled docker

③ec2-user를 docker 그룹에 소속시킨다
sudo usermod -a -G docker ec2-user
cat /etc/group | grep docker

일단 로그아웃 후(※), docker info 로 Docker의 시스템 정보가 표시되는 것을 확인합니다.
※로그아웃하지 않으면 docker info 실행시 퍼미션 에러가 된다.
[ec2-user@ip-172-31-32-204 ~]$ docker info
Client:
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 19.03.13-ce
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: c623d1b36f09f8ef6536a057bd658b3aa8632828
 runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 init version: de40ad0 (expected: fec3683)
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 4.14.209-160.339.amzn2.x86_64
 Operating System: Amazon Linux 2
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 983.3MiB
 Name: ip-172-31-32-204.ap-northeast-1.compute.internal
 ID: RKGH:NETA:2FJW:FP7Q:X52F:F2DG:NSPR:YCQD:RYG2:XN54:ATEO:CLYY
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

2.Docker 이미지 만들기



① 컨테이너 배치용 PHP 파일 작성
만들 컨테이너에 배포할 PHP 파일을 만듭니다.
vi test.php

test.php
<?php
  echo "hoge";
?>

②dockerfile의 작성
Dockerhub에서 얻은 CentOS 이미지를 기반으로 (FROM), httpd 및 php를 설치 (RUN)하고 이전에 만든 test.php를/var/www/html 아래에 복사 (COPY)하여 임베디드 또한 컨테이너 시작시 httpd 시작 명령을 실행합니다.

※RUN 및 COPY는 Docker 이미지 신규 작성시에 실행해, 이미지내에 짜넣어진다. 반대로 CMD는 컨테이너 시작시 실행할 명령을 지정합니다.
vi dockerfile

dockerfile
FROM centos:centos7

RUN yum -y install httpd php

COPY test.php /var/www/html/

CMD ["/usr/sbin/httpd","-DFOREGROUND"]

③Docker 이미지의 작성CMD 를 사용하여 dockerfile의 흐름을 적용한 docker 이미지를 만듭니다.
현재 디렉토리 내에 존재하는 dockerfile을 이용하여 testphp라는 docker 이미지를 작성한다는 취지의 명령입니다.
# Successfully tagged testphp:latestと最終行に出力されればOK
docker build -t testphp .
dockerfile 에서 docker 이미지 목록을 확인합니다.
베이스로 한 CentOS와 거기에서 커스터마이즈 한 testphp(※)의 Docker 이미지의 작성을 확인할 수 있습니다.

※Docker 이미지 작성시, 태그명을 지정하지 않으면 자동적으로 태그명은 docker build 가 된다.
[ec2-user@ip-172-31-32-204 ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
testphp             latest              f5e7748e4f37        2 minutes ago       348MB
centos              centos7             8652b9f0cb4c        6 weeks ago         204MB

3.Docker 컨테이너 시작



만든 Docker 이미지에서 docker images 에서 docker 컨테이너 testweb을 시작합니다.latest 에서 백그라운드 기동(포어그라운드에서 기동했을 경우 콘솔 조작이 이후 불가가 되므로 기본적으로는 이 옵션은 붙인다), 합니다.
docker run -d -p 8080:80 --name testweb testphp:latest
docker run 에서 컨테이너 목록을 확인하고 testweb이라는 컨테이너를 확인할 수 있습니다.
[ec2-user@ip-172-31-32-204 ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
216b216e14bf        testphp:latest      "/usr/sbin/httpd -DF…"   4 minutes ago       Up 4 minutes        0.0.0.0:8080->80/tcp   testweb

4. 연결 검증



브라우저에서 -d 로 액세스를 걸고 hoge라고 표시되는 페이지가 표시되면 OK입니다.

좋은 웹페이지 즐겨찾기