Docker Machine

Docker 2015. 7. 21. 15:30

Docker Machine


로컬에서 개발 환경을 구축할때 여러대의 가상머신에 Docker를 올리고픈 마음이 생겼는데 boot2docker를 통해서는 하나의 가상머신만을 바라보고 있기때문에 어쩔 수 없이 별도의 독립된 여려개의 VM을 만들어야 했습니다.
물론 Vagrant를 사용하여 불편함을 해소 할 수 는 있습니다만 Docker Machine이 나와서 좀더 수월하게 Docker를 사용할 수 있게 되었습니다. Vagrant와 많은 부분이 유사합니다.

아직은 베타 버전이기 때문에 실제 운영환경에서의 사용은 추천되지 않습니다만 docker의 개발 추이가 상당이 빠르니 머지않아 정식 버전이 나오리라 기대해 봅니다.

Docker Machine은 로컬 서버나 클라우드, 데이터센터 내부에서 Docker 호스트를 생성할 수 있습니다. 로컬이나 원격지의 서버에 Docker 가 설치되며 Docker 클라이언트가 원격지의 Docker와 통신합니다.

Docker 호스트가 생성후 Docker 호스트 재시작, 중지, Docker 업그레이드, Docker 클리이언트 통한 설정 등의 작업이 가능합니다.

설치

해당 파일을 다운받아 docker-machine 으로 파일명을 변경하고 실행 옵션을 주는 것으로 설치는 간단하게 끝납니다.
좀더 자세한 설명은 Docker Machine 문서를 참고해 주세요.

OS X and Linux

OS X나 Linux에서 설치 방법은 바이너리 파일을 PATH(/usr/local/bin)상에 다운로드 하여 실행 가능하도록 변경해 줍니다.
https://github.com/docker/machine/releases/에서 사용하는 OS의 바이너리 파일명을 확인해 주세요.

OSX에서의 다운로드 실행 명령은 아래와 같습니다. Linux의 경우는 darwinlinux로 변경하면 됩니다.

$ curl -L https://github.com/docker/machine/releases/download/v0.3.0/docker-machine_darwin-amd64 > /usr/local/bin/docker-machine
$ chmod +x /usr/local/bin/docker-machine

설치후 버전을 확인합니다.

$ docker-machine -v
machine version 0.3.0

ssh를 사용하지 않고 원격서버의 Docker를 핸들링하기 위해서는 로컬에 Docker 클라이언트를 설치 해야 됩니다.
이미 boot2docker가 설치되어 있다면 설치 하지 않아도 무방할 듯 합니다.

$ curl -L https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
Windows

Windows에서 Docker Machine을 사용할 경우 ssh등의 의존하는 일부 프로그램과 기능 쉘을 제공하는 msysgit을 사용하는 것이 좋습니다.
mssysgit를 설치하고 터미널 프롬프트에서 다음 명령을 실행합니다. 64비트 Windows라고 가정합니다. 32비트의 경우는 x86_64 대신에 i386으로 변경합니다.
https://github.com/docker/machine/releases/에서 사용하는 OS의 바이너리 파일명을 확인해 주세요.

Docker 클라이언트 설치
$ curl -L https://get.docker.com/builds/Windows/x86_64/docker-latest.exe > /bin/docker
Docker Machine 설치
$ curl -L https://github.com/docker/machine/releases/download/v0.3.0/docker-machine_windows-amd64.exe > /bin/docker-machine

Docker Machine 버전 확인

$ docker-machine -v
machine version 0.3.0

로컬 호스트상의 VirtualBox에 docker-machine 생성, 사용 및 관리

먼저 안전하게 VirtualBox 4.3.28 버전을 설치합니다.

docker-machine ls

사용 가능한 서버를 표시합니다.

$ docker-machine ls
NAME   ACTIVE   DRIVER   STATE   URL
docker-machine create —driver [드라이버] [서버 이름]

하나의 가상 서버를 생성합니다.
아래 명령 예제에서는 드라이버에 virtualbox를 지정하여 로컬의 ViertualBox에 dev라는 이름으로 가상 서버를 생성하였습니다. vertualbox 이외의 amazonec2, azure, digitalocean, google 등의 클라우드 환경의 드라이버를 지정 할 수도 있습니다. 드라이버의 자세한 코드는 Docker Machine GitHub drivers 를 참고하세요.

