windows 용 docker를 설치한다. 설치가 완료되면 실행하고 WSL로 접속한다.
WSL에서 다음 커맨드를 입력해서 docker가 실행 중인지 알 수 있다.
docker --version

다음과 같이 docker가 실행됨을 알 수 있다.
이제 docker 에서 사용가능한 이미지를 어떻게 조회하는지 알아보자.
docker image ls
docker images
해당 커맨드로 사용가능한 이미지를 확인 할 수 있다.

현재 node가 설치되어 있는데 해당 node를 바로 명령줄에서 사용해보고 싶다면 어떻게 할까?
docker run -it <image_id>

docker의 컨테이너 내부로 들어가고 싶다면 다음 커맨드를 입력한다.
docker run -it <image_id> bash #docker 내부로 들어가서 bash 셸에 접속한 상태다.

cat etc/os-release
다음과 같이 OS에 대한 정보를 볼 수 있다.

lsb_release -a 명령어가 안먹히니까 한 번 설치해보도록 한다.
sed 명령어를 활용해 볼거다.
sed -i 's/deb.debian.org/archive.debian.org/g' /etc/apt/sources.list
sed -i 's/security.debian.org/archive.debian.org/g' /etc/apt/sources.list
apt-get update
여기서 sed는 간단한 텍스트 에디터이고 s는 찾을 패턴을 의미한다. 그리고 g는 전역적인 적용을 의미한다. 비유하면 다음과 같다. ctrl + F 를 통해 문자열 치환을 하는 것과 똑같다.
즉 /(슬래시)로 구분되는 패턴 … deb.debian.org 를 archive.debian.org로 바꾸라는 뜻이고 g는 일괄 변경을 의미하는 거다. g가 없으면 한 줄만 변경되고 끝난다. 그리고 -i 는 inplace의 약자로서 이 플래그가 없으면 안바뀐다.

다음과 같이 저장소에 대한 정보가 갱신되어 받아 올 수 있게 되었다.
apt-get install -y lsb-release
lsb_release -a

다음과 같이 Debian이고 Linux 10 (buster)를 사용한다는 것을 알 수 있게 되었다.
이제 docker 에서 실행한 컨테이너를 어떻게 종료하는지 알아보자.
docker stop <container_id> #해당 커맨드로 종료 가능
docker stop $(docker ps -q) # 해당 커맨드로 싸그리 종료 가능
docker ps #실행중인 docker 컨테이너들을 보여줌

docker file에 대한 공부
FROM node:12
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
EXPOSE 80
CMD ["node", "server.js"]
FROM 은 python 의 import문과 비슷하다.
WORKDIR은 작업디렉터리를 설정하는 것이다.
COPY 는 해당되는 파일을 원하는 경로로 이동가능하다.
RUN 은 npm install 같이 docker build 등을 통해 설치할 경우 설치해야 하는 종속성 설치를 위한 것이다.
EXPOSE는 docker container의 포트 포워딩을 위한 것이다. 즉, 포트 노출이다.
docker start와 docker run 의 차이
| 기능 | docker run | docker start |
| 역할 | 이미지(Image)를 기반으로 새로운 컨테이너(Container)를 만들고 실행 | 이미 멈춰있는(Stopped) 컨테이너를 다시 실행 |
| 대상 | 이미지 | 멈춰있는 컨테이너 |
| 옵션 | 포트(-p), 볼륨(-v), 이름(--name), 환경변수(-e) 등 모든 설정 | -a (attach), -i (interactive) 등 단순 시작 옵션 |
| 풀링(pulling) | 이미지가 없으면 자동으로 다운로드(Pull) | – |


docker run -p 8000:80 -itd <image_id>
를 통해 백그라운드에서 실행가능하다 8000:80은 아까 EXPOSE 해둔 80번 포트와 외부의 8000번 포트를 매칭 시키는 거다 즉, 포트포워딩인데 다음과 같이 사용가능하다.

다음과 같이 8000번 포트로 접근이 가능하다.
이제는 이미 dettach 모드로 실행 중인 docker 프로세스에서 bash 셸로 들어가는 방법을 알아본다.
docker exec -it <container_id> /bin/bash
