3 분 소요

Docker 2일차 - 볼륨 활용

  • 도커 볼륨 - 도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 되며 컨테이너의 변경 사항만 별도로 컨테이너에 쌓인다.

  • 따라서 mysql 컨테이너를 삭제하면 컨테이너 계층에 저장돼 있던 DB 정보도 삭제된다.

  • 이를 방지하기 위한 방법 중 하나가 볼륨을 활용하는 것이다.

 -d : Detached 모드로 컨테이너를 실행한다. 다시 말해 컨테이너를 백그라운드에서 실행 하도록 설정한다. 
 
 -e : 컨테이너 내부의 환경변수를 설정한다. 
 
 --link : 컨테이너의 내부 IP를 알 필요 없이 항상 별명(alias)으로 접근하도록 한다.
 
 docker run 명령에서 연결 옵션은 --link <컨테이너 이름>:<별칭> 형식이다.

 컨테이너 안에서 다른 컨테이너에 접속할 때는 <별칭>:<포트 번호> 형식으로 사용한다.
 # 컨테이너 애플리케이션 구축

docker run -d --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress mysql:5.7 => mysql을 사용하여 database  컨테이너를 생성
docker run -d -e WORDPRESS_DB_PASSWORD=password --name wordpress --link wordpressdb:mysql -p 80 wordpress
docker container prune y
docker ps -a
docker run -d --name detach_test ubuntu:14.04
docker run -i -t --name mysql_attach_test -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress mysql:5.7 => -d의 백그라운드와 -i -t의 포그라운드
dokcer create -i -t --name mycentos centos:7
docker start mycentos
docker attach mycentos => 터미널 2개 실행 후 확인해보면 연동되어 동시에 모니터링 하나만할 수 있는것을 확인.
#도커 볼륨 - 호스트 볼륨 공유

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 => -v 옵션으로 매핑, 컨테이너가 날아가도 /var/lib/mysql 경로로 볼륨은 저장디어 있다. 
docker run -d -e WORDPRESS_DB_PASSWORD=password --name wordpress_hostvolume --link wordpressdb_hostvolume:mysql -p 80 wordpress
ls /home/wordpress_db
docker stop wordpress_hostvolume wordpressdb_hostvolume
docker rm wordpress_hostvolume wordpressdb_hostvolume
ls /home/wrodpress_db => mysql 컨테이너가 사용한 데이터가 그대로 남아 있는것을 확인. 호스트 디렉토리를 컨테이너 디렉토리에 마운트.
# 도커 볼륨 - 도커 자체에서 제공하는 볼륨 기능을 사용.

docker volume create --name myvolume
docker volume ls 
docker volume rm [ID]
docker run -i -t --name myvolume_1 -v myvolume:/root/ ubuntu:14.04
 echo hello, volume! >> /root/volume
docker run -i -t --name myvolume_2 -v myvolume:/root/ ubuntu:14.04
 cat /root/volume => hello, volume! => myvolume_2에서 1에서 만든것이 확인된것을 확인할 수 있다.
!
ctrl+shift+q+p
docker inspect --type volume myvolume => "/var/lib/docker/volumes/myvolume/_data" 해당 경로가 마운트포인트임을 확인
cd /var/lib/docker/volumes/myvolume/_data
ls => volume 확인.
cat volume => hello 메세지를 확인할 수 있다.
# 도커 이미지 생성과 -v 옵션을 활용한 볼륨 자동 생성
 
docker run -i -t --name volume_auto -v /root ubuntu:14.04
docker container inspect volume_auto => 마운트 정보를 포함한 자동 생성 볼륨 확인.

image

image

# next cloud 컨테이너를 구축 후 image로 만든 후 .tar로 압축

docker volume prune
docker ps -a
docker rm -f volume_auto
docker rm -f myvolme_1
docker inspect --type container myvolume_2 => source경로 확인.
cd /var/lib/docker/volumes/myvolume/_data
docker commit -a "moon682" -m "my first commit" myvolume_2 commit_test:first => 컨테이너를 이미지로 만드는 것. -a : 제작자 , -m : 코멘트
docker images =>확인되는 이미지들 중 commit_test만 남기고 rmi로 지움
docker run -i -t --name nextcloud -p 80:80 ubuntu:20.04
apt-get update -y && apt-get upgrade -y
apt update 
apt install apache2
Y
6 asia
70 seoul
service apache2 start
service apache2 status => running 확인.
apt install php-imagick libapache2-mod-php7.4 php7.4-common php7.4-mysql php7.4-fpm php7.4-gd php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-bcmath php7.4-gmp
service apache2 restart
apt install mariadb-server -y
service mysql start
mysql_secure_installation
Enter current password for root (enter for none): 엔터 눌러서 스킵
 Set root password? [Y/n]`Y`
 Remove anonymous users? [Y/n]`Y`
 Disallow root login remotely? [Y/n]`Y`
 Remove test database and access to it? [Y/n]`Y`
 Reload privilege tables now? [Y/n]`Y
mysql -u root -p
create database nextcloud;
 create user nextclouduser@localhost identified by '1111';
 grant all privileges on nextcloud_db.*to nextclouduser@localhost identified by 
'1111';
 flush privileges;
EXIT;
apt install curl git
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
cd /var/www/html
git clone --branch stable20 https://github.com/nextcloud/server.git nextcloud
cd /var/www/html/nextcloud
composer install
git submodule update --init
chown -R www-data:www-data /var/www/html/nextcloud/
chmod -R 755 /var/www/html/nextcloud/
apt install vim
vim /etc/apache2/sites-available/nextcloud.conf
!
<VirtualHost *:80>
 ServerAdmin kchl1216@nver.com
 DocumentRoot /var/www/html/nextcloud/
 ServerName 10.10.41.54/nextcloud
 ServerAlias 10.10.41.54/nextcloud
 
 Alias /nextcloud "/var/www/html/nextcloud/"
 <Directory /var/www/html/nextcloud/>
 Options +FollowSymlinks
 AllowOverride All Require all granted
 <IfModule mod_dav.c>
 Dav off
 </IfModule>
 SetEnv HOME /var/www/html/nextcloud
 SetEnv HTTP_HOME /var/www/html/nextcloud
 </Directory>
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
!
:wq
a2ensite nextcloud.conf
a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime
service apache2 restart
ctrl+shift+q+p

docker commit -a "clman1216" -m "my first commit" nextcloud nextcloud:first
docker inspect --type image nextcloud:first
docker save -o nextcloud.tar nextcloud:first => image를 tar파일로 만듦
docker container prune 다 삭제 => 컨테이너도 layer별로 저장이 됨.
docker rmi -f [IMAGE ID] =>이미지도 레이어 분할 됨을 확인.
docker ps -a
docker load -i nextcloud.tar => tar파일을 image로 만듦
rm -rf nextcloud.tar =>용량때문에 지움
docker images =>tar로 생성된 이미지 확인.
docker create -i -t --name nextcloud -p 80:80 nextcloud:first
docker start nextcloud
docker attach nextcloud
serivce apache2 restart => tar로 생성했던 image를 다시 불러온것으로 구축 성공!

태그:

카테고리:

업데이트:

댓글남기기