$ docker-machine create --driver virtualbox dev

Creating CA: /home/username/.docker/machine/certs/ca.pem
Creating client certificate: /home/username/.docker/machine/certs/cert.pem
Image cache does not exist, creating it at /home/username/.docker/machine/cache...
No default boot2docker iso found locally, downloading the latest release...
Downloading https://github.com/boot2docker/boot2docker/releases/download/v1.6.2/boot2docker.iso to /home/username/.docker/machine/cache/boot2docker.iso...
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
To see how to connect Docker to this machine, run: docker-machine env dev

생성이 완료되면 docker-machine ls로 서버를 확인해 주세요.

$ docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM
dev             virtualbox   Running   tcp://192.168.99.100:2376

4코어/4GB의 digitalocean의 경우 아래와 같이 드라이버와 옵션을 지정해서 생성 가능합니다.

$ docker-machine create --driver digitalocean --digitalocean-access-token {토큰 지정} --digitalocean-region sgp1 --digitalocean-size 4gb dev
대상 Docker 호스트에 docker 클라이언드 지정
$ eval "$(docker-machine env dev)"

docker 호스트 dev 서버에 docker 클라이언트가 지정되어 docker 명령어가 dev 호스트 서버에서 실행 되어집니다. Docker 호스트를 재기동 하거나 새로운 터미널창을 열었을 경우에는 매번 위의 명령을 실행하여야 합니다.

현재 Docker 클라이언트에 연결된 서버 확인

docker-machine active 로 클라이언트에 연결된 활성화된 호스트명을 확인 할 수 있습니다.

$ docker-machine active
dev
Docker 호스트 서버 정보 확인

$ docker-machine env devdev 서버의 정보를 확인 할 수 있습니다.

$ docker-machine env dev
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://172.16.62.130:2376"
export DOCKER_CERT_PATH="/Users/<your username>/.docker/machine/machines/dev"
export DOCKER_MACHINE_NAME="dev"
# Run this command to configure your shell:
# eval "$(docker-machine env dev)"
Docker 호스트에서 docker 명령 실행

eval "$(docker-machine env dev) 로 Docker 클라이언트를 dev서버에 연결한 뒤에 평소처럼 로컬에서 docker 명령을 실행 하면 됩니다.
현재 열어둔 터미널창에서 eval "$(docker-machine env dev)을 실행했으니 바로 docker 명령어를 실행 합니다.

$ docker run busybox echo hello world
Unable to find image 'busybox' locally
Pulling repository busybox
e72ac664f4f0: Download complete
511136ea3c5a: Download complete
df7546f9f060: Download complete
e433a6c5b276: Download complete
hello world
Docker 호스트의 ip 확인
$ docker-machine ip dev
192.168.99.100
Docker 호스트 컨테이너 실행

호스트에 nginx 웹서버를 실행하고 8000포트를 컨테이너의 80포트로 포워딩 합니다.

$ docker run -d -p 8000:80 nginx

docker-machine ip로 Docker 호스트의 ip를 받아온뒤 8000 포트로 접속하여 웹페이지가 정상적으로 보여지는지 확인 합니다.

$ curl $(docker-machine ip dev):8000

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Docker 호스트의 정지, 시작

docker-machine start로 호스트를 시작하고, docker-machine stop으로 정지가 가능합니다. 아래 예제는 dev 호스트를 정지 후 다시 시작합니다.

$ docker-machine stop dev
$ docker-machine start dev
Posted by dewnine
,

맥 OSX에서 boot2docker의 Docker 컨테이너와의 공유 폴더(볼륨) 사용

맥 에서 Docker를 운영할 경우 boot2docker를 설치하여 운영하게 됩니다. 그런데 boot2docker가 VirtualBox의 가상 머신위에 docker 컨테이너를 사용 하는 방식이여서 docker의 볼륨 공유를 설정 하였을 경우라도 간혹 권한 문제가 발생하기도 합니다.
아래는 Mysql을 설치할 경우 데이터 볼륨을 공유 볼륨으로 지정하여 설치할 경우 아래와 같이 아예 권한을 맥의 호스트 계정의 uid로 생성을 하니 권한 문제가 없이 설치가 되었습니다.

