- 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 설정하기
- https://docs.docker.com/docker-for-mac/osxfs/#namespaces
- docker run -it -v ~/Desktop:/Desktop #container-id /bin/bash
실습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)
- Dockerfile
- chap07 참고 : https://github.com/asashiho/dockertext2/tree/master/chap07
실습4 - jupyter(Dockerfile - python & crawler)
- local dir :~home/docker-stacks/scipy-notebook
- https://github.com/jupyter/docker-stacks
- Dockerfile로 실행하는 방법
- RUN conda config --set ssl_verify False
- SSL과 관련한 conda 설치 에러 - anaconda3 [해결] - [참조 링크]
- RUN git clone https://github.com/yokim11/crawler.git
- VOLUME /data
- git clone
- cd docker-stacks/scipy-notebook
- Dockerfile에 아래 내용 추가
- 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 라이브러리명]
댓글