반응형

Docker 란?

 기존의 온프레미스 환경에서 서버 구축의 어려움을 Docker-Engine 위에서 Docker-Registry를 통해 Docker-Images을 Docker-Compose로 쉽게 구성 맟 관리할 수 있게 구축을 해 주는 기술입니다.

 

Docker-Hub 란?

- GitHub 이나 Bitbucket과 같은 소스코드 관리 툴과 연계하여 코드를 빌드하는 기능이나 실행 가능한 애플리케이션의 이미지를관리하는 기능을 갖춘 Docker의 공식 리포지토리 서비스 입니다.

 

Tag

- 도커 이미지에 대한 버전이라고 보면 됩니다. (ngnix:latest, debian:7)

 

 

1. 도커 시스템 정보

  • docker version
  • docker -v
  • docker system info
  • docker system df
  • docker system df -v

 

2. 컨테이너 명령어

docker container run 명령은 도커 이미지로부터 컨테이너를 생성하고 실행하는 멸령이다.

도커 컨테이너는 이미지를 바탕으로 작성된다.

 

docker container run <image> <command>

docker container run ubuntu:latest /bin/echo 'Hello Wolrd'

 

docker container run --name webserver -d -p 80:80 ngnix

docker container run --name webserver -d -p 80:80 ngnix:latest

- webserver 라는 이름의 컨테이너로 nginx 이미지를 띄운다.

-  [-d] 옵션은 detach로 백그라운드에서 실행을 의미한다.

-  [-p] 옵션은 포트 포워딩이다.

 

docker container run -it --name "test1" centos /bin/cal February 2018

- 컨테이너를 생성/실행하면서 콘솔에 결과를 출력하고 이름은 "test1"로 centos이미지를 올리고 /bin/cal 명령어를 실행한다.

docker container run -it --name "test2" centos /bin/bash

- [-i] 옵션은 컨테이너를 실행할 때 컨테이너 쪽 표준 입력과의 연결을 그대로 유지한다. 그러므로 컨테이너 쪽 셀에 들어가서 명령을 실행할 수 있다.

- [-t] 옵션은 유사터미널 기능을 활성화하는 옵션인데, -i 옵션을 사용하지 않으면 유사 터미널을 실행해도 여기에 입력할 수가 없으므로 -i와 -t 옵션을 합쳐 축약한 -it 옵션을 사용한다.

 

컨테이너 상태 확인

docker container ls [option]

- [--all|-a] :모든 컨테이너

docker container ps

docker container stats <container-name>

docker container top <container-name>

 

컨테이너 연결

docker container attach <container-name>

- ctrl-c : 컨테이너 종료

- ctrl-

 

 

컨테이너 종료/시작/재시작/삭제

  • docker stop <container-name>
  • docker start <container-name>
  • docker container restart <container-name>
  • docker container rm <container-name>
  • docker container rm -f <container-name>
    • - 강제 종료 및 삭제

 

docker container run --cpu-shares=512 --memory=1g centos

- [--cpu-shares] : CPU의 사용 배분(비율)

- [--memory] : 사용할 메모리를 제한하여 실행

- [--evn=<환경변수>] : --env JAVA=xxx, -e JAVA=xxx

- [--user=사용자명] : --use

 

docker container exec -it <container> /bin/echo "HelloWorld"

docker container port <container>

docker container rename

docker container cp

 

컨테이너 로그 - 표준 출력 연결하기

docker container logs [options] <container-id | container-name>

- docker container logs -f $(docker container ls --filter "ancestor=mysql" -q )

 

컨테이너와 호스트의 데이터 볼륨(컨테이너의 데이터퍼시스턴스 기법)

-v 옵션을 사용하여 호스트와 컨테이너 사이의 데이터를 공유한다.

docker container run -v 호스트디렉토리:컨테이너디렉토리 repository[:tag] [command]

