Docker 실행하기

Docker 를 설치하고 나면 이제 실행을 해야 한다. 우선, 원래 실행 방법은 다음과 같은 순서를 따른다.

  1. Docker 이미지 다운로드
  2. 다운로드 된 Docker 이미지를 가지고 Container 생성
  3. Container 실행

Docker 이미지 다운로드는 pull 명령어를 이용하면 된다.

Docker ps -a

Docker 에서 실행중이거나 중지된 Container 의 목록을 보여 준다.

Docker create -t -i imageId /bin/bash [ –name naming ]

Docker Container 를 생성한다. -t 는 tty 를 할당하고 하게 -i 는 Interactive 를 말한다.  보통 -t, -i 옵션을 붙여서 -it 로 붙여서 쓴다. -i 옵션으로 인해서 STDIN 을 받을 수 있는데 이는 /bin/bash 를 통해서 받도록 한다.

Docker 를 생성하면 Container 는 Stopped 된 상태가 된다.

Docker start containerId

정지한 Container 를 start 한다.

Docker start containerId

실행중인 Container 를 stop 한다.

Docker attach containerId

현재 사용하고 있는 Terminal 에 STDIN, STDOUT, STDERROR 를 실행중인 Container 에 붙인다.

앞에서 생성한 Container 에 붙었다. 여기서 다음과 같이 한가지 재미있는 사실을 발견하게 된다.

Container 내에서 top 을 실행해 보면 bash 와 top 두개만 보인다. 원래 리눅스 머신이라면 커널 프로세스들이 모두 보여야 하지만 Container 는 그렇게 실행이 안된다는 사실을 보여준다.

정확하게 Container 가 어떻게 동작하는지를 보여준다.

Container 는 프로세스 격리 모두라는 사실을 보여주는 것이다. bash 를 기반으로 리눅스를 실행하고 Container 안에서 리눅스에서 실행된 명령어만 프로세스로 보인다.

exit 를 하면 Container 에서의 bash 가 종료 된다. 이렇게되면 Container 내에 프로세스가 동작하는게 하나도 없게되서 결국 Container 는 정지가 된다.

Dettach는 없다. 대신에 daemon mode 로 실행을 시켜주거나 잠시 Interactive 모드로 전환할 수는 있다. attach 된 상태에서 Ctrl + P + Q 를 하면 컨테이너를 빠져나오게 된다.

docker run [Options] imageId [Command]

Container 에 명령어를 실행하도록 한다. 만일 Image 가 없다면 Pull 하고 Container 를 Create 하고 Start 한 후에 명령어를 실행해 준다.

그래서 OS 같은 것을 실행하고 싶다면 다음과 같이 많이 사용한다.

 

서비스로 실행 시키기

서비스만 올릴 수 있다. 프로세스 격리모드로 동작하는 docker 에서는 OS를 구동할 필요가 없다. 그냥 서비스만 올릴 수 있다. Apache Httpd, Nginx, Redis, MySQL 등과 같이 외부와 통신을 하는 서비스들만 올리는게 가능하다.

서비스만 올리기에서 핵심은 외부와의 통신을 위한 방법을 제시해야 한다는 것이다. Redis 를 예를들어 보자.

위와같이 Redis 가 구동 되었다.

핵심이 두가지다. 서비스로 실행 시킬시에는 Bash 와같은 Interactive 를 할 수 없다. 따라서 Daemon 모드로 실해하기 위해서 -d 옵션을 준다. -p 로 포트 매핑을 해준다.

포트 매핑은 Docker Container 에서의 포트와 외부 노출되는 포트를 매핑해 주는 것으로 이는 브릿지 네트워크 모드를 이용할때 사용한다.

따라서 외부에서 접속을 하기위해서는 1234 포트를 이용해야 한다.

문제는 이러한 방법으로는 Redis 서비스를 설정할 수 없다. 각종 서비스를 운영할때에 그 서비스에서 사용가능한 옵션들을 설정할 수 있는 위 방법으로는 이게 불가능하다. 위 방법을 이용할 경우에는 기본 설정 값이 적용된다.

또, Redis 의 경우 데이터 저장소도 별도로 지정할 수가 없다. 그냥 모든게 기본 값이다.  Daemon 모드로 동작중이기 때문에 Container 를 중지하면 모든 데이터가 사라진다.

MySQL 올리기

MySQL 은 실행시에 Bash 쉘 환경변수를 인지해 값을 지정할 수 있다.

현시점에서 MySQL  의 최신버전은 5.7 이다. MySQL 5.7 은 처음 설치할때에 root 를 위한 임시패스워드를 생성하는데, Docker MySQL 을 생성할경우에 root 를 위한 임시패스워드를 생성하지 않도록 해야 한다.

MySQL 이 초기화가 어떻게 이루어졌는지를 보고 싶다면 docker logs containerId 를 해보면 된다.

 

참고: 초보를 위한 도커 안내서

Post a comment

You may use the following HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">