Skip to main content

docker cheat sheet 2016

Unix / Linux#

디스크 공간확인, 드라이브 확인, 사이즈 확인#

df -h
lsblk
du -h

mongodb container 무조건 지우기

sudo docker rm -f mongodb

다시 container 만들고 실행 하기

sudo docker run -d -e TZ='Asia/Seoul' --restart=always --publish=127.0.0.1:28017:27017 --volume=/data/db:/data/db --volume=/opt/mongodb/mongodb.conf:/mongodb.conf --name=realmongo mongo mongod -f /mongodb.conf
  • -d --detch: Run container in background and print container ID
  • --restart string: Restart policy to apply when a container exits (default "no")
  • --publish list: Publish a container's port(s) to the host (default [])
  • --volume list: Bind mount a volume (default [])
  • --name string: Assign a name to the container
  • mongo 는 image name
  • mongod 부터는 command

이때 주의할 점은 /data/db directory에 permission이 777로 설정되어야 한다. (TODO: mongodb data directory permission에 대해 더 알아볼것)

Docker에서 mongodb#

local(mac os)에서 여러개의 meteor app을 실행 할때 공유된 하나의 mongodb를 사용하기 위해 실제로 진행한 작업을 보면 다음과 같다.#

  1. docker를 설치하고 실행
    • Install Docker
    • 기존 container와 image는 다 정리했다. 이런거 좋아해.. 깨끗하게 다 지우고 막.. 그런거.. 그래서 날려먹은 데이터도 많고 파일도 많지만 그래도 버릇은 어쩔수 없어.
  2. mongodb는 깔려있다고 가정하고 없으면 깔아야 겠지.
  3. mongodb data가 저장될 directory 생성하고 permission은 777
    sudo mkdir /data
    sudo mkdir /data/db
    sudo chmod 777 /data/db
  4. docker에 mongo를 실행할 수 있는 이미지와 container 추가하면서 volume도 바인딩. 이 명령의 실행으로 이미지도 만들어지고 컨테이너도 정상적으로 동작되어야 한다. 만일 Restaring(1) 등의 메시지가 보이는 경우 docker logs realmongo명령을 실행해서 오류를 확인해야 한다.
  • 여기서 한가지 중요한 것을 빠트렸다. 타임존을 설정하지 않으면 docker run 할때 UTC를 기본으로 사용하게된다.
  • 이미 만들어진 이미지의 타임존을 바꾸는건 무지 어렵더라. 몰라서 그런건진 모르겠지만...
  • 우선 docker image와 container를 생성하기 전에 docker가 실행될 머신의 타임존을 먼저 설정하자. 혹시 되어 있다면 패스~
  • bash에서 tzselect command를 통해 해당 지역을 설정하고 로그아웃/로그인
  • date명령으로 타임존이 맞는지 확인 (사실 꼭 필요한 내용은 아니다.)
  • docker run 실행시 타임존 설정을 위해 -e 옵션으로 TZ환경값을 TZ='Asia/Seoul' 설정해준다.
    $ sudo docker run -d -e TZ='Asia/Seoul' --restart=always --publish=127.0.0.1:28017:27017 --volume=/data/db:/data/db --volume=/data/config/mongodb.conf:/mongodb.conf --name=realmongo mongo mongod -f /mongodb.conf
  1. 기존 meteor의 mongodb에서 data를 dump, docker에 바인딩된 /data/db 폴더에 backup폴더를 만들고 그곳에...

    $ sudo mongodump --host=127.0.0.1 --port=3001 --db=meteor --out /data/db/backup
  2. 새로만든 docker의 realmongo container에 restore

    $ docker exec -it realmongo mongorestore /data/db/backup/meteor -d realgrid
  3. 이제 meteor app 실행시 연결을 해 보자. execute docker ps command, see the port is 127.0.0.1:28017->27017/tcp, 따라서 MONGO_URL을 아래와 같이 해주면 연결된다.

    $ docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    8839489e9abb mongo "docker-entrypoint..." 4 hours ago Up 3 hours 127.0.0.1:28017->27017/tcp realmongo
    $ MONGO_URL='mongodb://127.0.0.1:28017/realgrid' meteor --port 3010
  4. 만약 meteor app 자체도 같은 docker에서 실행되고 있다면 docker 내부에서 바인딩된 ip를 사용해야 하는데 그 ip address를 알아내려면 docker inspect realmongo로 실행 상태를 확인하고 networksettings.bridge.network.IPAddress를 사용하면 된다.

    ...
    "Networks": {
    "bridge": {
    "IPAMConfig": null,
    "Links": null,
    "Aliases": null,
    "NetworkID": "c8750c0e9a41803643a8ebb205f1502c6b41e818833e938c802e429600bb2a90",
    "EndpointID": "14aa28097bff6bae3b45eb868033138f8b76fb431f807f4e7079f2a475882a84",
    "Gateway": "172.17.0.1",
    "IPAddress": "172.17.0.2",
    ...
### docker의 이미지나 컨테이너의 상태 확인

$ docker inspect 이미지이름|컨테이너이름

### docker의 정보 확인

$ docker info

### docker container 명령 실행

$ docker exec -it 명령

예를들어 'mongodb'라는 이름의 컨테이너에서 mongo를 실행 하려면

$ docker exec -it mongodb mongo myDatabase

bash 실행모드로 들어갈려면?

docker exec -it mongodb bash

또, bash command를 문자열로 입력하여 실행하려면 bash -c 옵션으로...

docker exec -it mongodb bash -c 'ls /data/db/backup'

bash 내에서 nano를 설치하려면?
```bash
# apt-get update
# apt-get install nano
# nano ...

여기서 만약 Error opening terminal: unknown. 이런 오류가 발생하면 export TERM=xterm명령을 실행한다.

docker에서 mongodb backup & restore#

mup 배포시 기본 db 파일 경로는 /var/lib/mongodb 이다. 따라서, mongodump 명령을 아래와 같이 실행하면 백업 파일(bson) 이 저장되는 위치는 /var/lib/mongodb/backup/realgrid-forum 폴더가 된다.

$ docker exec -it mongodb mongodump --out /data/db/backup
$ sudo tar -zcvf /data/db/backup/backup.tar.gz /var/lib/mongodb/backup/realgrid-forum

새로만든 볼륨은 실제 경로와 docker image의 mongo db 경로가 /data/db 로 동일하다. 그렇게 만들었다. 따라서 배업된 위치에서 바로 압축을 풀어 실제 경로로 restore하면 된다.

$ tar -zxvf /data/db/backup/backup.tar.gz
$ docker exec -it realmongo mongorestore /data/db/backup/var/lib/mongodb/backup/realgrid-forum -d realgrid