친구와 함께 배우는 Docker 마스터 클래스: 컨테이너 호스팅부터 사설 레지스트리까지!
친구랑 같이 배우는 Docker 정복기: 컨테이너 호스팅부터 사설 레지스트리까지! (feat. XpressEngine 게시판)
안녕 친구들! 오늘은 나랑 같이 Docker를 좀 더 깊이 파헤쳐 보는 시간을 갖도록 할게. Docker 초보 탈출을 꿈꾸는 너에게 딱 맞는 내용이야! 이번 포스팅에서는 컨테이너 호스팅, 사설 저장소 구축, 그리고 Docker Compose까지, Docker의 핵심 기능들을 실습 위주로 알아볼 거야. 자, 준비됐어? 🚀
**Part 1: XpressEngine 게시판과 함께하는 컨테이너 호스팅!**
먼저, CentOS 7 기반의 XpressEngine(XE) 게시판을 Docker 컨테이너로 호스팅하는 방법을 알아볼게. XE는 괜찮은 오픈소스 게시판이니까 한번 써보면 좋을 거야! 이 실습에서는 XE 컨테이너와 MySQL 컨테이너를 연결해서 사용할 거야.
**1. XE 이미지 만들기 (Dockerfile)**
먼저, XE를 실행하기 위한 환경을 담은 Docker 이미지를 만들어야 해. 이를 위해 `Dockerfile` 이라는 파일을 만들고 다음과 같은 내용을 작성해줘.
```dockerfile
FROM centos:7
RUN yum clean all && yum update -y
RUN yum -y install wget git httpd
RUN wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm && yum -y localinstall remi-release-7.rpm
RUN yum -y install epel-release yum-utils
RUN yum-config-manager --enable remi-php74
RUN yum -y install php php-fpm php-gd php-mysql php-xml
RUN git clone https://github.com/xpressengine/xe-core.git /var/www/html/xe
WORKDIR /var/www/html/xe
WORKDIR /var/www/html
RUN chmod -R 707 xe && chown -R apache:apache xe
EXPOSE 80
CMD ["httpd", "-D", "FOREGROUND"]
```
**설명:**
* `FROM centos:7`: CentOS 7 이미지를 기반으로 이미지를 만들겠다는 뜻이야.
* `RUN`: CentOS 패키지 매니저인 yum을 이용해서 필요한 패키지들을 설치하는 명령어들이야. wget, git, httpd(Apache 웹 서버), php 관련 패키지들을 설치하고 XE 소스 코드를 git clone으로 받아와.
* `WORKDIR`: 작업 디렉토리를 변경하는 명령어야. XE 소스 코드를 놓을 위치를 설정해주는 거지.
* `EXPOSE 80`: 80번 포트를 열어 외부에서 접근할 수 있도록 해주는 거야.
* `CMD`: 컨테이너가 시작될 때 실행할 명령어야. 여기서는 Apache 웹 서버를 foreground 모드로 실행하도록 설정했어.
이 `Dockerfile`을 저장하고, 다음 명령어를 실행하면 XE 이미지를 만들 수 있어.
```bash
docker build -t xe:1.0 .
```
**2. MySQL 컨테이너 배포 (db1)**
다음은 MySQL 컨테이너를 배포하는 명령어야. root 비밀번호를 `test123`으로, 데이터베이스 이름을 `xe`로 설정했어.
```bash
docker run -d --name db1 -e MYSQL_ROOT_PASSWORD=test123 -e MYSQL_DATABASE=xe mysql:5.7
```
**3. XE 컨테이너 배포 (xe1)**
마지막으로, 위에서 만든 XE 이미지를 이용해서 XE 컨테이너를 배포하고, MySQL 컨테이너(db1)과 연결해줘. 외부 8888번 포트를 XE 컨테이너의 80번 포트에 매핑했어.
```bash
docker run -it --name xe1 --link db1:mysql -p 8888:80 xe:1.0
```
`--link db1:mysql` 옵션을 통해 XE 컨테이너는 `db1` 컨테이너를 `mysql` 이라는 이름으로 접근할 수 있어. XE 설치 과정에서 MySQL 접속 정보 입력 시 호스트 이름으로 `db1`을 입력하면 돼!
이제 `http://[가상머신 IP]:8888/xe` 주소로 접속해서 XE를 설치하고 게시판을 사용할 수 있어! 🎉
**Part 2: 나만의 Private Registry 만들기!**
공개 레지스트리인 Docker Hub 말고, 나만의 사설 레지스트리를 만들어 이미지를 안전하게 관리해 보자!
**1. 레지스트리 컨테이너 배포**
먼저, 레지스트리 컨테이너를 배포해줘. 여기서는 `registry` 이미지를 사용할 거야.
```bash
docker container run -d -p 5000:5000 --restart=always --name registry -v /home/rapa/registry:/var/lib/registry registry
```
`/home/rapa/registry` 디렉토리는 레지스트리의 데이터를 저장할 볼륨이야. 이 디렉토리를 미리 만들어줘야 해.
**2. 레지스트리 웹 GUI 배포**
레지스트리 관리를 더 편하게 하려면 웹 GUI를 사용하는 게 좋아. `hyper/docker-registry-web` 이미지를 사용해볼게.
```bash
docker run -d -p 8080:8080 --name registry-web --link registry:private -e REGISTRY_URL=http://[가상머신 IP]:5000/v2 -e REGISTRY_NAME=[가상머신 IP]:5000 --restart=always hyper/docker-registry-web
```
`REGISTRY_URL`과 `REGISTRY_NAME`은 네트워크 환경에 맞게 수정해줘야 해.
**3. 이미지 태깅 및 PUSH**
이제 만들어 놓은 이미지를 사설 레지스트리에 올려보자. 먼저 이미지에 태그를 설정하고, `docker push` 명령어로 사설 레지스트리에 push 해줘.
```bash
docker tag centos:7 localhost:5000/mycentos:1.0
docker push localhost:5000/mycentos:1.0
```
**4. 이미지 PULL**
다시 사설 레지스트리에서 이미지를 가져와보자.
```bash
docker pull localhost:5000/mycentos:1.0
```
**Part 3: 남의 Private Registry에 이미지 PUSH하기 (주의! 보안)**
다른 사람의 사설 레지스트리에 이미지를 push하는 것은 보안 문제 때문에 권장하지 않아. 하지만 실습을 위해 `--insecure-registry` 옵션을 사용하는 방법을 보여줄게. **실제 운영 환경에서는 절대 사용하지 마세요!**
```bash
# /etc/docker/daemon.json 에 다음 내용 추가
{
"insecure-registries": ["192.168.1.117:5000"]
}
# docker daemon 재시작
sudo systemctl restart docker
docker tag centos:7 192.168.1.117:5000/myweb:gunwoo
docker push 192.168.1.117:5000/myweb:gunwoo
```
**Part 4: Docker Compose로 편하게 컨테이너 관리하기!**
Docker Compose를 이용하면 여러 개의 컨테이너를 YAML 파일 하나로 정의하고 관리할 수 있어. 정말 편리하다는 거!
**1. docker-compose.yml 파일 작성**
다음은 WordPress와 MySQL을 함께 배포하는 `docker-compose.yml` 파일의 예시야.
```yaml
version: '3.0'
services:
wordpress:
image: wordpress
ports:
- "8888:80"
environment:
- WORDPRESS_DB_PASSWORD=test123
- WORDPRESS_DB_NAME=wpdb
- WORDPRESS_DB_USER=root
depends_on:
- db
links:
- db:mysql
db:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=test123
- MYSQL_DATABASE=wpdb
```
**2. 배포 및 확인**
`docker-compose up -d` 명령어로 컨테이너들을 배포하고, `docker container ls` 명령어로 배포 상태를 확인할 수 있어.
자, 이렇게 컨테이너 호스팅부터 사설 레지스트리, Docker Compose까지 Docker의 다양한 기능들을 알아봤어. 처음에는 어렵게 느껴질 수 있지만, 하나씩 따라 해 보면 금방 익숙해질 거야! 다음 시간에는 더욱 심화된 Docker 내용으로 돌아올게!
'Tech Story' 카테고리의 다른 글
[Flutter / SQLiTE]SQLiTE의 장단점 및 Flutter와 함께 사용 시 주의사항 (2) | 2025.06.01 |
---|---|
[ISSUE] No Code 툴, 과연 초보자도 쉽게 쓸 수 있을까? (1) | 2025.06.01 |
[Python] 배열 복사 (흔히 하는 실수?) (0) | 2025.05.31 |
[Python] Flask vs Django 특징 및 장단점 비교 (0) | 2025.05.31 |
[Python] Dictionary 와 JSon 비교 및 변환 (1) | 2025.05.31 |