【Docker】dockerfile을 이용하여 EC2에 Apache 컨테이너를 구축
목표
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입니다.Reference
이 문제에 관하여(【Docker】dockerfile을 이용하여 EC2에 Apache 컨테이너를 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/OPySPGcLYpJE0Tc/items/b2eb91d144fb481a2f08텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)