본문 바로가기
Engineering/Docker & k8s

[Docker] 도커 컨테이너 다루기

by whybe 2024. 1. 7.

해당 포스팅은 시작하세요! 도커/쿠버네티스를 읽고 작성한 글입니다🐳

1.  컨테이너 애플리케이션 구축

  • 여러 개의 애플리케이션을 한 컨테이너에 설치할 수도 있음.
  • 그러나 컨테이너에 애플리케이션을 하나만 동작시키면 컨테이너 간의 독립성을 보장하고 애플리케이션의 버전 관리, 소스코드 모듈화 등이 쉬워짐.
  • 한 컨테이너에 프로세스 하나만 실행하는 것이 도커의 철학

데이터베이스(MySQL)와 워드프레스 웹서버 컨테이너를 연동해 워드프레스 기반 블로그 서비스 만들기

# mysql 이미지를 사용해 데이터 베이스 컨테이너 생성

docker run -d \
--name wordpressdb \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
mysql
  • -it : 컨테이너를 attach 모드로 실행.  표준 입출력이 활성화된, 상호작용이 가능한 셸 환경을 사용 가능.
  • -d : 컨테이너를 detach 모드로 실행. 입출력이 없는 상태로 컨테이너를 실행하므로 사용자의 입력을 받지 않음.
  • -e : 컨테이너의 내부 환경변수를 설정. 컨테이너화된 애플리케이션은 환병변수에서 값을 가져와 쓰는 경우가 많으므로 자주 사용하는 옵션 중 하나임
# 워드프레스 이미지를 사용해 워드프레스 웹 서버 컨테이너 생성

docker run -d \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=password \
--name wordpress \
--link wordpressdb:mysql \
-p 80 \
wordpress
  • --link : 컨테이너의 내부 IP를 알 필요 없이 항상 컨테이너에 일종의 별명(alias)으로 접근하도록 설정
    • 컨테이너 간의 서로 접근할 때 NAT로 할당받은 내부 IP를 쓰는 것이 가장 간단함.
    • 도커 엔진은 컨테이너에게 내부 IP를 순차적으로 할당하므로 컨테이너가 시작할 때마다 컨테이너의 IP가 매번 변경됨.
    • --link에 입력된 컨테이너가 실행 중이지 않거나 존재하지 않는다면 --link를 적용한 컨테이너 또한 실행할 수 없음.
    • --link 옵션은 컨테이너를 연결해주는 것뿐만 아니라 컨테이너 실행 순서의 의존성도 정의해줌.
    • --link 옵션은 deprecated된 옵션으로 도커 브리지 네트워크의 사용을 권장.

  • -p 옵션에서 80을 입력했으므로 docker ps 명령어를 통해 컨테이너의 80번 포트와 연결된 호스트의 포트를 확인
  • 호스트의 57287 포트와 연결되었으므로 localhost:57287을 통해 워드프레스 웹 서버에 접근 가능

docker exec -it wordpressdb /bin/bash
  • exec 명령어를 사용하면 컨테이너 내부에서 명령어를 실행한 뒤 그 결괏값을 반환받을 수 있음.
    • -it 옵션을 추가하여 /bin/bash를 상호 입출력이 가능한 형태로 exec 명령어를 사용.
    • 옵션을 추가하지 않으면 컨테이너 내부에서 실행한 명령에 대한 결과만 반환.
     

2. 도커 볼륨

  • 도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 되며 컨테이너의 변경 사항만 별로 저장해서 각 컨테이너의 정보를 보존함.
  • 컨테이너를 삭제하면 컨테이너 계층에 저장되어 있던 데이터도 함께 삭제되며, 컨테이너를 삭제하면 데이터를 복구할 수 없음.
  • 컨테이너의 데이터를 영속적으로 보관하기 위해 활용되는 한 가지 방법으로 볼륨(Volume)을 활용하는 방법이 있음.

(수정중)

'Engineering > Docker & k8s' 카테고리의 다른 글

[Docker] 도커란?  (0) 2024.01.03