1. Docker의 Mysql의 공식 레포지토리에서 Docker파일을 내려 받습니다.

2. Docker Mysql공식 링크

https://github.com/docker-library/mysql/tree/b4a2bba171214eadf25aff14a13953b64237f5d8/5.6

3. Mysql의 Docker 빌드 파일 다운로드

Dockerfiledocker-entrypoint.sh 파일 2개를 모두 다운 받습니다.

4. Dockerfile 수정

Dockerfile의 4번째 라인의 mysql 유저 생성 부분에서

RUN groupadd -r mysql && useradd -r -g mysql mysql

다음과 같이 boot2docker 의 docker 유저의 uid 와 동일하게 생성하도록 수정합니다.

RUN groupadd -r mysql && useradd -u 1000 -r -g mysql mysql

5. 빌드합니다.

수정한 Dockerfiledocker-entrypoint.sh이 있는 위치에서 빌드하여 이미지를 생성합니다.
아래 예제는 mysql/5.6.osx 라는 이름으로 빌드하고 있습니다.

# docker build -t mysql/5.6.osx .

6. 실행

test-mysql 이름으로 맥 호스트의 /Users/Guest/docker_work/mysql 디렉토리가 Docker의 Mysql 컨테이너를 실행하는 예제입니다. 정상적으로 디비가 생성이 되며 포트 포워드도 하고 있어 맥에서 boot2docker의 아이피로 3316 포트로 Mysql에 연결이 가능합니다.

docker run  --name test-mysql  -p 3316:3306  -v /Users/Guest/docker_work/mysql:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=testpwd  -d mysql/5.6.osx

참고

맥에서 boot2docker를 통해 Docker를 사용할 경우 Mysql뿐만 아니라 httd와 같이 apache 유저를 생성하여 컨테이너를 실행시 컨테이너 실행시 유저 생성부분에서 boot2docker의 docker 유저의 uid로 생성을 하도록 하면 호스트 OS인 맥과 boot2docker의 VM과 VM의 docker 컨테이너에서 공유 폴더를 사용할 수 있습니다.

'Docker' 카테고리의 다른 글

Docker Machine  (0) 2015.07.21
도커 Docker 설치 하기 - CentOS-6.6  (0) 2015.06.02
Mac 일반 터미널에서 Docker 사용하기기  (0) 2015.05.13
Docker  (0) 2015.05.13
Posted by dewnine
,

도커 Docker 설치 하기 - CentOS-6.6

CentOS 6.6 에 Docker를 설치하는 방법에 대해 알아봅니다.
로컬 PC라면 boot2docker를 설치해도 무방 하지만 테스트및 개발 전용 머신이나 전용 PC상의 CentOS 리눅스 서버에 docker를 설치하는 것을 가정합니다.

설치 명령어 정리

yum install epel-release
yum -y remove docker
yum install docker-io
docker pull centos:6
docker images

설치

먼저 EPEL 레포지터리를 활성화 시킵니다. 아직 EPEL Repository가 설치되어 있지 않다면 EPEL installation instructions 를 참고해 주세요.

간단하게 아래 명령어로 EPEL을 사용 할 수 있습니다. epel-release는 CentOS Extras repository에 포함되어 있습니다.

[root@vm ~]$ yum install epel-release

CentOS-6의 경우 시스템 트레이 응용프로그램 과 실행파일의 패키지 이름이 충돌 할 수 있으니 docker-io를 설치하기 위해 docker 패키지를 먼저 삭제해 줍니다.

[root@vm ~]$ yum -y remove docker

그다음 docker-io 패키지를 설치합니다.

[root@vm ~]$ yum install docker-io

docker 동작 확인

docker의 CentOS 6버전을 다운로드 합니다.

[root@vm ~]$ docker pull centos:6
Pulling repository centos
b9aeeaeb5e17: Download complete
f1b10cd84249: Download complete
Status: Downloaded newer image for centos:6

다운 받은 CentOS 이미지가 있는지 확인합니다.

