Docker 사용 방법 정리

Docker에 대해 검색해 보면 다음과 같이 설명을 시작한다.

"가상 머신처럼 독립된 실행환경을 만들어주는 도구. 마치 운영체제에 운영체제를 설치하는 것처럼 실행 된다. 하지만 운영체제는 실제로 설치되지 않기 때문에 설치 용량이 적고 빠르다. "

https://opentutorials.org/course/128/8657

결국 사용자간 개발환경이나 실행 환경을 공유하여 사용 가능하고,  가상 머신이지만 다른 가상 머신과는 다르게 호스트의 리소스를 동일하게 거의 손실이 없이 사용이 가능하다는 장점이 있는듯 하다.

1. 설치

1.1. Installation
  Reference: https://docs.docker.com/install/linux/docker-ce/ubuntu/

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

$ sudo apt update
$ sudo install docker-ce

1.2 Post-installation – Manage Docker as a non-root user

$ sudo groupadd docker
$ sudo usermod -aG docker $USER

  Log out and log back

1.3 Test

$ docker run hello-world

2. 개념정리

이미지:
– 배포용으로 프로그램, 소스코드, 실행파일 등이 묶여서 있는 형태
– 주로 DockerHub (https://hub.docker.com)를 통해 배포됨

컨테이너
– 이미지를 통해 실행된 상태
– 동일 이미지로 여러개의 컨테이너 생성 가능
– 컨테이너가 삭제되면 컨테이너 내에서 작업한 것들은 사라짐

Dockerfile
– 도커 이미지 생성을 위한 설정 파일
– 주로 Base 이미지에 추가 작업을 통해 만들어짐
– 일반 사용자들이 개발환경 등을 공유할 경우 Dockerfile만 배포해도 가능 (빌드는 각자의 환경에서 알아서 하는걸로)

3. 간단 사용

3.1 이미지 가져오기

$ docker pull <image>

3.2 실행 (컨테이너 생성)

$ docker run <option> <image> 
  -it : Interactive-Pseudo-tty, 쉘을 통한 입출력 가능 
  --name : 컨테이너 이름 (입력하지 않으면 docker가 임의로 생성) 
  --net : 네트워크 연결 (기본은 none, host, bridge 선택 가능, bridge는 호스트의 네트워크와 동일하게 연결 
  --runtime : 실행 환경(?), 일단은 무시 
  -p : 포트 맵핑 (ex: 80:80 - 호스트의 80번 포트를 컨테이너의 80번 포트와 연결) 
  -v : 작업공간 연결 (ex: /root/data:/data - 호스트의 /root/data를 컨테이너의 /data와 연결) 
  -d : 컨테이너를 백그라운드에서 실행

3.3 각종 명령들

$ docker images : 현재 시스템이 존재하는 이미지 리스트 출력
$ docker run : 실행
$ docker ps : 컨테이너 리스트 출력 (실행중인것만)
$ docker ps -a : 모든 컨테이너 리스트 출력 (실행, 종료된 것 포함)
$ docker start <컨테이너이름 or 컨테이너아이디> : 종료되었던 컨테이너 시작
$ docker restart <컨테이너이름 or 컨테이너아이디> : 컨테이너 재시작
$ docker stop <컨테이너이름 or 컨테이너아이디> : 컨테이너 정지
$ docker rm <컨테이너이름 or 컨테이너아이디> : 컨테이너 삭제
$ docker rmi <이미지이름> : 도커 이미지 삭제
$ docker attach <컨테이너이름 or 컨테이너아이디> : 실행중인 컨테이너에 접속
  bash쉘이 실행 중이면 입력창이 보이고, 다른 실행파일이 실행중이면 출력 결과만 보임
  Ctrl+C로 종료하면 컨테이너도 종료, Ctrl+P, Ctrl+Q로 detach 가능
$ docker exec <컨테이너이름 or 컨테이너아이디> : 컨테이너 내에서 실행파일 실행

4. Dockerfile

도커 이미지 생성하기 위한 파일
상세 내용 참고: https://docs.docker.com/engine/reference/builder/#dockerfile-examples

4.1 예제

ubuntu 이미지에 vnc, xvfb, firefox를 설치하고, 이미지를 실행하면 x11vnc 서버를 실행한다.

Dockerfile

FROM ubuntu 
# Install vnc, xvfb in order to create a 'fake' display and firefox
RUN apt-get update && apt-get install -y x11vnc xvfb firefox
RUN mkdir ~/.vnc Setup a password
RUN x11vnc -storepasswd 1234 ~/.vnc/passwd
# Autostart firefox (might not be the best way, but it does the trick)
RUN bash -c 'echo "firefox" >> /.bashrc'

EXPOSE 5900
CMD ["x11vnc", "-forever", "-usepw", "-create"]

4.2 빌드

Dockerfile이 위치한 곳에서

$ docker build --tag <생성할이미지이름>:<태그> .

이미지가 생성되면, 도커 이미지 저장소에 이미지 생성, 생성확인은

$ docker images

끝.

Leave a Reply