본문 바로가기
IT/docker

docker 정리

by 허브큐 2021. 2. 5.
  • docker 란?
    • 컨테이너 기반의 오픈소스 가상화 플랫폼

 


 

  • 도커 컴포넌트(Component)
    • docker engine - docker image를 생성하는 기능
    • docker kitematic - docker의 GUI tool
    • docker repository - docker image를 공개 및 공유하는 기능
    • docker compose - 여러 container를 통합 관리
    • docker machine - docker 실행 환경 구축
    • docker swarm - docker cluster 관리, docker container를 구동하는 기능

 

 

 

 

기본 명령어

  • 도커에서 가장 중요한 개념은 컨테이너, 이미지 입니다.
    • 도커 컨테이너(Container)
    • docker는 linux상에서 container 단위로 서버를 구동한다.
    • 컨테이너는 프로세스이기 때문에 실행중인 프로세스가 없으면 컨테이너는 종료됩니다.
  • 컨테이너 목록 확인 (ps) 
    • docker ps
    • docker ps -a # show all containers
  • 컨테이너 삭제 (rm)
    • docker rm [OPTIONS] CONTAINER [CONTAINER...]
  • 컨테이너 생성 (create)
    • docker create 
  • 컨테이너 생성 및 실행 (run)
    • docker run
      • -d, --detach : background 실행
      • -u, --user : 사용자명 입력
      • --rm : 커맨드 실행 완료 후 컨테이너 자동 삭제
  • 컨테이너 구동 (start)
    • docker start
  • 컨테이너 중지 (stop)
    • docker stop [OPTIONS] CONTAINER [CONTAINER...]
  • 컨테이너 명령어 실행 (exec)
    • docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  • 컨테이너 로그 확인 (logs)
    • docker logs -t CONTAINER
    • docker logs --tail 10 CONTAINER 
  • docker kill $(docker ps -q)
  • docker_clean_ps
  • docker rmi $(docker images -a -q)
  • 모든 컨테이너 삭제하기
    • docker stop $(docker ps -a -q)
    • docker rm $(docker ps -a -q)
  • docker Exit 상태의 모든 컨테이너 삭제하기
    • docker ps --filter 'status=exited' -a -q  // container id 추출하기
    • docker rm $(docker ps --filter 'status=exited' -a -q)
  • docker 이미지 모두 삭제
    • docker system prune -a
  • 컨테이너 생성 및 실행 (run)
    • docker run
      • -d, --detach : background 실행
      • -u, --user : 사용자명 입력
      • --rm : 커맨드 실행 완료 후 컨테이너 자동 삭제
  • 컨테이너 구동 (start)
    • docker start
  • 컨테이너 생성 및 실행 (run)
    • docker run
      • -d, --detach : background 실행
      • -u, --user : 사용자명 입력
      • --rm : 커맨드 실행 완료 후 컨테이너 자동 삭제
  • 컨테이너 구동 (start)
    • docker start
  • docker run
  • 컨테이너 생성 및 실행 (run)
    • docker run
      • -d, --detach : background 실행
      • -u, --user : 사용자명 입력
      • --rm : 커맨드 실행 완료 후 컨테이너 자동 삭제
  • 컨테이너 구동 (start)
    • docker start
  • docker run
  • 컨테이너 생성 및 실행 (run)
    • docker run
      • -d, --detach : background 실행
      • -u, --user : 사용자명 입력
      • --rm : 커맨드 실행 완료 후 컨테이너 자동 삭제
  • 컨테이너 구동 (start)
    • docker start
  • 컨테이너 생성 및 실행 (run)
    • docker run
      • -d, --detach : background 실행
      • -u, --user : 사용자명 입력
      • --rm : 커맨드 실행 완료 후 컨테이너 자동 삭제
  • 컨테이너 구동 (start)
    • docker start

 

  • 도커 이미지 (Image)
    • docker images
    • docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    • docker push [OPTIONS] NAME[:TAG|@DIGEST]
    • docker rmi [OPTIONS] IMAGE [IMAGE...]
    • docker inspect [OPTIONS] IMAGE [IMAGE...]
    • docker search [검색 키워드]
    • 애플리케이션 실행에 필요한 파일이 담긴 디렉토리이다. container의 기반이 되는 것이 docker image이다.
    • 이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않습니다(Immutable). 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장됩니다. 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있습니다.
    • 이미지 목록 확인 (images) 
    • 이미지 다운로드 (pull)
    • 이미지 업로드
    • 이미지 삭제 (rmi)
    • 이미지 세부정보 (inspect)
    • 이미지 검색 (search)


자주 사용하는 옵션들입니다.

옵션

설명

-d

detached mode 흔히 말하는 백그라운드 모드

-p

호스트와 컨테이너의 포트를 연결 (포워딩)

-v

호스트와 컨테이너의 디렉토리를 연결 (마운트)

-e

컨테이너 내에서 사용할 환경변수 설정

–name

컨테이너 이름 설정

–rm

프로세스 종료시 컨테이너 자동 제거

-it

-i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션

–link

컨테이너 연결 [컨테이너명:별칭]

 

도커 구성 관리 (Dockerfile)

  • 도커 상에서 작동시킬 컨테이너의 구성 정보를 기술하기 위한 파일

명령

설명

비고

FROM

베이스 이=미지 지정

 

