도커 기본 명령어

도커 컨테이너 생성/실행/관리

Posted by 옐란 on 2021-04-10

도커란?

가상화 기술(하나의 HW를 SW적으로 분할하여 마치 여러개의 독립된 HW에서 동작시키는것과 같이 리소스를 공유하는 기술)의 하나로,
컨테이너 단위로 구동되고, 컨터이너(SW적으로 분리된 독립된 공간) 안에 OS에서부터 application Layer까지 stack 형식으로 쌓아 올림으로써,
필요한 구성요소를 손쉽게 다운로드/실행하는 방식으로 동작시키는 기술이다.

목차

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
A. 도커 기본 명령어
1. 버전 확인
2. 이미지 확인
3. 컨테이너 목록 확인
4. 컨테이너 구동
5. 컨테이너 IP 확인
6. 컨테이너 종료
7. 컨테이너/이미지 삭제
8. 컨테이너 내부 접속
9. 컨테이너/Host간 파일 복사
10. 도커 이미지 빌드
11. 도커 run 명령어 옵션

B. Dockerfile

C. Docker 실행(쉘로 관리)

도커 기본 명령어

버전확인

1
docker -v

도커 이미지 목록

1
docker images

도커 컨테이너 목록

1
docker ps -a

컨테이너 구동

1
docker run --rm --publish 8001:80 -it nginx

컨테이너 ip/port 확인

1
2
docker exec CONTAINER_ID ip addr show eth0
docker port 도커ID

컨테이너 종료

1
docker stop 컨테이너ID(5555b7dd1385)

도커 컨테이너 모두 삭제, 이미지 삭제

1
2
3
4
5
6
7
8
9
10
- 컨테이너 하나 삭제
docker rm 컨테이너ID
- 권한 없어서 전체삭제는 안됨?
docker rm $(docker ps -a -q)
- 이미지 삭제
docker rmi [이미지명]
- dangling image remove
1) docker rmi -f $(docker images -f "dangling=true" -q)
2) docker image prune
(docker api 1.25이상 지원, -a를 붙이면 전체삭제함으로주의!(-a없이 사용하자))

컨테이너 내부접속

1
docker exec -it  98a6916d8759 /bin/bash

컨테이너/Host 파일복사

1
2
3
4
1) 호스트->컨테이너 : docker cp [host 파일경로] [container name]:[container 내부 경로]
docker cp testWebApp.war 9492a62f43d4:/usr/local/tomcat/webapps
2) 컨테이너->호스트 : docker cp [container name]:[container 내부 경로] [host 파일경로]
docker cp 445a0ba19eea:/usr/local/tomcat/conf/server.xml c:/101_dimg

도커 이미지 빌드

1
2
- docker build -t [이미지명]  .
docker build -t nginx .

도커 이미지 다운로드/구동

1
2
docker pull tomcat:8
docker run -d -i -t -p 8081:8080 tomcat:8

도커 컨테이너 접속(stdout?)

1
docker attach 도커ID

컨테이너 로그 tail

1
2
3
4
- log tail 
docker logs -f 컨테이너ID
- 옵션: --tail=5 (최근5줄만 보기?)
- log tail 종료: Ctrl+p -> Ctrl+q 연속으로 입력(바로 종료하면 컨테이너 죽음 주의!)

컨테이너 실행 페라미터 전달

1
docker run -e "SPRING_PROFILES_ACTIVE=dev" -p 8080:8080 -t springio/gs-spring-boot-docker

도커 run 명령어 주요 옵션

1
2
3
4
5
6
7
8
9
10
14)도커 run 명령어 상세
docker run -d -i -t -p 9001:9001 nginx_microsvc:latest
docker run <옵션> <이미지 이름, ID> <명령> <매개 변수>
-d: --detach=false: Detached 모드입니다. 보통 데몬 모드라고 부르며 컨테이너가 백그라운드로 실행됩니다.
-i: --interactive=false: 표준 입력(stdin)을 활성화하며 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지합니다.
보통 이 옵션을 사용하여 Bash에 명령을 입력합니다
-t: --tty=false: TTY 모드(pseudo-TTY)를 사용합니다. Bash를 사용하려면 이 옵션을 설정해야 합니다.
이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만 셸이 표시되지 않습니다.
-p: --publish=[]: 호스트에 연결된 컨테이너의 특정 포트를 외부에 노출합니다.
보통 웹 서버의 포트를 노출할 때 주로 사용합니다.

Dockerfile

dockerfile CMD 명령어

  • CMD [“nginx”, “-g”, “daemon off;”]
  • CMD [“<실행 파일>”, “<매개 변수1>”, “<매개 변수2>”]
  • 셸 없이 바로 실행할 때 매개 변수 설정하기
    : daemon off : nginx.conf에 daemon off;로 설정했으므로 Nginx 웹 서버를 foreground로 실행합니다.

도커 파일 예제

1
2
3
4
5
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY msap-zuul-server-0.1.0.war app.war
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.war"]

dockerfile 이미지 빌드

docker build -t msap-config-server .

실행

1
2
3
4
1) bridge 모드
docker run --publish 9000:9000 -it msap-config-server (bridge 모드: 네트웍 격리)
2) host 모드
docker run --net=host --publish 9000:9000 -it msap-config-server (host 모드: host와 IP공유)

도커 실행 쉘로 관리법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1) 해당 컨테이너 종료
docker stop $(docker ps --filter 'name=facenet-server' -q)
2) 이미지 삭제
docker rm $(docker ps --filter 'name=facenet-server' -a -q)
docker rmi -f $(docker images -f "dangling=true" -q)
3) 빌드
docker build -t facenet-server .
4) 실행
docker run --name ai-hsgd-verfiy-server \
--publish 8312:8312 \
--net=host \
-d \
-it \
-v ai-hsgd-verfiy-server-logs:/logs ai-hsgd-verfiy-server