[파이썬][API] Docker
Docker란?
리눅스에서 돌아가는 프로그램을 PC에서 동작할 수 있도록 제공하는 것
쉽고 (Dockerfile), 빠르게 (Container)
Container(컨테이너)란?
리눅스 컨테이너를 자체적으로 개발한 것
Linux Container란?
-
프로세스의 구획화
특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 엑세스할 수 있다.
컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없다.
-
네트워크의 구획화
기본으로 컨테이너 하나에 IP 주소가 할당되어 있다.
-
파일시스템의 구획화
컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있다. 그렇기 때문에 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있다.
docker/whalesay
docker/whalesay
는 레지스트리 계정, 레포지토리 이름, 태그 세 가지 정보로 구성되어 있다.
Registry_Account/Repository_Name : Tag
- 레지스트리(Registry)
- Docker Hub : https://hub.docker.com/
- 도커 이미지가 관리되는 공간이다.
- 특별히 다른 것을 지정하지 않는다면 도커 허브(Docker Hub)를 기본 레지스트리로 설정한다.
- 레지스트리는 Docker Hub, Private Docker Hub, 회사 내부용 레지스트리 등으로 나뉠 수 있다.
- 레포지토리(Repository)
- 레지스트리 내에 도커 이미지가 저장되는 공간이다.
- 이미지 이름이 사용되기도 한다..
- GitHub의 레포지토리와 유사하다.
- 태그(Tag)
- 같은 이미지라고 할지라도 버전 별로 안의 내용이 조금은 다를 수 있다.
- 해당 이미지를 설명하는 버전 정보를 주로 입력한다.
- 특별히 다른 것을 지정하지 않는다면
latest
태그를 붙힌 이미지를 가져온다.
https://github.com/docker/whalesay ⇒ 해당 개발자 깃헙
Docker Hub
$ docker image pull docker/whalesay:latest
: pull, 레지스트리에서 이미지 혹은 레포를 가져온다.
$ docker image ls
: 이미지 리스트를 출력한다.
-
$ docker container run --name myName docker/whalesay:latest cowsay boo
container run
: 컨테이너를 실행한다.OPTION :
—name
: 컨테이너의 이름을 할당한다.COMMAND :
cowsay
: 컨테이너에서 cowsay를 호출한다.ARG.. :
boo
: COMMAND인 cowsay에 넘겨질 파라미터
$ docker container ps -a
: container ps : 컨테이너의 리스트를 출력한다.
$ docker container rm myName
: container rm : 컨테이너를 지칭해서 삭제한다. 컨테이너를 명시할 때는 ps 명령을 통해 확인할 수 있는 NAMES 혹은 CONTAINER ID를 사용한다.
$ docker image ls
: docker image의 용량 확인
$ docker image rm docker/whalesay
: docker/whalesay 이미지 지우기
- 주로 사용하게 될 docker 명령어
docker image pull
docker image ls
docker container run
docker container ls
docker container rm
docker image rm
-
$ docker container run --name my_name --rm docker/whalesay cowsay boo
container run
: 컨테이너를 실행한다. 이미지가 없다면 이미지를 받아온 뒤 실행한다.—rm
: 컨테이너를 일회성으로 실행한다. 컨테이너가 종료될 때 컨테이너와 관련된 리스소를 모두 제거한다. -
$ docker image rm docker/whalesay
image rm
: 지정된 도커 이미지를 삭제한다.docker rmi
: image rm과 같은 기능을 한다.
danielkraic/asciiquarium
-
$ docker container run -it --rm danielkraic/asciiquarium:latest
-it
:-i
,-t
를 동시에 사용한 것으로 터미널 입력을 위한 옵션이다. 사용자와 컨테이너 간에 인터렉션이 필요하다면 해당 옵션을 사용한다. 본 예제에서는 지속적으로 출력되는 화면을 사용자가 보기 위해서 사용했다.cntl + c
: 종료키
Docker CP, DockerFile
- 웹 서버는 인터넷으로 사용자에게 정보를 제공하는 서버
- 웹 서버는 도커 컨테이너로 실행
- 웹 서버를 구성하는 파일은 여러분이 만들거나 가져온 파일 구성
- 장점
- 서버에 문제가 생기는 것을 호스트와 별개로 파악할 수 있다.
- 문제가 생긴 서버를 끄고, 마치 공장초기화를 하듯 도커 이미지로 서버를 재구동하기 용의하다.
- CP(Copy) : 호스트와 컨테이너 사이에 파일을 복사(Copy)
- Volume : 호스트와 컨테이너 사이에 공간을 마운트(Mount)
httpd 웹 서버
도커이미지는 httpd(http daemon) 이다.
httpd(http daemon)은 Apache HTTP Server 를 실행할 수 있는 오픈소스 웹 서버 소프트웨어이다.
$ git clone [https://github.com/codestates/pacman-canvas](https://github.com/codestates/pacman-canvas)
$ docker container run --name my_web --rm -p 818:80 httpd
docker container run
으로 httpd를 실행
run
⇒ docker container run
-p
: 로컬(호스트)의 포트와 컨테이너와 포트를 연결한다.
-
httpd는 일정시간 연결 기록이 없으면 서버 가동이 중지된다.
127.0.0.1:818 혹은 localhost:818 을 통해 웹 서버가 작동하고 있는지 확인
127.0.0.1 과 localhost 를 이용하면 자신의 컴퓨터의 IP 주소로 Redirencting 할 수 있다.
DNS 설정으로 인해 localhost 로 접속이 안되고 127.0.0.1 만 접속이 될 수 있다.
docker container cp
명령을 통해서 로컬(호스트)에 있는 파일을 컨테이너에 전달- docker container cp 명령은 앞에 인수의 경로를 뒤에 인수의 경로에 복사
docker container cp ./ my_web:/usr/local/apache2/htdocs/
127.0.0.1:818
혹은localhost:818
에 접속해서 게임 서버가 구동되는지 확인
Docker 이미지 만들기
[docker container commit](https://docs.docker.com/engine/reference/commandline/container_commit/)
명령을 이용- Docker Container 를 이미지로 만드는 방법
$ docker container commit my_web my_pacman:1.0
$ docker run --name my_web2 -p 900:80 my_pacman:1.0
: 생성한 이미지를 이용해서 900 포트에 웹서버를 구동
127.0.0.1:900
혹은 localhost:900
을 통해 웹 서버가 작동하고 있는지 확인
- Docker Image 빌드를 위한 파일인 Dockerfile 로 만드는 방법