docker run -i -t ubuntu:latest
명령어로 컨테이너 내부에 접속한다.
exit을 입력하거나 Ctrl+P, Q를 입력해서 컨테이너 정지 없이나온다.
이번엔 CentOS를 Pull 받고 컨테이너를 생성해보았다.
start와 attach로 컨테이너를 시작하고 내부로 들어갔고, 'run' 명령어가 pull, create, start를 일괄적으로 수행한다.
docker ps
실행 중인 컨테이너 목록을 확인한다. -a 옵션을 포함하면 정지된 컨테이너의 목록도 출력한다.
Status에 Up, Exited를 통해 실행 중인지 종료 상태인지 알 수 있다.
docker run -i -t --name mywebserver 8000:80 ubuntu:latest
위와 같이 사용하면 호스트의 8000번 포트와 컨테이너의 80번 포트와 연결한다는 의미이다.
MySQL 컨테이너를 사용한다고 쳤을 때, 이 컨테이너를 삭제하면 컨테이너 계층에 저장된 데이터베이스의 정보가 함께 삭제된다는 치명적인 단점이 있다. 이를 보완하기 위해 '도커 볼륨'이라는 것을 활용해 호스트와 볼륨을 공유하거나 볼륨 컨테이너를 활용하거나, 도커가 관리하는 볼륨을 생성할 수도 있다.
호스트와 볼륨을 공유함으로써 데이터베이스 컨테이너를 삭제해도 데이터는 삭제되지 않는다.
mysql 데이터베이스 컨테이너를 생성할 때 아래와 같이 -v 옵션에 디렉터리를 공유할 경로를 명시한다.
docker run -d --name wordpressdb_hostvolume \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
-v /home/wordpress_db:/var/lib/mysql \
mysql:5.7
이렇게 /home/wordpress_db 폴더와 /var/lib/mysql 디렉터리를 공유하여 완전히 같은 디렉터리로 사용할 수 있다.
또한 볼륨을 사용하는 컨테이너를 다른 컨테이너와 공유할 수 있다.
볼륨 컨테이너가 존재하면 여러 컨테이너에서 아래와 같이 volumes-from 옵션을 통해 volumn_override라는 볼륨 컨테이너를 volumes_from_container로 다시 공유할 수 있는 것이다.
docker run -i -t \
--name volumes_from_container \
--volumes-from voluems_overide \
ubuntu:latest
즉 이 볼륨 컨테이너는 별도의 역할을 담당하지 않고 호스트로부터 컨테이너에 볼륨만 공유하는 역할을 한다.
다음으로 docker volumn 명령어를 사용해 도커 자체에서 볼륨 기능을 활용해 데이터를 보존하는 방법이다.
docker volume create --name myvolume
docker volume ls
docker run -i -t --name myvolume_1 -v myvolum:/root/ ubuntu:latest
위와 같이 볼륨의 이름과 컨테이너의 공유 디렉터리를 입력해 myvolum이라는 볼륨을 사용하는 컨테이너를 생성한다.
따라서 docker run 시 공유할 디렉터리의 위치를 -v에 입력하면 해당 디렉터리에 대한 볼륨을 자동으로 생성한다.
이렇게 컨테이너의 상태에 대한 정보가 컨테이너의 외부에 있는 것을 Stateless라고 하는데, 컨테이너 자체에 데이터를 저장하는 StateFul의 상태보다 이렇게 호스트에 파일 공유하며 볼륨 컨테이너를 따로 빼는 것이 더욱 바람직한 설계이다.
'Server > Docker' 카테고리의 다른 글
[ICE-LIFE] Docker MySQL 및 PHP 컨테이너 설치 및 연동 (0) | 2023.01.03 |
---|---|
[ICE-LIFE] Docker web server 설치 + 데스크탑 Ubuntu PC에 Jupyter Notebook 설치하기 (0) | 2022.11.02 |
Docker-compose에 Spring Boot, MariaDB 올리기 (0) | 2021.12.28 |
Docker SpringBoot, MariaDB 이미지 빌드하기 (0) | 2021.12.25 |
시니어 코딩 Linux, Docker 강의 Write-up (0) | 2021.12.21 |