Docker 이미지
Docker 이미지를 다운받게되면 다음과 같은 화면을 볼 수 있다.
이미지를 다운받게되면 하나하나 데이터를 받게 되는데 이걸 레이어(layer) 라고 한다.
레이어는 도커 이미지를 `build`할 때 Dockefile의 정의된 명령문의 순서대로 실행이 된다.
즉, 이미지는 레이어 구조로 이루어져 있다.
우리는 Docker 이미지를 생성하기 전 Dockerfile을 빌드하게 되는데 로그를 확인해보면, Dockerfile에 명령한 순서대로 이미지가 빌드되는 것을 확인할 수 있다.
Docker 네트워크
Docker 네트워크는 격리된 컨테이너들을 서로 통신할 수 있게 도와준다.
`docker network ls` 커맨드를 사용하면 Docker 네트워크 목록을 확인할 수 있다.
네트워크 드라이버
Docker 네트워크는 `bridge` `host` `overlay` 등 다양한 종류의 네트워크 드라이버를 지원한다.
- `Bridge` : 하나의 호스트 컴퓨터 내에 여러 컨테이너들끼리 소통할 수 있도록 도와주는 네트워크 드라이버이다.
- 웹 서버 접근 시 `curl -I <ip address>`로 확인이 가능하다.
- `host` : 호스트의 네트워크를 직접 사용하는 네트워크 드라이버이다.
- 컨테이너가 host 드라이버를 사용할 때 다른 컨테이너의 포트가 host를 사용하는 포트와 충돌하면 안된다.
- 웹 서버 접근 시`curl -I <localhost>`로 확인이 가능하다.
- `overlay` : 서로 다른 도커 호스트(분산된 호스트)의 컨테이너 간 통신을 도와주는 드라이버이다.
- 단일 호스트에는 사용하지 않으며 도커 스웜(Docker Swarm)과 같은 클러스터 서비스에 사용된다.
이외에도 Macvlan, ipvlan, None등 여러가지가 있습니다.
네트워크 생성하는 커맨드 (별도 지정이 없으면 bridge가 디폴트) | `docker network create` |
네트워크의 상세 정보를 확인하는 커맨드 | `docker network inspect <network>` |
네트워크에 컨테이너 연결 | `docker network connect <network> <container>` |
네트워크 컨테이너 해제 | `docker network disconnect <network> <container>` |
네트워크 제거 | `docker network rm <network>` |
네트워크 청소 | `docker network prune` |
Docker Network 실습
이번엔 실제로 네트워크를 구성하여 WordPress를 실행해보자.
먼저, 네트워크를 구성하기 위해 `wordpress_net`이라는 네트워크를 만들어주어야 한다.
docker network create wordpress_net
그다음, wordpress의 데이터를 저장한 DB를 생성해줘야 한다.
docker mysql 컨테이너를 생성한다.
docker \
run \
--name "db" \ # 컨테이너 이름 지정
-v "$(pwd)/db_data:/var/lib/mysql" \ # 현재 db_data 경로(볼륨)을 /var/lib/mysql에 붙인다.
-e "MYSQL_ROOT_PASSWORD=root_pass" \ # mysql 초기 환경 설정을 위한 변수 설정이다.
-e "MYSQL_DATABASE=wordpress" \
-e "MYSQL_USER=docker_pro" \
-e "MYSQL_PASSWORD=docker_pro_pass" \
--network wordpress_net \ # 네트워크 이름은 wordpress_net이다. --net으로 설정해도 된다.
mysql:latest # 베이스 이미지
그 다음, wordpress 컨테이너를 생성한다.
docker \
run \
--name app \ # 컨테이너의 이름을 app으로 설정했다.
-v "$(pwd)/app_data:/var/www/html" \ # docker network의 /app_data 볼륨을 컨테이너의 /var/www/html에 붙인다.
-e "WORDPRESS_DB_HOST=db" \ # 워드 프로세스 초기 환경 변수
-e "WORDPRESS_DB_NAME=wordpress" \
-e "WORDPRESS_DB_USER=docker_pro" \
-e "WORDPRESS_DB_PASSWORD=docker_pro_pass" \
-e "WORDPRESS_DEBUG=1" \
-p 8000:80 \ # 포트 바인딩
--network wordpress_net \# 네트워크 설정
wordpress:latest # 베이스 이미지
정상적으로 실행이 되면 `docker ps` 명령어를 통해 컨테이너가 잘 작동하고 있음을 볼 수 있을 것이다.
하지만 우리가 이렇게 길고 복잡한 명령어를 매번 컨테이너를 생성할 때 적어줘야 한다면, 관리하기 어려울 것이다.
뿐만아니라, 컨테이너가 3개라면 mysql보다 wordpress를 먼저 띄울 시 에러가 발생할 수 있다.
이를 해결하기 위해 제작된 것이 docker-compose이다.
docker-compose에 대해서는 다음 포스팅에서 이어서 진행할 예정이다.
참고
https://woochan-autobiography.tistory.com/468
https://www.youtube.com/watch?v=AmSKD4p-jhw&t=42s
'DevOps > Docker' 카테고리의 다른 글
[프리온보딩] Docker Compose (0) | 2023.12.14 |
---|---|
[프리온보딩] Docker의 기본 개념, 어떻게 사용하는지 (0) | 2023.11.25 |