์ปดํจํฐ ์ ๊ณต์, ํน์ ์ง์
์ผ๋ก ํ๋ ์ฌ๋์ด ์๋๋ค๋ณด๋ ์๋ก์ด ๊ฐ๋
์ ์ต๋ํด์ผํ ๋๋ฉด ์๊ฐ์ด ์๋นํ ์ค๋๊ฑธ๋ฆฌ๋ ํธ์
๋๋ค. ๊ฒ๋ค๊ฐ ํ๊ธ๋ก ๋ ์์ ๊ฐ ์ ์ฐพ์์ง์ง ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด ๋๋์ฑ.
์ด์ฉ๋ค๋ณด๋ ์ด์ ๋ถํฐ ์๊ณ ๋ ์์์ง๋ง ์ธ์ผ์ด ์์๋ ๋์ปค(Docker)๋ผ๋ ๊ฒ์ ๋ํด ์ ํ๊ฒ ๋์์ต๋๋ค. ์๊ฐ๋ณด๋ค ์ฝ์ง๋ง ๋ ์ด๋ ค์ด..
Hyperledger Sawtooth๋ฅผ ๊ตฌ๋์ํค๊ธฐ์ ๋ฌด์ฒ ํธํ์ง๋ง ์ ์์ง๋ชปํ๋ฉด ํํ ๋ฆฌ์ผ์ ๋์จ ๋ด์ฉ ์ดํ์๋ "๊ทธ ๋ค์์ ์ด๋ป๊ฒ ํด์ผํ์ง?"๋ผ๋ ๊ณ ๋ฏผ์ ํฉ์ธ์
๋๋ค.
๊ฒฐ๊ตญ Hyperledger๋ฅผ ์ด์ฉํ ๋ธ๋ก์ฒด์ธDB๋ฅผ ์น ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ๋์ํค๋ ค๋ฉด ๊ฒฐ๊ตญ ์ถ๊ฐ์ ์ธ ์์
์ด ํ์ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
์ง๋์ฃผ ํด๊ฐ ๋์ ํํํ ๋๋ฑ๊ฑฐ๋ฆฌ๋ฉด์ ์ด๊ฒ์ ๊ฒ ํด๋ณธ ๊ฒฐ๊ณผ, ๋์ปค๋ผ๋ ๊ฒ์ ์กฐ๊ธ์ด๋๋ง ์ดํดํ๊ฒ ๋์ด ๊ทธ ๊ณผ์ ์ ๋จ๊ฒจ๋ด
๋๋ค.
(๋์ค์ ์ค์ค๋ก ๋์ด์ผ ๋ณด๊ธฐ ์ํจ์ด ํฝ๋๋ค)
ํ๋ฆฐ ๋ถ๋ถ์ ๊ณผ๊ฐํ ์ง์ ๋ถํ๋๋ฆฝ๋๋ค
ย#1. Docker๋?
์์ฃผ ์ข์ ์ฌ๋ผ์ด๋๊ฐ ์์ด ๋งํฌ๋ฅผ ๊ฑธ์ด๋ก๋๋ค. https://www.slideshare.net/pyrasis/docker-docker-38286477
'๊ฐ์ฅ ๋นจ๋ฆฌ ๋ง๋๋ Docker'๋ผ๋ ์ฑ
์ ์ฐ์ ์ด์ฌํ ๋๊ป์ ๋ง๋ค์ด์ฃผ์ ์ฌ๋ผ์ด๋์ธ๋ฐ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ์ด ์ ๋์์์ต๋๋ค.
์ด๊ฒ์ ๋ณด๊ณ ํ๋ฒ์ ์ดํดํ์ ๋ค๋ฉด ์ ๊ธ์ ๋ณ๋ก ๋์์ด ์๋์ค ๊ฒ์ ๋๋ค.
#2. ์ ๊ฐ ์ดํดํ Docker๋?
๊ฒฐ๊ตญ ํ์ํ ๋ชจ๋์ ๋ธ๋ญ์ฒ๋ผ ๋ง๋ค์ด์ ๊ด๋ฆฌ ๋ฐ ์ค์น, ํ์ฅ ๋ฑ์ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํจ์ ๋๋ค. ์ ๋๋ก ๋ง๋ ์ด๋ฏธ์ง(Image;๋์ปค์ ์๋ ํ ๋ธ๋ญ)๋ ์ด๋ ํ๊ฒฝ์์๋ ๋ถ๋ฌ๋ค์ฌ์ ์ฝ๊ฒ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํด์ง๊ณ , ์ด๋ ํ๊ฒฝ์์๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๋ด๋๋ฐ ์ฉ์ดํฉ๋๋ค.
๋งค๋ฒ ์๋ฒ ์์ ๋ ๋ฐ๋ณตํ๋ ์ํ์น ์ค์น, PHP์ค์น, MariaDB์ค์น ๋ฑ๋ฑ์ ํ๋์ ์ด๋ฏธ์ง๋ก ๋ง๋ค์ด๋ฒ๋ฆฌ๋ฉด ์ฌ๋ฌ ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋๋ฐ ์ฌ์์ง๊ฒ ์ฃ .
#3. Mac์์ ์ฌ์ฉํ๋ Docker
Docker๋ ๋ฆฌ๋
์ค ๊ธฐ๋ฐ์ผ๋ก ๋์๊ฐ๋๋ค. ๋งฅ์ ๋ฆฌ๋
์ค๊ฐ ์๋๊ธฐ์, ๋ถ๋์ดํ๊ฒ Mac OS์์ Linux ๊ฐ์ OS๋ฅผ ํ๊ฒน ์ฌ๋ ค์ค์ผํฉ๋๋ค.
(์ ํ์ด๋ผ ์ฃ์กํฉ๋๋ค)
ย์๋ ๋ถํฐ์๋ค๋๊ฐ Mac์ฉ Docker๋ฅผ ์ค์นํ๋ฉด ์๋์ ์ผ๋ก Virtual Box๋ผ๋ ์ด์์ฒด์ ๊ฐ ์ค์น๋๊ณ , ๊ฐ์ OS๋ก ๋ฆฌ๋ ์ค๊ฐ ์ค์น๋๋๋ฐ ๊ทธ ๊ฒ์ด boot2docker๋ผ๋ ์์ฃผ ๊ฐ๋จํ๊ฒ ๊ตฌ์ฑ๋ ๋ฆฌ๋ ์ค๋ผ๊ณ ํฉ๋๋ค. ์๋์ ๊ฐ์ด ํํํ๊ฒ ์ต๋๋ค.
๋งฅ์ฉ ๋์ปค๋ฅผ ์ค์นํ๋ฉด VirtualBox ๊ฐ ์ค์น๋๊ณ , Kitematic๋ผ๋ ๊ด๋ฆฌ ํด์ ์ฌ์ฉํ๋ฉด ์๋์ ์ผ๋ก default๋ผ๋ ๊ฐ์ ์ด์์ฒด์ ๊ฐ ์ค์น๋ฉ๋๋ค.
์์์ uname -a ๋ก ์ด์์ฒด์ ๋ฅผ ํ์ธํ๋ฉด boot2docker์์ ์ ์ ์์ต๋๋ค.
ย#4. ์ผ๋จ ์์์ ubuntu๋ก ๋ถํฐ...Mac์ boot2docker์ Ubuntu๋ฅผ ์ค์นํ๋ค?
OS ์์ ๊ฐ์OS ์์ ๋ค์ ์ด์์ฒด์ ๋ฅผ?? ์ด๊ฒ ์ดํดํ๋๋ฐ ๋ฉฐ์น ๊ฑธ๋ ธ๋ ๊ฒ ๊ฐ์ต๋๋ค.
(์ ๊ฐ ์ดํดํ๋ฐ๋ก๋)boot2docker ์์ ubuntu๋ฅผ ์ค์นํ๋ค๋ ๊ฒ์ด boot2docker๋ผ๋ ์ฝ์ด ์์์ ubuntu ๋ฆฌ๋ ์ค๊ฐ ๊ฐ๊ณ ์๋ ์์๋ค(์ ๋ช ๋ น์ด ๋ผ๋ ์ง..)๋ฅผ ๋ง๋ถ์ธ๋ค๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค. boot2docker๊ฐ ๋ผ๋๋ฉด, ubuntu๋ผ๋ ์ด์ ์ ๋ถ์ธ๋ค๊ณ ๋ณผ ์ ์๊ฒ ์ต๋๋ค.
์ ์ด์ boot2docker๋ง๊ณ ๊ทธ๋ผ ubuntu๋ฅผ ์ค์นํ๋ฉด ๋์ง ์๋๋? ํ์ ๋ค๋ฉด ์๊ฐ๊ฐ์์๋ ๊ทธ๋๋ ๋ ๊ฒ ๊ฐ์ต๋๋ค๋ง ๋์ปค๊ฐ ๋งฅ์์ ๊ธฐ๋ณธ์ผ๋ก boot2docker๋ก ์ ๊ณตํด์ฃผ๋..
#5. ๊ทธ๋ผ ์ด์ ์ ๋ถ์ฌ๋ด ์๋ค.
Docker image๊ฐ '์ฅ์ฐฉ'๋๋ฉด ๊ทธ๊ฒ์ container๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์ด ์ปจํ ์ด๋๊ฐ ์คํ๊ฐ๋ฅํ ํ๋ํ๋์ ๋ชจ๋์ด ๋๊ฒ ์ต๋๋ค.
์ผ๋จ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ๊ณผ์ ์ Terminal์ ์คํํ๋ ๊ณผ์ ์์๋ถํฐ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1> eval $(docker-machine env default) #'default'๋ผ๋ ์ด๋ฆ์ ๊ฐ์OS๋ฅผ ํ์ฑํ์ํจ๋ค. ์ด ๊ณผ์ ์ ์๋ก์ด ํฐ๋ฏธ๋์์ ํญ์ ์จ์ผํฉ๋๋ค
์์ ๋ช ๋ น์ด๋ฅผ ์คํํ๊ณ ๋๋ฉด Active๊ฐ * ๋ฉ๋๋ค.
2> vi Dockerfile #Dockerfile์ด๋ผ๋ ๊ฒ์ ๋ง๋ ๋ค.
์ด๋ฏธ์ง๊ฐ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋๋์ง์ ๋ํ ์ค๊ณ๋์ ๋๋ค. ์ ๋ ํด๋น ์ด๋ฏธ์ง์ ๋ฐ๋ฅธ ํด๋๋ฅผ ๊ฐ๊ฐ ๋ง๋ค์์ต๋๋ค.์ด๋ฏธ์ง๊ฐ ๋ง๋ค์ด์ง ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณต์ฌํด์ผํ ํ์ผ๋ค์ ๋ชจ์๋๊ฑฐ๋ ํ๊ธฐ ์ํด์ ์ ๋๋ค. ์ฐ์ต์ฉ์ผ๋ก ubuntu_docker๋ผ๋ ํด๋๋ฅผ ๋ง๋ค๊ณ ๊ทธ ์์๋ค๊ฐ Dockerfile์ ๋ง๋ค์์ต๋๋ค.
3> Dockerfile ์ฝ๋ (ubuntu 16.04)
=================
FROM ubuntu:16.04
ENV TERM linux
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update
RUN apt-get install -y
CMD ["/bin/bash"]
==================
์์ค์ ์ถ์๋ ์คํ์ค๋ฒํ๋ก์ฐ์ ๋๋ค. ๊ฐ ์ค์ ๋ํ ์ค๋ช ์ ์ฌ๊ธฐ์ ์๋ตํ๊ฒ ์ต๋๋ค. ๊ฐ๋ ์ก๋ ํ์ด์ง๋ผ์์. ๊ฒฐ๊ตญ ์ฒซ์ค์ ๋๋ค.
FROM 'A' ๋ผ๊ณ ์ฐ๋ฉด A๋ผ๋ ๋์ปค ์ด๋ฏธ์ง๋ฅผ base๋ก ํ๊ฒ ๋ค! ์ ๋๋ค. ์ด๊ฒ ๋ฌด์จ๋ง์ด๋๋ฉด
์ ๊ฐ ๋ง์ฝ, Ubuntu 16.04๋ฅผ ์ด์ฉํด์ ubuntu_junn:16.04 ๋ผ๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์์ต๋๋ค. ๊ทธ๋ผ ๊ทธ ์ดํ์ ์ด ubuntu_junn:16.04๋ผ๋ ์ด๋ฏธ์ง๋ฅผ base๋ก python3.6์ ์น์ Python:3.6์ด๋ผ๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๋ฉด ๋ฉ๋๋ค. ๊ทธ ๋ FROM ubuntu_junn:16.04 ๋ผ๊ณ ์ฐ๋ฉด ๋๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ผ ์ง๋ฌธ, ubuntu:16.04์ด๋ผ๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ณ ๋ค์ python์ด๋ผ๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ง ๋ง๊ณ , ํ๋ฒ์ ์ค์น๋ ์ด๋ฏธ์ง๋ก ๋ง๋ค๋ฉด ์๋ผ? ๋ผ๊ณ ํ๋ค๋ฉด
๋น์ฐํ ๋ฉ๋๋ค. ์์ RUN apt-get ... ๋ค์ python๋ ์ค์นํด๋ฒ๋ฆฌ๋ฉด ๋ฉ๋๋ค.
๋ค๋ง ์ด๋ ๊ฒ ๋๋ ๋ชฉ์ ์ ๊ทธ๋ฅ ์๊ฐ์๊ฐ ์ชผ๊ฐ๋์ผ๋ฏ๋ก์ ์ฌํ์ฉ์ ๋์ด๋ ๊ฒ์ด์ฃ . python3๋ฅผ ์ค์นํ python3_junn ์ด๋ฏธ์ง, python2๋ฅผ ์ค์นํ python2_junn ์ด๋ฏธ์ง๋ฅผ ๋ฐ๋ก ๋๊ณ ์ถ๋ค๊ฑฐ๋(๋ฌผ๋ก ๊ทธ๋ดํ์๊ฐ ์์ง๋ง) ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์์ Dockerํ์ผ์ ๊ฒฐ๊ตญ, Ubuntu:16.04 ๋ผ๋ ์ด๋ฏธ์ง(์ธํฐ๋ท์ ์ฌ๋ ค์ ธ์๋ ๊ธฐ๋ณธ ์ด๋ฏธ์ง)๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ ๊ฒ์ด๋ฉฐ, (ENV๋ ์ ๊น ๋ฌด์ํ๊ฒ ์ต๋๋ค) RUN์ด๋ผ๋ ๋ช ๋ น์ด๋ฅผ ํตํด apt-get์ ์คํํจ์ผ๋ก์จ ์ต์ ์ ubuntu 16.04๋ฅผ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ฒ ๋ค ์ ๋๋ค.
์ค์ํ๊ฒ์ ์ด๋ ๊ฒ ์์ฑ๋ 'Dockerfile์ ํตํด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ๋ ์ต์ ' ์ธ ๊ฒ์ด์ง, ํญ์ ์ต์ ์ ์๋๋๋ค. ์ด๋ฏธ์ง์ ์ ๋ฐ์ดํธ์ ๊ด๋ จ๋์ ์ถํ์ ํฌ์คํ ํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
4> Dockerfile๋ก ๋ถํฐ ์ด๋ฏธ์ง ์์ฑ
$ docker build -t ubuntu_junn:latest . #docker build -t ์ด๋ฏธ์ง์ด๋ฆ:ํ๊ทธ(๋ฒ์ ) dockerfile์ํด๋(. ๋๋ /xxx ๋ผ๋ ์ง..)
์ด๋ ๊ฒ ๋๋ฉด ๋ง ์์์ ๋ค์ด๋ก๋๋ฅผ ๋ฐ์ต๋๋ค. ์๋ฃ๋๋ฉด ์ ๊ฐ ๋ง๋ ์ด๋ฏธ์ง๊ฐ ๋น๋๋ค.
5> ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์คํํด๋ณด์(์ปจํ ์ด๋๋ก...)
$ docker run -it ubuntu_junn
์ด ๋ ์ ํฐ๋ฏธ๋์ ๋์ ์ปจํ ์ด๋๊ฐ ์ ์คํ๋๋ ๋ด ๋๋ค.
$ docker container ls ๋ฅผ ์คํ์์ผ๋ณด๋ฉด ์ฒ์์๋ ์๋ฌด๊ฒ๋ ์๋์ต๋๋ค. ์ ํฐ๋ฏธ๋์ด๋ ๊ฐ์OS๋ฅผ activate ์์ผ์ค์ผ ํฉ๋๋ค. (eval $...) ๊ทธ ์ดํ ๋ค์ ์คํ์ํค๋ฉด ์ ๊ฐ ๋ง๋ ์ด๋ฏธ์ง๊ฐ ์ ๋ ์์ต๋๋ค.
๋ค๋ง ์ฌ๋ฐ๋ ๊ฒ์, ๋ง๋ ์ปจํ ์ด๋์์ $ uname -a ๋ฅผ ํตํด์ ๋ณด๋ฉด
boot2docker๋ผ๊ณ ๋์ต๋๋ค. ubuntu๊ฐ ์๋๊ฒ์ด์ฃ . '์๋ฌด๋ฆฌ ๊ฒ์ ์ด๋ป๊ฒ ๊พธ๋ฉฐ๋ ๋ผ๋๋ ๋ณํ์ง ์์'
#6. ํฅํ ๊ณํ์
(1) ์ด๋ฒ์ ๋ง๋ ์ด๋ฏธ์ง๋ฅผ ํตํด python์ ์น์ด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ ์์ ์ ๋๋ค.
python์ ์น์ด ๋ง๋ ์๋ก์ด ์ด๋ฏธ์ง์ python์ ์น์ง ์์ ์ด๋ฏธ์ง๋ ๋์ฒด ์ด๋ค ์ฐจ์ด๊ฐ ์์๊น ๋ณด๊ณ ๋๋ฉด ๋์ปค๋ผ๋ ๋ ์์ด ์กฐ๊ธ ๋ ์ฝ๊ฒ ์ดํด๊ฐ ๋ ๊ฒ์ ๋๋ค.
(2) ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ดํ์๋ hyperledger sawtooth ์ด๋ฏธ์ง๋ค + Django๋ฅผ ์ค์นํ ๋๋ค๋ฅธ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด๋ณด๊ณ ,
(3) ์ต์ข ์ ์ผ๋ก๋ Django ์๋ฒ๋ฅผ ํตํด ๋ธ๋ก์ฒด์ธ DB๋ฅผ ๊ด์ฐฐํด๋ณด๋ ๊ฒ์ ์๋ํด๋ณผ ์์ ์ ๋๋ค.