CLOUD/Docker

[Docker] 2 설치.컨테이너 실행

지수쓰 2021. 2. 23. 17:28
반응형

링크 : https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

 

초보를 위한 도커 안내서 - 도커란 무엇인가?

도커를 처음 접하는 시스템 관리자나 서버 개발자를 대상으로 도커 전반에 대해 얕고 넓은 지식을 담고 있습니다. 도커가 등장한 배경과 도커의 역사, 그리고 도커의 핵심 개념인 컨테이너와 이

subicura.com

1.도커 설치

$curl -fsSL https://get.docker.com/ | sudo sh

root권한 요구 후에 자동으로 설치되는 스크립트

도커 실행 : kernel 버전 3.10.x 이상 ( ubuntu 14.04이상)

Mac or Windows : docker for mac, windows설치하면 됨

 

2. 설치 확인

$ docker version

→ Client, Server정보 정상 출력되었다면 설치가 완료된 것.

→ 도커 커맨드를 입력하면 도커 클라이언트가 도커 서버로 명령을 전송하고 결과를 터미널에 출력해주는 형태

 

3. 컨테이너 실행

  • 도커 실행 명령어

$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

 

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

옵션설명

-d detached mode 흔히 말하는 백그라운드 모드
-p 호스트와 컨테이너의 포트를 연결 (포워딩)
-v 호스트와 컨테이너의 디렉토리를 연결 (마운트)
-e 컨테이너 내에서 사용할 환경변수 설정
–name 컨테이너 이름 설정
–rm 프로세스 종료시 컨테이너 자동 제거
-it -i와 -t를 동시에 사용한 것으로 터미널 입력(키보드 사용)을 위한 옵션
–link 컨테이너 연결 [컨테이너명:별칭]

 

4. ubuntu 16.04 container

  • 컨테이너 생성

$ docker run ubuntu:16.04

(image pull→ container create→ start)

→ 이 커맨드는 명령어가 없어 실행중인 프로세스가 없기 때문에 컨테이너가 생성되자마자 종료됨

 

  • 명령어와 함께 컨테이너 실행

$ docker run --rm -it ubuntu:16.04 /bin/bash

bash 쉘에 들어가 cat, ls, exit등 입력

 

5. redis container

  • redis 

: 메모리 기반의 다양한 기능을 가진 스토리지

: 6379포트. telnet 명령어로 테스트 

:-p를 이용해 호스트의 1234포트를 컨테이너의 6379포트로 연결했고 localhost의 1234포트로 접속해 redis사용


~ docker run -d -p 1234:6379 redis
# redis test ~ telnet localhost 1234 > set mykey hello +OK > get mykey $5 hello

 

6. MYSQL 5.7 container

: MYSQL_ALLOW_EMPTY_PASSWORD - 패스워드 없이 root계정 만들기 위함

docker run -d -p 3306:3306 \ -e MYSQL_ALLOW_EMPTY_PASSWORD=true \ --name mysql \ mysql:5.7 # mysql test $ mysql -h127.0.0.1 -uroot mysql> show database; mysql > quit

 

7. 도커 기본 명령어

  • ps : 컨테이너 목록 확인

$ docker ps [OPTIONS]

기본 : 실행중인 컨테이너

-a ( --all) 옵션 : 종료된 컨테이너도 보임

  • stop : 컨테이너 중지

$ docker stop [OPTIONS] CONTAINER [CONTAINER...]

컨테이너 아이디 입력하면 되는데 안겹치면 앞에글자만 입력해도됨.

  • rm  : 컨테이너 제거

$ docker rm [OPTIONS] CONTAINER [CONTAINER...]

*중지된 컨테이너 한번에 삭제 → $docker rm -v $(docker ps -a -q -f status=exited)

  • images: 이미지 목록 확인

$ docker images [OPTIONS] [REPOSITORY[:TAG]]

사용하지 않는 이미지는 지우는것이 좋음

  • pull : 이미지 다운로드

$ docker pull [OPTIONS] NAME[:TAG|@DIGEST]

run하면 이미지 없을때 pull로 다운 받음. pull을 또하면 최신버전으로 받음

  • rmi : 이미지 삭제

$ docker rmi [OPTIONS] IMAGE [IMAGE...]

실행중인 이미지는 삭제되지 않음.

이미지-여러개의 레이어로 구성되어 있으므로 레이어가 모두 삭제됨

 

8. 컨테이너 둘러보기

  • 컨테이너 로그 보기 (logs)

컨테이너가 정상적으로 동작하는지 확인할 수 있음

$ docker logs [OPTIONS] CONTAINER(${container_id})

--tail 옵션 : 마지막 10줄만 출력

-f 옵션 : 실시간으로 생성되는 로그 출력 ( ctrlc 종료)

주의 : 로그파일은 표준스트림으로 수집하며 json방식으로 어딘가에 저장되기때문에 용량 차지 생각해야함

 

  • 컨테이너 명령어 실행하기(exec)

$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

run : 새로 컨테이너를 만들어 실행

exec : 실행중인 컨테이너에 명렁을 내리는 것  

 

9. 컨테이너 업데이트

  • 도커에서 컨테이너 업데이트 과정 

새 버전 이미지 다운(pull) - 기존 컨테이너 삭제(stop, rm) - 새 이미지 기반 컨테이너 실행 (run)

삭제시 그동안 쌓아온 이미지 사라짐을 방지하기 위해서 데이터는 컨테이너 외부 스토리지 저장이 필수!  AWS S3나 데이터볼륨

 

-v  옵션을 사용해 디렉토리 연결

# before docker run -d -p 3306:3306 \ -e MYSQL_ALLOW_EMPTY_PASSWORD=true \ --name mysql \ mysql:5.7 # after docker run -d -p 3306:3306 \ -e MYSQL_ALLOW_EMPTY_PASSWORD=true \ --name mysql \ -v /my/own/datadir:/var/lib/mysql \ # <- volume mount mysql:5.7

디비 파일은 호스트의 /my/own/datadir에 저장되고 컨테이너를 삭제해도 사라지지 않음.

 

+ 추가 Docker Compose

.yml로 작성해 한번에 설정할 수 있는기능 알아보기