RUN

명령 실행

이미지 작성하기 위해 실행하는 명령 기술

CMD

컨테이너 실행 명령

이미지를 바탕으로 생성된 컨테이너 안에서 명령 실행

LABEL

라벨 설정

 

EXPOSE

포트 익스포트

 

ENV

환경변수

 

ADD

파일/디렉토리 복사

원격 파일의 다운로드나 아카이브의 압축 해제 등과 같은 기능 있음

COPY

파일 복사

호스트상의 파일을 이미지 안으로 ‘복사하는’ 처리만 함

ENTRYPOINT

컨테이너 실행 명령

 

VOLUME

볼륨 마운트

http://pyrasis.com/book/DockerForTheReallyImpatient/Chapter06/04

USER

사용자 지정

 

WORKDIR

작업 디렉토리

 

ARG

Dockerfile 안의 변수

 

ONBUILD

빌드 완료 후 실행되는 명령

 

STOPSIGNAL

시스템 콜 시그널 설정

 

HEALTHCHECK

컨테이너의 헬스 체크

 

SHELL

기본 쉘 설정

 


도커 Compose 구성 관리 (docker-compose.yml)

  • 도커 compose 작동시킬 컨테이너의 구성 정보를 기술하기 위한 파일

명령

설명

비고

up

컨테이너 생성/시작

 

ps

컨테이너 목록 표시

 

logs

컨테이너 로그 출력

 

run

컨테이너 실행

 

start

컨테이너 시작

 

stop

컨테이너 정지

 

restart

컨테이너 재시작

 

pause

컨테이너 일시 중지

 

unpause

컨테이너 재개

 

port

공개 포트 번호 표시

 

config

구성 확인

 

kill

실행 중인 컨테이너 강제 정지

 

rm

컨테이너 삭제

 

down

리소스 삭제

 
  • docker-compose up -d # 백그라이드로 시작
  • docker-compose up --scale [서비스명=수]
    • docker-compose up --scale server_a=10 --scale server_b=20
  • docker-compose -f ./sample/docker-compose.yml up
  • docker-compose stop webserver # 특정 컨테이너 조작

OS X - shared dir 설정하기

실습1 - WordPress

  • ubuntu 16.04 container
    • docker run --restart=always ubuntu:16.04
    • docker run --rm -it ubuntu:16.04 /bin/bash
  • Redis container
    • docker run -d -p 1234:6379 redis
  • $ sudo docker run -d --name db -e MYSQL_ROOT_PASSWORD=examplepassword mysql
  • Mysql container
    • docker run --restart=always -d -p 3306:3306 \

  -e MYSQL_ALLOW_EMPTY_PASSWORD=true \

  --name mysql \

  mysql:5.7

  • $ sudo docker run -d --name example-wp -p 80:80 --link db:db wordpress
  • WordPress container
    • # create mysql database

$ mysql -h127.0.0.1 -uroot

create database wp CHARACTER SET utf8;

grant all privileges on wp.* to wp@'%' identified by 'wp';

flush privileges;

quit

  • # run wordpress container

docker run --restart=always -d -p 8080:80 \

  --link mysql:mysql \

  -e WORDPRESS_DB_HOST=mysql \

  -e WORDPRESS_DB_NAME=wp \

  -e WORDPRESS_DB_USER=wp \

  -e WORDPRESS_DB_PASSWORD=wp \

  wordpress


실습2 - Tensorflow

  • Tensorflow container
    • docker run -d -p 8888:8888 -p 6006:6006 teamlab/pydata-tensorflow:0.1
    • jupyter 실행 : http://localhost:8888







실습3 - nginx (Dockerfile)

  • Dockerfile

 

FROM ubuntu:latest

RUN apt-get update 

RUN apt-get install -y -q nginx

COPY index.html /usr/share/nginx/html

CMD [“nginx”, “-g”, “daemon off;”]

EXPOSE 80

  • 컨테이너 빌드
    • docker build -t webapp:1.0 .
  • 컨테이너 생성
    • docker run --name mynginx -d -p 80:80 webapp:1.0 
  • 생성된 컨테이너 들어가기
    • docker run --rm -it webapp:1.0 /bin/bash


실습3-2 - python (Dockerfile)

 

 

실습4 - jupyter(Dockerfile - python & crawler)

 

  • docker build -t jupyter/scipy-notebook:17aba6048f44 .
  • docker run -p 8888:8888 jupyter/scipy-notebook:17aba6048f44
  • docker exec -it [container-id 혹은 container-name] /bin/bash
    • ssl 인증서 오류 발생시
      • git config --global http.sslverify "false"
    • git clone https://github.com/yokim11/crawler.git
    • git update하기
      • git add files
      • git commit -m ‘messages’
      • git push origin master 
    • container로 들어가서 git clone하기
  • docker run --rm -it jupyter/scipy-notebook:17aba6048f44 /bin/bash
  • 실행중인 notebook token 값 확인 방법
    • jupyter notebook list



  • Jupyterlab
    • docker build -t jupyterlab/tensorflow .
    • docker run --rm -p 8888:8888 jupyterlab/tensorflow

 

  • docker run --rm -p 8888:8888 jupyter/base-notebook
  • pip --trusted-host pypi.org --trusted-host files.pythonhosted.org install 라이브러리명]

 

댓글