Docker + AWS EC2 APM or MySQL 개발환경 구축하기

devdo·2022년 2월 10일
0

Docker

목록 보기
4/9
post-thumbnail

AWS EC2 인스턴스 (Ubuntu 20.04)를 만들고
여기에 Docker를 설치한다.

Docker 설치

필요도구 :
AWS EC2, ssh 원격접속 프로그램(MobaXterm)

우분투 버전에 Docker 설치는 Docker 설치가이드를 참조하자.
https://docs.docker.com/engine/install/debian/

docker 설치 확인

docker --version
# Docker는 설치되자마자 deamon으로 돌아간다.
sudo systemctl status docker

확인해 보면, active (running)가 뜰 것이다.

그 후 docker 설치 처리는 이 블로그 참고.
https://velog.io/@mooh2jj/AWS-EC2-Docker-설치


Aphache 서버 구축하기

Dockerfile: base image 파일로 image 만드는 일련의 과정들을 정리해 놓은 파일

docker는 Dockerfile을 이용하여 손쉽게 동일한 이미지를 반복해서 만들수 있다.

# example 폴더를 만들고 그곳에 Dockerfile을 만든다.
ubuntu@ip-172-31-32-99:~$ mkdir example
ubuntu@ip-172-31-32-99:~$ cd example/
ubuntu@ip-172-31-32-99:~/example$ sudo vi Dockerfile
ubuntu@ip-172-31-32-99:~/example$ cat Dockerfile

Dockerfile

FROM ubuntu:18.04
MAINTAINER Doseonggon <ehtjd33@gmail.com>

RUN apt-get update
RUN apt-get install -y apache2 #install Apache web server (Only 'yes')

EXPOSE 80

CMD ["apachectl", "-D", "FOREGROUND"]

Dockerfile 문법

  • FROM : 베이스 이미지 지정/ 내가 만든 이미지도 가능
  • MAINTAINER : 개발자 정보를 나타냄, 보통 개발자 이메일을 적음.
  • RUN : 명령어 실행. -y : 꼭 넣어주기
  • EXPOSE : 컨테이너로 실행 시 노출시킬 포트. 단순히 해당 포트를 사용한다는 것을 명시하는 것. 이를 사용해도 run 명령어(도커 실행)에서 -P 옵션도 필요
  • CMD : 컨테이너가 시작될 때마다 실행할 명령어를 설정. Dockerfile에서 한 번만 사용 가능.

그외 명령어는 https://ryu-e.tistory.com/10 참조.

Dockerfile build

docker build [OPTIONS] 도커파일경로
# Dockerfile이 있는 경로
docker build -t example .
  • -t : tag의 의미. tag로 example 로 하겠다는 뜻.

# docker 이미지 확인
docker images

Docker 컨테이너 실행

docker run -p 80:80 example

docker 컨테이너 확인

docker ps -a

인바운드 규칙 편집으로 80포트를 열고 브라우저 url로 확인.

우분투(18.04) + apache2 서버 열려있으면 아래 페이지가 뜬다.


php 서버 구축하기

다시 php 서버가 설치가 되게, Dockerfile을 수정해본다.

Dockerfile

FROM ubuntu:18.04
MAINTAINER Doseonggon <ehtjd33@gmail.com>

RUN 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.6

EXPOSE 80

CMD ["apachectl", "-D", "FOREGROUND"]
docker build -t example .

설치시, 이런 옵션을 눌러야 되는 화면이 뜬다. 이런 옵션이 나오는 것은 중단없는 배포시 좋지 않다. 이 옵션을 제거하는 방법이 있다.

Please select the geographic area in which you live. Subsequent configuration
questions will narrow this down by presenting a list of cities, representing
the time zones in which they are located.

  1. Africa      4. Australia  7. Atlantic  10. Pacific  13. Etc
  2. America     5. Arctic     8. Europe    11. SystemV
  3. Antarctica  6. Asia       9. Indian    12. US
Geographic area:

Dockerfile에
ENV DEBIAN_FRONTEND=noninteractive을 추가해주는 것이다.

해당 Dockerfile을 아래 내용대로 수정해보자. 실행에 옵션이 사라지고 설치가 완료될 것이다.

FROM ubuntu:18.04
MAINTAINER Doseonggon <ehtjd33@gmail.com>

# Avoding user interaction with tzdata
ENV DEBIAN_FRONTEND=noninteractive

RUN 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.6

EXPOSE 80

CMD ["apachectl", "-D", "FOREGROUND"]

💥Docker 이미지 삭제

참고로 image가 설치에 오류가 되서 빠지고 확인해보면 <none>이라는 표시로 되있을 것이다. 서버에 용량도 많이 차지 하는 image들은 삭제하는 것이 좋다.

# 이미지 삭제 명령어
docker rmi -f [image id]

해당 Apache 서버 페이지를 새로고침을 해놓으면 아래 화면이 뜰 것이다.

docker run -p 80:80 -v /home/ubuntu/example/html:/var/www/html example
  • -v : volume 다른 외부서버에 마운트를 해준다. 여기선 외부 php서버에게도 example폴더로 연결(마운트)시키는 것이다.

# 다른 터미널에서 해당경로로 이동한 후
ubuntu@ip-172-31-32-99:~/example/html$ sudo vi index.php

index.php

# php 기본정보 출력한다는 뜻
<?php phpinfo(); ?>

해당 php info가 표시가 페이지가 브라우저에서 확인이 된다.


Mysql 서버 만들기

이제 Docker로 mysql container를 만들어보자.