[root@vm ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              6                   b9aeeaeb5e17        5 weeks ago         202.6 MB
centos              centos6             b9aeeaeb5e17        5 weeks ago         202.6 MB

'Docker' 카테고리의 다른 글

Docker Machine  (0) 2015.07.21
맥 OSX에서 boot2docker의 Docker 컨테이너와의 공유 폴더(볼륨) 사용  (0) 2015.07.20
Mac 일반 터미널에서 Docker 사용하기기  (0) 2015.05.13
Docker  (0) 2015.05.13
Posted by dewnine
,

Mac 일반 터미널에서 Docker 사용하기기

Mac에서 boot2docker.app를 실행하게 되면 Mac의 기본 터미널이 실행되고 쉘의 환경변수가 설정이 되면서 Docker 커멘드의 실행이 가능하게 됩니다.

그런데 Mac의 기본 터미널이 약간(?) 불편한지라 보통 기본 터미널 대신에 iTerm을 많이들 사용하리라 생각합니다.
iTerm과 같은 터미널 상에서

boot2docker가 설치되어 있다는 전제하에 일반 터미널에서 boot2docker.app를 실행하지 않고 사용하는 방법은 쉘환경을 설정해 주시면 됩니다.

쉘 환경을 설정해주는 방법은 아래의 명령어 한줄로 간단하게 가능합니다.
boot2docker가 설치되어 있고 VM이 기동되었다면 아래의 명령어로 해당 터미널에서 docker를 활성화 시켜주면 됩니다.
단, 사용하고자 하는 터미널 창마다 실행 해 줄 필요가 있습니다.

$(boot2docker shellinit)

$()도 모두 입력해야 됩니다.

boot2docker의 VM이 기동되지 않고 docker ps를 실행한 경우

dev@test:~$ docker ps
FATA[0000] Get http:///var/run/docker.sock/v1.18/containers/json: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?

boot2docker의 VM이 기동되지 않고 $(boot2docker shellinit)를 실행한 경우

dev@test:~$ $(boot2docker shellinit)
error in run: VM "boot2docker-vm" is not running. (Did you run `boot2docker up`?)

먼저 boot2docker의 vm을 기동합니다.

dev@test:~$ boot2docker up
Waiting for VM and Docker daemon to start...
...............ooo
Started.
Writing /Users/dev/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/dev/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/dev/.boot2docker/certs/boot2docker-vm/key.pem

To connect the Docker client to the Docker daemon, please set:
    export DOCKER_HOST=tcp://192.168.59.103:2376
    export DOCKER_CERT_PATH=/Users/dev/.boot2docker/certs/boot2docker-vm
    export DOCKER_TLS_VERIFY=1

VM이 기동 되었다면 쉘 환견을 설정해줍니다.

dev@test:~$ $(boot2docker shellinit)
Writing /Users/dev/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/dev/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/dev/.boot2docker/certs/boot2docker-vm/key.pem
dev@test:~$

docker 프로세서를 확인해서 문제없이 실행 되는 것을 확인합니다.

dev@test:~$ docker ps -a
CONTAINER ID        IMAGE                COMMAND                CREATED             STATUS                       PORTS               NAMES
f323b6bf5a13        centos6-php:latest   "/bin/sh -c '/etc/in   2 weeks ago         Exited (143) 4 minutes ago                       php
314ee136f2aa        mysql:latest         "/entrypoint.sh mysq   2 weeks ago         Exited (0) 17 seconds ago    3306/tcp            dev-mysql
dev@test:~$

'Docker' 카테고리의 다른 글

Docker Machine  (0) 2015.07.21
맥 OSX에서 boot2docker의 Docker 컨테이너와의 공유 폴더(볼륨) 사용  (0) 2015.07.20
도커 Docker 설치 하기 - CentOS-6.6  (0) 2015.06.02
Docker  (0) 2015.05.13
Posted by dewnine
,

Docker

Docker 2015. 5. 13. 11:41

https://www.docker.com/

컨테이너

Your basic isolated Docker process. 컨테이너와 가상 머신 간의 관계는 쓰레드와 프로세스 간의 관계와 비슷하다. 아니면 스테로이드 주사를 맞은 chroot라고도 생각할 수 있다.

몇 가지 오해가 있다면:

  • 컨테이너는 일시적으로 작동하지 않는다. docker run은 당신이 얼핏 예상하는 그런 식으로 작동하지 않는다.
  • 컨테이너에서 오직 하나의 명령어나 커맨드만 실행시킨다는 것은 잘못된 생각이다. supervisordrunit를 사용할 수 있다..

라이프 사이클

컨테이너를 실행하고 컨테이너에 접속하고자 할 때는 docker start 명령어를 실행하고 docker attach 명령어를 실행한다.

일시적인 컨테이너를 생성하고자 할 때는 docker run -rm 명렁어를 사용해 컨테이너를 생성할 수 있다. 이 컨테이너는 멈춰지면 삭제된다.

이미지 안을 뒤질 필요가 있을 때는 docker run -t -i <myshell> 명령어로 tty를 열 수 있다.

호스트의 디렉토리와 Docker 컨테이너 디렉토리를 맵핑하고자 할 때는 docker run -v $HOSTDIR:$DOCKERDIR 명령어를 사용할 수 있다(also see Volumes section).

컨테이너를 host process manager와 통합하고자 할 때는 Dockre 데몬을-r=false 옵션으로 실행시키고 docker start -a 명령어를 실행하면 된다.

컨테이너의 포트를 호스트 쪽으로 열어 주고자 할 때는 exposing ports을 참조하면 된다.

관련된 정보를 출력해주는 명령어

  • docker ps 명령어는 실행중인 컨테이너 목록을 보여준다.
  • docker inspect ip 주소를 포함한 특정 컨테이너에 대한 모든 정보를 보여준다.
  • docker logs 컨테이너로부터 로그를 가져온다.
  • docker events 컨테이너로부터 이벤트를 가져온다.
  • docker port 컨테이너의 특정 포트가 어디로 연결되어있는지 보여준다.
  • docker top 컨테이너에서 실행중인 프로세스를 보여준다.
  • docker diff 컨테이너 파일 시스템에서 변경된 파일들을 보여준다.

docker ps -a 실행중인 컨테이너와 멈춰있는 컨테이너를 모두 보여준다.

Import / Export

  • docker cp 컨테이너 내의 파일을 호스트로 복사한다.
  • docker export 컨테이너 파일 시스템을 tarball로 출력한다.

Docker 이미지

이미지는 그저 Docker 컨테이너의 템플릿이다.

라이프 사이클

  • docker images 모든 이미지 목록을 보여준다.
  • docker import tarball 파일로부터 이미지를 생성한다.
  • docker build Dockerfile을 통해 이미지를 생성한다.
  • docker commit 컨테이너에서 이미지를 생성한다.
  • docker rmi 이미지를 삭제한다.
  • docker insert URL에서 이미지로 파일을 집어넣는다. * docker load 표준 입력으로 tar 파일에서 (이미지와 태그를 포함한) 이미지를 불러온다.(0.7부터 사용가능).
  • docker save 모든 부모 레이어와 태그, 버전 정보를 tar 형식으로 표준출력을 통해 @@@ (0.7부터 사용가능).

docker importdocker commit 파일 시스템만 셋업하고 Dockefile과 같은 CMD, ENTRYPOINT, EXPOSE는 포함하지 않는다.. bug 참조.

관련된 정보를 출력해주는 명령어

  • docker history 이미지의 이력 정보를 보여준다.
  • docker tag 이미지에 이름으로 태그를 붙여준다(local 혹은 registry).

레지스트리(Registry) & 저장소(Repository)

저장소(repository)란 컨테이너를 위한 파일 시스템을 생성할 수 있는 호스트되는 태그가 붙어있는 이미지들의 집합.

레지스트리란 저장소를 저장해두고 HTTP API를 통해 저장소의 업로드, 관리, 다운로드를 제공하는 호스트를 의미한다. @@@

Docker.io는 매우 다양한 저장소를 포함하고 있는 이미지 [index]를 가지고 있는 중앙 레지스트리이다. @@@

  • docker login 레지스트리에 로그인한다.
  • docker search 레지스트리에서 이미지를 검색한다.
  • docker pull 이미지를 레지스트리에서 로컬 머신으로 가져온다(pull).
  • docker push 이미지를 로컬 머신에서 레지스트리에 집어넣는다(push).

Dockerfile

Docker 설정 파일. docker build 명령어를 통해서 Docker 컨테이너를 만들어낸다. 또한 docker commit 명령어보다 추천되는 명령어이다.

http://github.com/wsargent/docker-devenv를 추천한다. 더 자세한 내용은 best practices 이 글을 추천한다.

레이어

Docker에서 버전화된 파일 시스템은 레이어에 기반하고 있다.. 이는 파일 시스템을 위한 git commits나 차분이라고 생각할 수 있다.

링크

Docker 컨테이너들이 TCP/IP ports으로 링크를 통해 서로 정보를 주고받는다.. Redis로 링크 걸기 and Atlassian에서는 어떻게 작동되는지 예제를 보여준다.

참고 : 만약 컨테이너들 간에 오직 링크를 통해서만 통신을 허용하고 싶다면 Docker 데몬을 실행할 때 icc=false 옵션을 통해 프로세스간 통신을 막을 수 있다.

예를 들어 CONTAINER이라는 이름을 가진 컨테이너가 있다고 하자(docker run -name CONTAINER). 이 컨테이너는 Dockerfile에서 port를 아래와 같이 노출시킨다.

EXPOSE 1337

그리고 다음과 같이 LINKED라고 이름붙여진 또 다른 컨테이너를 만든다.

docker run -d -link CONTAINER:ALIAS -name LINKED user/wordpress

노출된 포트와 CONTAINER의 별칭이 아래와 같이 LINKED 컨테이너의 환경변수로 나타난다:

$ALIAS_PORT_1337_TCP_PORT
$ALIAS_PORT_1337_TCP_ADDR

이를 통해 연결할 수 있다.

이 링크를 삭제하려면 docker rm -link 명령어를 사용하면 된다.

볼륨

Docker의 볼륨은 유동적인 파일시스템이다. 볼륨은 특정 컨테이너에 연결되어있지 않아도 된다.

볼륨은 TCP/IP를 통한 링크가 사용가능한 환경에서 유용하다. 예를 들어 두 Docker 인스턴스에서 파일 시스템으로부터 떨어져서 통신을 해야하는 경우가 있다.

먼저 이것들을 docker 컨테이너에 동시에 마운트 하고 docker run -volume-from 명령어를 실행합니다.

더 자세한 사항은 advanced volumes 페이지를 참고해주세요.

포트 노출하기

포트를 노출시키는 일은 귀찮지만 유용하다.

먼저 Dockerfile에서 포트를 노출시킨다.

EXPOSE <CONTAINERPORT>

그리고 docker run 명령어를 통해서 컨테이너의 포트와 호스트의 포트를 맵핑시킨다.

docker run -p $HOSTPORT:$CONTAINERPORT -name CONTAINER -t someimage

Docker가 가상 머신에서 실행중이라면 추가적인 포트포워딩을 해줘야한다. 이러한 설정을 할 때는 Vagrantfile을 통해서 특정 범위의 포트를 노출시켜 동적으로 맵핑하는 게 편리하다.

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  ...

  (49000..49900).each do |port|
    config.vm.network :forwarded_port, :host => port, :guest => port
  end

  ...
end

만약 포트가 어디로 연결되었는지 기억이 안 난다면 docker port 명령어를 사용할 수 있다.

docker port CONTAINER $CONTAINERPORT

참고:

마지막에 실행된 컨테이너의 ID

alias dl='docker ps -l -q'
docker run ubuntu echo hello world
docker commit `dl` helloworld

명령어와 함께 커밋하기

docker commit -run='{"Cmd":["postgres", "-too -many -opts"]}' `dl` postgres

IP address 정보

docker run -i -t ubuntu /bin/bash

명령어를 사용하거나 아래 명령어를 사용합니다.

wget http://stedolan.github.io/jq/download/source/jq-1.3.tar.gz
tar xzvf jq-1.3.tar.gz
cd jq-1.3
./configure && make && sudo make install
docker inspect `dl` | jq -r '.[0].NetworkSettings.IPAddress'

이미지의 환경 변수 읽어오기

docker run -rm ubuntu env

오래된 컨테이너들 삭제하기

docker ps -a | grep 'weeks ago' | awk '{print $1}' | xargs docker rm

멈춰있는 컨테이너들 삭제하기

docker rm `docker ps -a -q`

이미지의 의존관계 이미지로 출력하기

docker images -viz | dot -Tpng -o docker.png
Posted by dewnine
,