Docker run 명령어 in AWS EC2 현재 터미널 bash에서 docker hub에 로그인하여 image를 pull 또는 push 할 수 있습니다. docker run은 독립된 container를 실행합니다. container는 프로세스(process)로 host 위에서 동작합니다. host는 로컬(local)에 있거나 원격(remote)에 있을 수 있습니다. run으로 container를 실행하면 독립된 파일 시스템(file system)과 네트워킹 그리고 프로세스 트리를 가지게 됩니다. https://docs.docker.com/engine/reference/run/ $ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] - docker run은 container의 IMAGE가 필히 들어가야 합니다. 1. Detached (-d) : 많이 쓰이는 옵션입니다. container를 background에서 실행하고 싶다면 사용됩니다. 머신러닝 개발이라면 jupyter를 많이 사용하실 겁니다. scikit-learn이 설치된 notebook을 이용해봅시다. mongodb(https://www.mongodb.com/) NoSQL 많이 사용하실텐데 background로 container를 동작 시켜봅시다. https://hub.docker.com/_/mongo/ $ docker run -d --name mongodb mongo 현재 동작 중인 docker container를 확인할 수 있습니다. $ docker ps mongodb의 mongo shell로 접속해봅시다. $ docker exec -it mongodb mongo 2. Foreground - container에 표준입력, 출력, 에러 연결하기 (-a): STDIN(-a stdin), STDOUT(-a stdout), STDERR(-a stderr)를 연결합니다. - STDIN (-i) : STDIN을 attach가 되지 않더라도 open을 유지합니다. - 터미널 연결(pseudo-tty) (-t) : command line을 실행하기 위해 TTY를 할당합니다. - shell과 같은 Interactive process에서는 tty를 할당하기 위해서 -it를 함께 사용해야 합니다. 자 이번에는 ubuntu를 official 이미지를 이용해 container로 만들어봅시다. https://hub.docker.com/_/ubuntu/ -it 옵션을 이용해 ubuntu 19.04 으로 생성된 container의 터미널에 바로 접속하신 것을 볼 수 있습니다. $ docker run -it --name ubuntu ubuntu:19.04 # apt update 3. Name (--name CONTAINER_NAME) : container에 특정 이름을 부여합니다. 4. Clean up (--rm) : container는 종료된 이후에도 파일 시스템이 남아있습니다(persist). container를 짧게 foreground 프로세스로 사용되고 종료되는 경우에 자동적으로 container의 file system을 지우고 정리하고 싶다면 사용하면 좋습니다. $ docker run -it --rm busybox 종료가 된 목록을 살펴봅시다. $ docker ps -a 5. Network Settings - Container 네트워크 설정 방법 (--network) : 가능한 옵션으로 bridge, none, host 등이 있습니다. - /etc/hosts에 추가하기 (--add-hosts HOST:127.0.0.1) : docker network, docker swarm을 통해서 hadoop, spark cluster 생성 시에 사용했었습니다. 6. Restart policies (--restart) : container가 종료되었을 때 재시작 정책입니다. - no : default 값으로 종료가되면 자동으로 재시작되지 않습니다. --restart “no” - on-failure:N : container가 non-zero로 종료된 상태라면 재시작합니다. 몇 번 재시작을 retry 할지 N을 선택할 수 있습니다. --restart=”on-failure:3” - always : exit 상태와 상관없이 무조건 다시 재시작됩니다. $ docker run -it --name busybox1 busybox $ docker run -it --name busybox2 --restart=always busybox restart 옵션을 이용해 계속 container가 살아 있는 것을 볼 수 있습니다. $ docker ps -a 7. Resource Allocation : container에 자원 할당을 합니다. - 메모리 제한 (--memory NUMBER[UNIT]) : container의 메모리 크기를 설정합니다. [UNIT]은 b, k, m, g 이며, 최소 4M은 되야 합니다. -m 2g - 메모리 스왑 (--memory-swap NUMBER[UNIT]) : container의 메모리 swap 영역 크기를 설정합니다. 전체 메모리는 memory + swap 입니다. - CPU 설정 (--cpu-shares) : CPU를 상대적인 weight 값으로 공유합니다. - CPU의 양 설정 (--cpus FLOAT) : CPU를 fractional number로 지정합니다. --cpus=0.000 제한이 없음 - CPU CFS(Completely Fair Scheduler) period 설정 (--cpu-period) : --cpu-period=0 $ docker run -dit --name ubuntu -m 500M ubuntu:16.04 /bin/bash $ docker ps -a $ docker stats 예로 다음을 실행해봅시다. $ docker run busybox echo “Hello world” $ docker run -a stdin -a stdout -it ubuntu /bin/bash 8. CMD와 ENTRYPOINT(--entrypoint) - CMD는 Docker image 개발자가 작성한 Dockerfile에 있는 CMD에 저장된 값이 기본값으로 실행되며, CMD를 오버라이드(override) 할 수 있습니다. - ENTRYPOINT 또한 DockerFile에 작성된 ENTRYPOINT가 기본값으로 실행되며 새로운 ENTRYPOINT로 실행 가능합니다. 이번에는 redis를 실행해봅시다. https://hub.docker.com/_/redis/ $ docker run -it --entrypoint /bin/bash redis 9. EXPOSE host와 container의 포트(port)를 연결합니다. - 전체 포트(-P) : 호스트(host) 인터페이스에 전체 포트를 오픈합니다. - 특정 포트(-p) : HOST_PORT:CONTAINER_PORT 로 정의합니다. 서로 연결할 호스트와 컨테이너의 포트를 순서대로 작성합니다. 이번엔 scikit-learn이 설치된 jupyter를 실행해봅시다. port는 8888로 연결하겠습니다. $ docker run -p 8888:8888 --name ipython jupyter/scipy-notebook https://hub.docker.com/r/jupyter/scipy-notebook/ 실행 중인 jupyter에 접속을 하기 위해서는 EC2의 port를 관리하는 Security Groups에서 설정해야 합니다. EC2에 연결된 Security Group을 클릭해 inbound rules에서 TCP 8888포트를 0.0.0.0/0으로 설정합니다. 자 이제 AWS EC2 dashboard에서 public ip를 확인해주세요 http://[AWS-EC2-PUBLIC-IP]:8888 10. ENV 환경 변수(-e) Docker는 container가 생성될 때 자동적으로 환경 변수를 세팅합니다. - HOME : USER의 값에 기반하여 세팅합니다. - HOSTNAME : container의 hostname을 설정 - PATH : 환경 설정 변수로 경로를 지정합니다. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 11. VOLUME 공유 파일 시스템(shared filesystems) (-v, --volume) 호스트의 파일 시스템을 container의 파일 시스템에 연결합니다. - HOST-SRC:CONTAINER-DEST을 이용해 파일을 공유할 수 있습니다. 공유할 파일과 디렉토리를 local에서 만들어봅시다. -v 옵션을 줘서 공유 파일 시스템을 만들어봅시다. $ docker run -it --name ubuntu -v ~/workspace/:/workspace ubuntu:16.04 12. USER (-u, --user) container의 기본적인 user는 root입니다. 특정 유저를 설정하고 싶다면 다음의 옵션을 사용하면 됩니다. 13. WORKDIR (-w) container가 작업하는 디렉토리는 / root 폴더입니다. 작업하는 디렉토리를 다른 경로(path)로 줄 수 있습니다.Dokcer AWS EC2 설치[http://jeongchul.tistory.com/611]
docker login
docker run
Options
'Docker' 카테고리의 다른 글
Portainer.io (0) | 2020.02.24 |
---|---|
Docker network 네트워크 (2) | 2019.07.26 |
Docker AWS EC2 설치 (3) | 2018.11.20 |
Google Cloud with Docker (0) | 2018.03.06 |
An Updated Performance Comparison of Virtual Machines and Linux Containers (0) | 2017.07.07 |