이번에는 저번 글에서 잠시 언급했던 Docker 에 대해 다루려고 한다!

Docker의 기능은 간단히 말하면,

1) 자기가 원하는 개발환경을(자신이 만든 프로그램이 요구하는 환경 등) 구축해서 다른사람과 공유할 수도 있고,

2) 동시에 여러 가상환경을 띄워 사용하거나, 환경 간(내부, 외부 상관없이)에 Data 공유도 가능하며,

3) 원할때 원하는만큼 만들어 사용하고, 다 썼다면 '깨끗'하게 지울수 있는 서비스를 지원하는 가상화 툴이다.

관련해서 주요 내용은 Docker image, Docker container, Docker-compose, Docker build, Docker Full & Push

등이 있지만.. 일단 이번에는 DockerFile 을 만들고, DockerHub에 Push 하는 것까지만 적을 예정이다.

 

먼저 나는 DockerFile 을 만들었다. DockerFile 은 HUB에 올릴 Docker image를 만들기위해 자신이 원하는 환경을 적는 File이다. 나는 Python의 Flask 를 이용한 서버를 띄울 수 있는 간단한 File을 만들었다.

 

FROM python:latest

LABEL maintainer="Email-Address"

COPY . /app
WORKDIR ./app

RUN apt-get update
RUN pip3 install -r requirements.txt

RUN echo "This is python webserver using FLASK"

CMD ["python", "Server.py"]
EXPOSE 9000

 

메모장에 Dockerfile.txt 를 만들고 내용을 기재한 후에, 확장자를 지우고 나서 저장해두면 된다.

 

requirements.txt 파일에는 Flask==1.1.2 를 적어줬다.

 

Server.py 파일은 다음과 같다.

Expose 번호와 port 번호는 자신이 원하는 port 번호로 지정해주면된다. (이 번호가 내부 포탈 넘버가 된다.)

주의할점은 사용 가능한 port 번호를 적어야한다는것. 

netsh interface ipv4 show excludedportrange protocol=tcp

를 입력하면 사용이 불가능한 port 번호 대역대를 볼 수 있다.

 

이렇게 세 파일을 한 폴더에 저장해주고, 

cmd 창을 열어서 해당 폴더가 있는 working directory로 이동한다. (cd /directoryPath)

docker build -t UserID/ImageName . 

을 입력한다. Dockerfile을 image로 빌드하는 명령어이다.

UserID와 함께 입력해주어야 나중에 DockerHub에 Push할 수 있다.

만약 이때 UserID를 입력해주지 않고 이미지를 만들었다면,

docker tag 현재Imagename UserID/바꿀Imagename 으로 tag를 붙여줄 수 있다.

 

Image가 다 Build 되었다면, docker image ls 로 image를 확인할 수 있을것이다.

(이번에 한건 python_server_flask 이고, 나머지는 연습용으로 과거에 사용했던 image들이다.

사용했던 이미지를 지우고싶다면 docker rmi ImageName을 하면 된다.)

이후, docker run -d -p 외부포트번호:내부포트번호 --name 원하는Containername Imagename 

을 입력하면 image가 실행되고, (container 화)

docker container ls 를 하면 현재 실행중인 container 들을 볼 수 있다. (-a 까지 붙이면 stop되어있는것까지 볼 수 있다.)

이 때 curl localhost:외부포트번호 를 입력하면, 동작이 되는지 실제로 확인할 수도 있다. (혹은 인터넷에 localhost:외부포털번호를 해도 웹서버에서 확인이 가능하다)

이제 docker login 을 하고, (당연히 회원가입이 먼저 되어있어야한다.)

docker push UserID/Imagename 을 하면 DockerHub에 올라간다.

 

DockerHub에서 확인할 수 있다!

! Window10 Home edition 에서 한 실습입니다. Hyper-V대신 WLS2를 이용하고 있습니다.

 

+ Recent posts