호스트-컨테이너 데이터볼륨은 호스트 쪽 특정 디렉터리에 의존성을 갖는다. 데이터 볼륨 컨테이너의 볼륨은 도커에서 관리하는 영역인 호스트 머신의 /var/lib/docker/volumes/ 아래에 위치한다. 데이터볼륨 컨테이너 방식은 도커가 관리하는 디렉터리 영역에만 영향을 미친다.

 

 

3. 이미지 명령어

docker image pull [option] <image-name>[:tag]

 

docker image pull - a centos 

- centos의 모든 이미지 다운로드

docker pull nginx (이미지 다운로드)

 

docker image ls [option] [repository]

docker image ls

docker images

 

docker image inspect nginx:latest

- 도커 임지 상세 정보 표시

docker image inspect --format="{{ .ContainerConfig.Image}}" nginx:latest

- 이미지값만 표시

 

docker image tag <origin-image-name> <new-image-name:tag>

- 이미지 tag 를 사용해 새이름으로 이미지를 복사한다.

docker image tag nginx:latest starlord/webserver:1.0

 

docker search  [option] <keyword>

- 도커 허브에 공개되어 있는 이미지들을 조회한다.

docker serach ngnix

 

docker image rm <optino> <image-name>

- 도커 이미지를 삭제한다.

 

docker image prune [-a|-f]

- 사용하지 않는 이미지들을 삭제한다.

 

컨테이너로부터 이미지 작성 및 확인

  • docker container commit [option] <container-name> <image-name:tag>
  • docker container commit -a "starlord" webserver ws-image:1.0
  • docker image ls
  • docker image inspect ws-image:1.0

 

컨테이너로부터 tar 파일 생성

  • docker container export <container>
  • docker container export <container> > current.tar
  • ls -al
  • tar -tf current.tar
  • tar tf current.tar | more

 

이미지를 tar 로 저장하기

  • docker image save [option] <save-file> [image-name]
  • docker image save -o save.tar webserver
  • docker image load [option] <image>

 

tar로부터 이미지를 읽어들이기

  • docker imae load [option] <image-name>

 

 

4. 네트워크 명령어

  • docker network create -d bridge webap-net
  • docker container run --net=webap-net -it centos
  • docker network ls --no-trunc
  • docker network connect [option] <network-name> <container-name>
  • docker network disconnect <network-name> <container-name>
  • docker network inspect [opeion] network
  • docker network rm <network-name>

 

 

5.  불필요한 이미지/컨테이너를 일괄삭제

docker system prune [option]

- [-a | -f] 

 

 

6. Dockerfile로부터 이미지 만들기

도커 파일을 생성한다

  • touch Dockerfile 

도커 파일을 빌드한다

  • docker build -t <image-name> <경로[절대|상대]>
  • docker build -t sample:1.0 ./
  • docker build -t sample:1.0 -f <filename> ./
  • docker build -t sample1 -f Dockerfile.layer1 ./
  • docker images 

 

Dockerfile example

 

# step1. ubuntu

FROM ubuntu:latest

#step2. ngnix

RUN apt-get update && apt-get install -y -q nginx

#step3. file copy

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

#step4. start nginx

CMD ["nginx", "-g", "daemon off;"]

 

도커파일의 명령 목록

- FROM 베이스 이미지 지정

- RUN 명령 실행 : shell형식, exec형식 (이미지를 작성하기 위해 실행하는 명령)

- CMD컨테이너 실행 명령 (Dockerfile 안에서는 하나의 명령만 가능, 우선적인 명령이 있을 시 덮어짐)

- LABEL 라벨 설정

- EXPOSE 포트 익스포트

- ENV 환경변수

- ADD 파일/디렉토리 추가 (ADD <호스트파일경로> <Docker 이미지의 파일 경로>)

- COPY 파일 복사 (COPY <호스트파일경로> <Docker 이미지의 파일 경로>)

- ENTRYPOINT 컨테이너 실행 명령 (다른 명령이 있어도 같이 쓰임)

- VOLUME 볼륨마운트

- USER 사용자 지정

