ABOUT ME

-

Total
-
  • Docker + Flask 튜토리얼
    컴퓨터/파이썬 2020. 7. 30. 22:14
    728x90
    반응형

    Docker

    Docker 공식 로고

    1. 사전 준비

    Docker, WSL2 (윈도우를 위한 Linux 시스템)

     

    WSL 2

    Linux용 Windows 하위 시스템 2

    docs.microsoft.com

    아래 flask-app.zip 압축 해제한다.

    flask-app.zip
    0.00MB

    2. DockerFile

    우선 DockerFile 구조를 한 번 살펴보겠다.

    FROM python:3
    
    # set a directory for the app
    WORKDIR /app
    
    # copy all the files to the container
    COPY . .
    
    # install dependencies
    RUN pip install --no-cache-dir -r requirements.txt
    
    # tell the port number the container should expose
    EXPOSE 5000
    
    # run the command
    CMD ["python", "./app.py"]
    

    FROM python:3 : BASE image를 python 3+로 지정

    WORKDIR : docker 가상 이미지 안에서 작업할 폴더 app으로 지정

    COPY . . : 현재 시스템 폴더에 있는 모든 파일을 컨테이너 안으로 복사하기

    RUN : 명령어 실행

    EXPOSE : 호스트와 연결할 포트 번호 지정

    CMD : 실행할 cmd 명령어 python ./app.py

    ( ENTRYPOINT : CMD와 다른 점은 docker run를 실행할 때 추가 인자가 CMD로 간다.)

     

    3. Docker 실행

    docker images

    └(도커 모든 이미지 보기)

     

    docker container ls

    (도커 컨테이너 이름 표시, docker stop container-id ...)

     

    docker build -t test-app .

    ( -t 인자 : TTY 모드, bash로 실행하기 위해 필요함, 설정하지 않으면 명령어는 가능하나 셀 표시 안됨)

     

    docker run --name=flask -p 8888:5000 test-app

    (flask란 이름으로 컨테이너를 만들고 test 이미지를 실행한다, 8888=외부 포트, 5000=서버 포트)

    (다음부터 실행할 땐 docker start flask)

     

    그리고 http://localhost:8888/를 들어가면 아래와 같은 화면이 나온다.

     

    Flask 실행 화면

    docker stop flask

    (docker restart/stop container-id, 코드 수정하면 재시작하는 걸 추천)

     

    4. DockerHub image 업로드

    DockerHub에 이미지를 업로드하기 위해선 dockerhub 사이트에 아이디를 만든다.

     

    Docker Hub

    Supported Products Certified Containers provide ISV apps available as containers. Certified Plugins for networking and volumes in containers. Certified Infrastructure delivers an optimized and validated Docker platform for enterp

    hub.docker.com

    docker login

    (docker Hub 아이디와 비밀번호를 입력해서 로그인하기)

     

    docker push test-app

    (docker push container-id)

    ( ※ 만약 denied: requested access to the resource is denied와 같은 오류가 발생하면,

    docker tag test-app dockerHub-ID/test-app

    test-app 아이디를 내ID/test-app으로 바꿔준다. 그리고 docker push 내id/test-app )

     

     

    그러면 다른 사용자들은 docker pull image로 바로 사용할 수 있다.

    docker pull alfex4936/test:latest

    (위 튜토리얼 docker image)

     

    ##############################################################################
    # DOCKER
    ##############################################################################
    
    
    docker build -t friendlyname .              # Create image using this directory's Dockerfile
    docker run -p 4000:80 friendlyname          # Run "friendlyname" mapping port 4000 to 80
    docker run -d -p 4000:80 friendlyname       # Same thing, but in detached mode
    docker exec -it [container-id] bash         # Enter a running container
    docker ps                                   # See a list of all running containers
    docker stop <hash>                          # Gracefully stop the specified container
    docker ps -a                                # See a list of all containers, even the ones not running
    docker kill <hash>                          # Force shutdown of the specified container
    docker rm <hash>                            # Remove the specified container from this machine
    docker rm $(docker ps -a -q)                # Remove all containers from this machine
    docker images -a                            # Show all images on this machine
    docker rmi <imagename>                      # Remove the specified image from this machine
    docker rmi $(docker images -q)              # Remove all images from this machine
    docker logs <container-id> -f               # Live tail a container's logs
    docker login                                # Log in this CLI session using your Docker credentials
    docker tag <image> username/repository:tag  # Tag <image> for upload to registry
    docker push username/repository:tag         # Upload tagged image to registry
    docker run username/repository:tag          # Run image from a registry
    docker system prune                         # Remove all unused containers, networks, images (both dangling and unreferenced), and optionally, volumes. (Docker 17.06.1-ce and superior)
    docker system prune -a                      # Remove all unused containers, networks, images not just dangling ones (Docker 17.06.1-ce and superior)
    docker volume prune                         # Remove all unused local volumes
    docker network prune                        # Remove all unused networks
    
    
    ##############################################################################
    # DOCKER COMPOSE
    ##############################################################################
    
    
    docker-compose up                               # Create and start containers
    docker-compose up -d                            # Create and start containers in detached mode
    docker-compose down                             # Stop and remove containers, networks, images, and volumes
    docker-compose logs                             # View output from containers
    docker-compose restart                          # Restart all service
    docker-compose pull                             # Pull all image service 
    docker-compose build                            # Build all image service
    docker-compose config                           # Validate and view the Compose file
    docker-compose scale <service_name>=<replica>   # Scale special service(s)
    docker-compose top                              # Display the running processes
    docker-compose run -rm -p 2022:22 web bash      # Start web service and runs bash as its command, remove old container.
    
    ##############################################################################
    # DOCKER SERVICES 
    ##############################################################################
    
    
    docker service create <options> <image> <command>   # Create new service
    docker service inspect --pretty <service_name>      # Display detailed information Service(s)
    docker service ls                                   # List Services
    docker service ps                                   # List the tasks of Services
    docker service scale <service_name>=<replica>       # Scale special service(s)
    docker service update <options> <service_name>      # Update Service options
    
    
    ##############################################################################
    # DOCKER STACK 
    ##############################################################################
    
    
    docker stack ls                                 # List all running applications on this Docker host
    docker stack deploy -c <composefile> <appname>  # Run the specified Compose file
    docker stack services <appname>                 # List the services associated with an app
    docker stack ps <appname>                       # List the running containers associated with an app
    docker stack rm <appname>                       # Tear down an application
    
    
    ##############################################################################
    # DOCKER MACHINE
    ##############################################################################
    
    
    docker-machine create --driver virtualbox myvm1                           # Create a VM (Mac, Win7, Linux)
    docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1  # Win10
    docker-machine env myvm1                                                  # View basic information about your node
    docker-machine ssh myvm1 "docker node ls"                                 # List the nodes in your swarm
    docker-machine ssh myvm1 "docker node inspect <node ID>"                  # Inspect a node
    docker-machine ssh myvm1 "docker swarm join-token -q worker"              # View join token
    docker-machine ssh myvm1                                                  # Open an SSH session with the VM; type "exit" to end
    docker-machine ssh myvm2 "docker swarm leave"                             # Make the worker leave the swarm
    docker-machine ssh myvm1 "docker swarm leave -f"                          # Make master leave, kill swarm
    docker-machine start myvm1                                                # Start a VM that is currently not running
    docker-machine stop $(docker-machine ls -q)                               # Stop all running VMs
    docker-machine rm $(docker-machine ls -q)                                 # Delete all VMs and their disk images
    docker-machine scp docker-compose.yml myvm1:~                             # Copy file to node's home dir
    docker-machine ssh myvm1 "docker stack deploy -c <file> <app>"            # Deploy an app

    도커 openface 사용 : https://choiseokwon.tistory.com/157

    728x90

    댓글