TOOL/Docker 2017. 12. 29. 22:50

!markdown


# Docker (도커)


나의 팀에서 도입하여 개발도구로 쓰이고 있는 `Docker`와 


현재 사회적 이슈가 되고 있는 `암호화폐`  그리고 `블록체인`...


"Docker로 코인을 채굴을 할 수 있을까?" '`Docker`' '`Coin`' '`Mining`' 이 세 단어로 열심히 구글링해 보았더니


`모네로`와 `제트캐시`의 채굴 이미지를 `ServeTheHome`이라는 곳에서 공개하고 있었다.


도커가 정말 훌륭하고 좋은 기술인데, 재밌게 배워보고 싶다면 `코인채굴`은 좋은 동기부여가 될수 있을 것 같다.






### 1. minergate.com (마이너게이트)


우선 마이너게이트([https://minergate.com/](https://minergate.com/))에 가입한다. 자신의 Email로 가입해 두면 된다.


사실 굳이 Docker를 이용하지 않아도, 이 사이트에서 채굴전용 프로그램을 다운받아서 채굴을 할 수 있다. 


컴퓨터 뿐만아니라 Android AppStore에서 minergate를 검색해보면 스마트폰용 채굴프로그램도 있다. 정말 된다. 하하하


하지만 우린 Docker를 사용해보자.




### 2. Docker 설치


생략




### 3. XMR (Monero/모네로)


이제 모네로를 채굴해보자.


```bash

docker run -itd --name xmr-test -e username=youremail@address.com servethehome/monero_cpu_minergate

```


이 도커명령은 servethehome([https://hub.docker.com/r/servethehome/monero_cpu_minergate/](https://hub.docker.com/r/servethehome/monero_cpu_minergate/))에서 공개한 `모네로 채굴 Docker 이미지`이다. PC의 Docker Registry에 해당 이미지가 없으면 자동으로 [hub.docker.com](https://hub.docker.com)에서 이미지를 받아와서 Container를 생성하여 실행하게 된다.


`-e username=youremail@address.com` 이 부분은 마이너게이트에 가입한 Email을 적어야 자신의 계정으로 채굴량이 전송된다. `-e`는 환경변수를 설정하는 옵션이다. 생성될 Container의 환경변수 username의 값을 입력해주는 것이 된다. 


`--name xmr-test`는 생성하는 Container의 이름을 xmr-test라고 지정하는 것이다.  Container를 생성할때 `--name` 옵션을 설정하지 않아도 자동으로 이름이 붙지만 필히 이름을 지어서 관리하도록 하자.


위의 도커명령을 입력함과 동시에 이미지 안에 있는 `/usr/local/bin/moneroCPU.sh`를 실행시킨다. 이 쉘스크립트안에는 CPU 코어에 맞게 thread를 생성해서 모든 CPU자원으로 채굴하도록 되어 있다.  때문에 바로 CPU의 점유율이 100%를 차지하게 되는데, 코어 수에 따라서는 100% 200% ...를 초과된 수치도 볼 수 있다. PC에 부하가 많이 가겠다는 생각이 든다면 Docker가 제한적으로 자원을 사용하도록 할 수 있다.


```bash

docker run -itd --name xmr-test -e username=youremail@address.com --cpus=".9" servethehome/monero_cpu_minergate

```


`--cpus=".9"` 를 추가로 설정하면 해당 Docker Container는 CPU 점유율 90%를 초과하지 못하게 된다.




### 4. XMR채굴 (thread 조절 가능)


위의 채굴기는 thread 수를 쉽게 조절할 수 없다는 단점이 있다. 


위의 이미지 (servethehome/monero_cpu_minergate)안에 있는 쉘파일(`/usr/local/bin/moneroCPU.sh`)을 조금 수정하여 threads 환경변수를 이용하여 thread 수를 조절할 수 있도록 했다. 


```bash

docker run -itd --name xmr-test2 -e username=youremail@address.com -e threads=1 souljungkim/xmr

```


PC에 부담을 조금만 주려면 `-e threads=1` 이렇게 낮은 수치를 설정하면 되고, 아니면 수치를 더 입력해본다. 


```bash

docker run -itd --name xmr-test2 -e username=youremail@address.com souljungkim/xmr

```


또는 입력하지 않는다면 `servethehome/monero_cpu_minergate`이미지 처럼 최대 thread로 자동설정되도록 만들었다.




### 5. Container 확인 및 제어


#### 1) 잘 채굴되고 있나?


`xmr-test` Container의 Foreground에서 실행중인 `채굴기가 로그를 잘 찍고 있나` 확인해 보자.


```bash

docker logs -f xmr-test

```


`[Ctrl]` + `[C]`로 빠져나올 수 있다.


채굴량을 보려면 마이너게이트([https://minergate.com/](https://minergate.com/))로 가서 [`Dashboard`]를 확인하면 된다. 또는 스마트폰 어플로도 확인 가능하다.



#### 2) Docker Container의 CPU점유율과 메모리 사용량 등.. 확인


`docker stats`로 docker를 Container들의 상태를 확인하고


```bash

docker stats

```


리눅스라면 `top`으로 자신의 PC의 상태도 확인하고 (윈도우즈라면 `작업관리자`)


```bash

top

```


리눅스에서는 `htop`을 이용하면 Core별 CPU점유율을 깔끔하게 확인 가능하다.


```bash

htop

```



#### 3) 채굴을 그만두고 싶다면? 


```bash

docker ps -a

```


사용중인 Container들을 열람한 후


```bash

docker stop xmr-test

```


`stop`하고


```bash

docker rm xmr-test

```


`rm`으로 이력을 지우자.



#### 4) 다시 채굴을 하려면?


다시 위의 `docker run ...`으로 실행하면 된다.



### 6. GPU를 이용한 본격적인 채굴


위의 채굴 방식은 GPU자원을 사용하지 않지만, 원한다면 방법이 있는 모양이다. 


[https://forums.servethehome.com/index.php?threads/monero-gpu-mining-in-docker-with-nvidia-docker.12955/](https://forums.servethehome.com/index.php?threads/monero-gpu-mining-in-docker-with-nvidia-docker.12955/)


이 사이트를 참고해보면 GPU를 활용하는 방법이 나와있다.


```

nvidia-docker run -d -e username=example@example.com servethehome/monero_gpu_nv_minergate

```


이런식으로  `NVIDA-DOCKER`라는 것을 이용하면 GPU자원으로 DOCKER를 생성할 수 있다고 한다. 




### 참고


- servethehome/monero_cpu_minergate: [https://hub.docker.com/r/servethehome/monero_cpu_minergate/](https://hub.docker.com/r/servethehome/monero_cpu_minergate/)


- Mine Monero with Docker Mine Cryptocurrencies with Containers: [https://autoize.com/mine-monero-docker/](https://autoize.com/mine-monero-docker/)


- Monero Mining Benchmarks – CPU Mining With Select Dual Intel Xeon E5 Systems: [https://www.servethehome.com/monero-mining-benchmarks-select-dual-intel-xeon-e5-systems/](https://www.servethehome.com/monero-mining-benchmarks-select-dual-intel-xeon-e5-systems/)


- Monero GPU mining in Docker with nvidia-docker: [https://forums.servethehome.com/index.php?threads/monero-gpu-mining-in-docker-with-nvidia-docker.12955/](https://forums.servethehome.com/index.php?threads/monero-gpu-mining-in-docker-with-nvidia-docker.12955/)