2-1 도커를 사용한 컨테이너 이미지 생성, 실행, 공유

2.1.1 도커 설치와 Hello World 컨테이너 실행

도커 설치 : http://docs.docker.com/engine/installation/

관련 코드 레포:

kubernetes-in-action/app.js at master · luksa/kubernetes-in-action

도커허브는 잘 알려진 소프트웨어 패키지를 위한 즉시 실행 가능한 이미지 보유

ex) busybox 이미지

드라이브 마운트

Windows subsystem for Ubuntu 에서 다른 드라이브도 마운트 하는 방법.tip : 클리앙

도커 설치 확인

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

 

위와 같은 명령어가 뜨면 docker service가 실행이 안되어있는것이다.

 

$sudo systemctl status docker

 

상태를 확인해 봐라 stop일 것이다

 

아래 명령어를 입력해 주자. 그리고 다시 명령어를 실행해보자

$sudo systemctl start docker

$sudo systemctl enable docker

환경은 wsl 이라서 systemctl 이 없기에 설치해줌

# git install
sudo apt install git
 
 
# WSL2 regist Script clone
 
git clone <https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git>
cd ubuntu-wsl2-systemd-script/
bash ubuntu-wsl2-systemd-script.sh
# Enter your password and wait until the script has finished
 
 
# restart WSL window and Check status
systemctl
 

 
#

Untitled

$docker run busybox ehco "Hello world"

Untitled

근데 이 경고는 뭘까..(아마 sudo 모드에서 docker 실행 안해서그런것같음)

백그라운드 동작 이해하기

Untitled

이미지 실행하기

$docker run <image>

컨테이너에 이미지 버전 저장하기

$docker run <image>:<tag>

간단한 node js 애플리케이션 생성

app.js

const http = require('http');
const os = require('os');

console.log("Kubia server starting...");

var handler = function(request, response) {
  console.log("Received request from " + request.connection.remoteAddress);
  response.writeHead(200);
  response.end("You've hit " + os.hostname() + "\\n");
};

var www = http.createServer(handler);
www.listen(8080);

포트 8080 으로 HTTP 서버 시작, 서버는 모든 요청에 대해 상태코드 200 OK 와 You’ve hit <hostname> 의 텍스트를 HTTP 응답

이미지를 위한 Dockerfile 생성

FROM node:7       #사용할 컨테이너 이미지 정의
ADD app.js /app.js //      
ENTRYPOINT ["node", "app.js"]  #이미지 수행시 실행되어야 할 명령어

애플리케이션을 이미지로 패키징 하기 위한 파일

Dockerfile은 app.js와 같은 디렉토리에 있어야 함.

Untitled

$docker build -t kubia .

Untitled

kubia 라고 부르는 이미지를 빌드하라고 요청함.

도커는 디렉터리 내 Dockerfile 을 살펴보고 파일에 명시된 지시사항에 근거해 이미지 빌드함.

Untitled

어떻게 이미지가 빌드되는지 이해하기

이미지 레이어에 관해 이해하기

Untitled

$ docker images
이미지 리스트 조회

Untitled

컨테이너 이미지 실행

$docker run --name ubia-container -p 8080:8080 -d kubia

Untitled

-d : 백그라운드 실행

맥이나 윈도우 사용시 데몬은 가상머신 내부에서 실행중이므로, 가상머신의 호스트이름이나 IP 사용해야함. 이 정보는 DOCKER_HOST 환경변수로 확인ㄱㄴ

애플리케이션 접근

$curl localhost:8080

Untitled

이게 애플리케이션 응답임. 호스트 이름으로 응답한 도커 컨테이너의 ID

실행중인 모든 컨테이너 조회

$docker ps

컨테이너에 관한 추가정보 얻기

$docker inspect kubia-container

실행중인 컨테이너 내부 탐색

내부에서 컨테이너 탐색

# ps aux

컨테이너 내부 실행중인 프로세스 조회

Untitled

호스트 운영체제의 다른 프로세스는 못봄

→ 어떻게 볼 수 있나?

호스트 OS에서 실행중인 컨테이너 프로세스

$ ps aux | grep app.js