- WORKDIR 작업 디렉토리

- ARG Dcokerfile 안의 변수

- ONBUILD 빌드 완료 후 실행되는 명령

- STOPSIGNAL 시스템 콜 시그널 설정

- HEALTHCHECK 컨테이너의 헬스 체크

-  SHELL 기본 쉘 설정

 

 

7. Docker Compose

여러 컨테이너를 모아서 관리하기 위한 툴입니다.

docker-compose.yml 을 생성 후 docker-compose up 명령어를 수행하면 됩니다.

크게 services: , networks: , volumes: 를 정의합니다.

 

docker-compose up

docker-compose up -d

- 컨테이너를 백그라운드로 시작 

docker-compose up --build

docker-compose config

docker-compse -v or -version

 

도커 컴포즈 서브 명령

up, ps, logs, run, star, stop, restart, pause, unpause, port, config, kill, rm, down

 

ex) docker-compose.yml

 

이미지지정

container_name: 'this-is-container'

labels:

    - "com.xxxx=yyyyy"

labels:

    com.xxxx: "yyyyy"

version: '1.0'

services: 

webserver:

    image: <image-name:tag>

 

빌드지정

services:

    webserver:

          build: . 

 

services:

    webserver:

          build:

              context: /directory

              dockerfile: filename

              args:

                   key1: value1

                   key2: value2

 

services:

    webserver:

          build: .

          depends_on:

              - db

              - redis

    redis:

          image: redis

    db:

          image: postgres

 

environment:

    - KEY1: value1

    - KEY2: value2

env-file: envfile

 

docker-compose ps 명령어로 확인 할 수 있습니다.

docker-compose stop 명령어로 컨테이너들을 종료할 수 있습니다.

docker-compose down 명령어를 사용하면 리소스들을 삭제할 수 있습니다.

docker-compose down --rmi all 모든 이미지, 네트워크, 볼륨 다 삭제

 

 

8. Docker Machine

Docker-Machine 은 호스트 머신/클라우드/가상 환경 등에  Docker의 실행 환경을 만들 수 있는 커맨드라인 툴입니다.

 

docker-machine create —driver <driver-name> <Docker-Machine-Name>

docker-machine ls

docker-machine rm <docker-machine>

docker-machine ssh <docker-machine>

docker-machine status <docker-machine>

docker-machine scp <docker-machine>:/directory

  • 실행환경으로부터 파일 다운로드 

docker-machine ip <docker-machine>

docker-machine inspect <docker-machine>

 

클라우드를 사용하여 Docker 실행환경을 구축할 때는 오케스트레이션을 위한 매니지드 서비스 외에도 소스코드나 Docker 이미지의 리포지토리 및 로깅 등과 같은 여러 서비스를 조합하여 시스템을 구축하게 됩니다.

 온프레미스 환경에서는 네트워크 부설/ 서버 기기의 도입/ OS의 설정 등 물리적인 작업 및 어느 정도의 초기 비용이 필요하기 때문에 시스템의 요건에 따라 사전에 상세한 설계가 필요합니다. 하지만 클라우드를 사용한 경우는 서비스의 조합만으로 재빨리 시스템을 구축할 수 있는 것이 큰 특징입니다.

 한편 클라우드만의 설계 포인트도 있습니다. 예를 들어 클라우드 서비스를 어떻게 조합하는 것이 최적인지, 영구 데이터의 특성에 맞춰 어떤 스토리지 서비스를 골라야 좋을지 등입니다. 이러한 클라우드의 특성을 고려하여 장점을 최대한 살리는 형태로 구축된 아키텍처를 클라우드 네이티브 아키텍처라고 합니다.

 

docker pull registry-name/resource-name:latest

docker container run -d -p 8080:8080 --name resource-name registry-name:latest

docker exec <containerid> java -version

 

컨테이너 쉘 접속

  • docker ps -a
  • docker exec -it <container-name or id> /bin/bash

 

#

반응형

+ Recent posts