원래는 DB서버 같은 경우, AWS EC2에 직접 설치하지 않고 영구적 보관을 위해 AWS RDS를 쓴다. 하지만 이번 기회에 EC2에 직접 설치하는 것도 배워보자.

mysql은 이미 dockerHub에 등록된 게 있으니 바로 run 하여 컨테이너를 바로 실행시킬 수 있다.

더 자세한 건 이 블로그를 참조해주길 바란다.
http://jmlim.github.io/docker/2019/07/30/docker-mysql-setup/

여기서는 외부에 접속할 포트를 9876 으로 설정했다.
EC2 인스턴스 보안 네트워크 규칙에서 9876 포트를 열어주어야 한다.

  • MySQL 5.7버전
docker run \
  --name mysql_db \
  -d \
  --restart unless-stopped \
  -e MYSQL_ROOT_PASSWORD=1234 \
  -e TZ=Asia/Seoul \
  -p 3306:3306 \
  -v /mysql/conf.d:/etc/mysql/conf.d \
  mysql/mysql-server:5.7
  • MySQL 8.0버전
docker run \
  --name mysql_8.0 \
  -d \
  --restart unless-stopped \
  -e MYSQL_ROOT_PASSWORD=1234 \
  -e TZ=Asia/Seoul \
  -p 3306:3306 \
  -v /mysql/conf.d:/etc/mysql/conf.d \
  mysql:8.0.22 \
  --character-set-server=utf8mb4 \
  --collation-server=utf8mb4_0900_ai_ci
## 윈도우의 경우 path / 더 붙이기
docker run \
  --name mysql_8.0 \
  -d \
  --restart unless-stopped \
  -e MYSQL_ROOT_PASSWORD=1234 \
  -e TZ=Asia/Seoul \
  -p 3306:3306 \
  -v //mysql//conf.d://etc//mysql//conf.d \
  mysql:8.0.22 \
  --character-set-server=utf8mb4 \
  --collation-server=utf8mb4_0900_ai_ci

✨윈도우의 경우 path 표시시,
-v //mysql//conf.d://etc//mysql//conf.d
: 앞에 / 를 붙여준다. 참고 (이스케이프)


여기서 -v /my/custom:/etc/mysql/conf.d는 mysql을 설치한 OS내 /mysql/conf.d과 docker 컨테이너 내 /etc/mysql/conf.d와 연결해준다는 의미다.

docker-compose.yml

version: '3.8'
services:
  mysql_8.0:
    image: mysql:8.0.22
    container_name: mysql_8.0
    restart: unless-stopped
    environment:
      # MYSQL_ROOT_HOST: '%' # '%'는 모든 호스트를 의미	
      MYSQL_ROOT_PASSWORD: 1234
      # MYSQL_DATABASE: shop
      TZ: Asia/Seoul
    ports:
      - "3306:3306"
    volumes:
      - /mysql/conf.d:/etc/mysql/conf.d
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_0900_ai_ci

docker-compose 실행

# 실행
docker-compose up -d

# 중지
docker-compose down

실행되는 docker 컨테이너 확인

docker ps

mysql 컨테이너에 직접 명령 실행


docker exec -it [containerID] bash

or

docker exec -it [containerID] /bin/bash

mysql> 들어가기

mysql -u root -p [password]

# mysql -u [user] -p -h [host주소]
# mysql -h [host주소] -u [user] -p
mysql> CREATE DATABASE TEST;
mysql> SHOW DATABASES;

mysql> USE [database];

EC2인스턴스에서도 mysql 컨테이너에 접속할 수 있다.

mysql-cilent 설치

sudo apt install mysql-client-core-8.0

실제 mysql tool로 접속이 되는지 확인해보자. DBTool로 Hedisql를 사용해보았다.

  • host : AWS EC2 인스턴스 public IPv4주소
  • 사용자 : root
  • 암호 : 1234
  • 포트 : 9876

접속이 잘되는 것을 확인할 수 있다. 위에 만들어 두었던 TEST 데이타베이스가 있는 것을 확인할 수 있다.


✅DB 권한 설정

다시한번 mysql로 들어가(mysql -u root -p [password]) 권한 설정도 가능하다.

CREATE USER 'dsgdocker'@'%' IDENTIFIED BY '1234'

GRANT ALL PRIVILEGES ON *.* TO 'dsgdocker'@'%';

FLUSH PRIVILEGES;

QUIT

EXIT
  • mysql 접속 : mysql -u root -p 비밀번호
  • 계정 생성 : CREATE USER '계정명'@'%' IDENTIFIED BY '비밀번호';
  • 계정 권한 부여 : GRANT ALL PRIVILEGES ON *.* TO '계정명'@'%';
  • 변경 내용 적용 : FLUSH PRIVILEGES;
  • mysql 종료 : QUIT
  • 컨테이너 나가기 : exit or ctrl+d

권한 설정한 아이디에도 접속이 된다.

이로써 도커를 통해서 mysql로 설치가 가능하다는 것을 확인해보았다.



Mysql 추가

Docker Mysql 컨테이너 내 vim 설치하기

mysql confing파일을 수정할 시, container에 bash안에서 설정을 해주어야 한다. 설정파일을 수정할려면 편집기 vim을 설치해주어야 한다.

docker exec -it [mysql컨테이너ID] /bin/bash
vim /etc/mysql/my.cnf
# bash: vi: command not found

vi: command not found 문제로 vi를 설치해주어야 한다.

리눅스 종류 확인

cat /etc/*-release

vi 설치

# 우분투
sudo apt-get update
sudo apt-get install vim

# Red Hat
sudo yum update
sudo yum install vim
# 이것도 안되면!
microdnf install -y vim
profile
배운 것을 기록합니다.

0개의 댓글