자세한 내용은 공식문서 https://docs.docker.com/ 참조!
Docker란?
프로세스 격리 기술 등을 이용해 컨테이너로 실행하고 관리하게 해주는 도구.
운영체제 수준의 가상환경을 제공하나 실제 운영체제를 설치하는것보다 훨씬 간편하고 가볍기 때문에 널리 이용되고 있다.
위키백과 - 도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다.
여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 아우른다.
이는 실행 중인 환경에 관계 없이 언제나 동일하게 실행될 것을 보증한다.
또한 Docker image 또는 Dockerfile 등을 구성해 개발환경을 손쉽게 배포하여 협업시에 개발환경의 문제로 생길 트러블슈팅을 줄일 수 있고 어플리케이션 격리, 빠른배포 등이 가능함!!
Image와 Container
Docker Image는 Container를 생성하기 위한 Template이며 Container는 Image가 실제 메모리에 올려진 인스턴스 라고 할 수 있다.
즉 하나의 Image로 여러 Container를 생성할 수 있으며 이 Image를 공유하여 같은 구성의 환경을 손쉽게 배포할 수 있다.
Ubuntu 20.04 환경에서 Docker 컨테이너 활용
1. 도커 설치
$ curl -fsSL https://get.docker.com/ | sudo sh
설치가 완료되었다면 docker version 명령어로 설치된 버전 확인가능
도커는 컨테이너 기본적으로 root 권한이 필요하기 때문에 sudo를 붙여줘야함
2. 매번 sudo 를 붙이기 번거롭기 때문에 로그인한 유저계정에 docker 사용권한을 부여
$ sudo usermod -aG docker $USER
권한을 부여하고 다시 로그인하면 다음과같이 sudo를 붙이지 않아도 사용가능.
3. 설치가 완료되었으니 hello_world 이미지를 실행하여 잘 되는지 확인
$ docker run hello-world
이 명령어는 hello-world 라는 테스트 이미지를 다운로드하여 컨테이너에서 실행함. 이름그대로 메시지를 출력하고 종료하는것을 확인
4. docker ps, docker images, docker start
docker ps 명령어는 현재 실행중인 컨테이너 목록을 보여줌. -a 옵션을 붙이면 종료된 컨테이너 까지 보여준다.
docker images는 현재 설치되어있는 도커 image들을 보여줌.
위 사진과 같이 ps -a 로 확인했을때 hello-world 컨테이너가 종료된상태인것을 확인할 수 있다.
종료된 컨테이너를 다시 시작하려면
이렇게 docker start [id] 로 실행가능.
$ docker start [id]
5. 이미지, 컨테이너 삭제
테스트했으니 이제 삭제를 해보도록한다.
먼저 컨테이너 삭제
$ docker rm [id]
ps -a 명령어로 삭제된것을 확인가능
이미지 삭제
$ docker rmi [id]
docker images 명령어로 삭제된것을 확인.
Docker 컨테이너 에서 Ubuntu 20.04 환경 구축
이미 사용하는 환경이 VMware Ubuntu 20.04 이지만, Docker 컨테이너를 통해 작업환경과 별개로 격리된 테스트 환경을 구성하기위해 구축해보기로 한다.
Docker Image 다운로드
$ docker pull ubuntu:20.04
$ docker pull ubuntu:latest // 가장 최신버전설치 (버전을 명시하지않았을때 default값)
Ubuntu 20.04 이미지가 다운로드 된것을 확인할 수 있다(근데 왜 CREATED가 2주전인지는 모르겠음..;;)
이제 다운받은 이미지를 이용해 컨테이너를 생성해 보자
컨테이너 생성
컨테이너를 생성하는 방법은 그냥 run 명령어를 사용할수도 있고 Dockerfile을 사용할 수도 있고 여러컨테이너를 사용할 경우 docker-compose를 사용하기도 한다.
Dockerfile을 사용하는 경우엔 CTF 서버를 운영할때처럼 Dockerfile에 환경구성을 위한 명령어를 작성해놓고,
run —rm 옵션을 사용해 컨테이너를 멈추면 자동 삭제되도록 하고 사용할때마다 Dockerfile을 새로 build 하여 사용한다.
docker-compose는 주로 여러개의 컨테이너를 함께 사용할때 사용한다.
docker-compose.yml 파일에 전체적인 설정을 작성하고 개발이미지를 관리하는 각 디렉토리에 Dockerfile을 작성하는식으로 구성된다.
여기서는 당장 한번만사용할 것이 아니기 때문에 run 명령어로 생성하는 방법을 다루도록 하겠다.
docker run
run 명령어는 이미지를 통해 격리된 컨테이너 프로세스를 실행한다.
자세한 사용법은 docker run —help 명령어를 통해 확인할 수 있으며 자주 사용하는 옵션에 대한 대략적인 요약은 다음과 같다.
옵션 | 설명 |
---|---|
-d | detach모드로 실행, 컨테이너를 백그라운드에서 실행한다. |
-e | environment, 컨테이너에 설정할 환경변수 전달 |
-i (-it) | interactive 모드로 표준입력을 받기위해 설정 ( 주로 t와 같이 사용) |
-p | 호스트와 컨테이너의 포트를 포워딩할때 사용 |
—name | 컨테이너의 이름을 지정할때 사용 |
—rm | 컨테이너 종료시 자동으로 삭제되게함 |
-v | 호스트와 컨테이너의 디렉토리를 연결 |
$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run 명령어를 통해 컨테이너를 실행하고 /bin/sh 를 실행하고 표준입출력으로 넘어간것을 확인할 수 있었다.
컨테이너 종료
docker run 명령어를 통해 실행한 컨테이너는 exit명령어를 사용해 나가면 종료된다.
이렇게 종료된 컨테이너는 docker ps -a 명령어를 통해 확인할 수 있다.
아무튼 이렇게 컨테이너가 생겼으니 필요할때 사용하면된다!!
종료된 컨테이너 사용하기
$ docker start [container]
종료된 컨테이너는 start 명령어를 통해 다시 실행할 수 있다.
start 명령어로 test 컨테이너를 실행하였고, ps명령어로 확인해보니 STATUS가 Up으로 바뀐것을 확인할 수 있다.
이제 이 컨테이너로 다시 들어가려면
$ docker attach [container]
이렇게 정상적으로 컨테이너에 attach 한것을 확인할 수 있다.
컨테이너를 종료하지 않고 빠져나오기
컨테이너를 실행중인상태를 유지하면서 빠져나오기 위해서는 Ctrl + p, Ctrl + q를 차례대로 입력하면 된다.
Ctrl + p, Ctrl + q 를 입력해주면 다음과같이 컨테이너를 빠져나왔으나, 여전히 백그라운드에서 실행중인것을 확인할 수 있다.