Docker command

https://docs.docker.com
https://docs.docker.com/reference/

자주 사용하는 docker 명령어 조합

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
docker images 

docker ps -a

docker container rm [컨테이너 이름 또는 ID]

docker start [컨테이너 이름 또는 ID]

docker stop [컨테이너 이름 또는 ID]

docker run -it -p [host port]:[container port]/(protocol) --name [컨테이너 이름] [이미지 이름]:(이미지 태그 존재 시) /bin/bash

docker run -dit -p [host port]:[container port]/(protocol) --name [컨테이너 이름] [이미지 이름]:(이미지 태그 존재 시)

docker run -it -p [host port]:[container port]/(protocol) -v [host 경로]:[컨테이너 내 경로] --name [컨테이너 이름] [이미지 이름]:(이미지 태그 존재 시) /bin/bash

# 새로운 셸 또는 프로세스 실행
# 종료 시 컨테이너에 영향 없음
# 보다 안전함
docker exec -it [컨테이너 이름 또는 ID] /bin/bash

# 기존 메인 프로세스에 연결
# Ctrl+C 누를 시 컨테이너도 종료될 수 있음
# 한 명만 안정적으로 접속할 때 권장하므로 보다 위험함
docker attach [컨테이너 이름 또는 ID]

자주 사용하는 dockerfile 빌드 시 명령어

1
2
3
4
5
6
7
docker built -t [image 이름]:(태그) .

docker run -it -p [host port]:[컨테이너 port] --name [컨테이너 이름] [image 이름]:(태그) /bin/bash
or
docker run -dit -p [host port]:[컨테이너 port] --name [컨테이너 이름] [image 이름]:(태그)

docker exec -it [컨테이너 이름 또는 ID] /bin/bash

docker command

1
2
3
4
5
6
7
8
9
10
11
12
13
docker -v                     # 버전 확인
docker pull [이미지 명] # 이미지 다운로드
docker images # 다운로드된 이미지 목록
docker create [옵션] [이미지 명] # 컨테이너 생성
docker run [옵션] [이미지 명] # 컨테이너 생성 및 실행
docker start [컨테이너 명] # 컨테이너 실행
docker restart [컨테이너 명] # 컨테이너 재실행
docker attach [컨테이너 명] # 컨테이너 접속
docker stop [컨테이너 명] # 컨테이너 정지
docker ps # 실행중인 컨테이너 목록
docker ps -a # 정지된 컨테이너 목록
docker rename [기존 컨테이너 명] [새로운 컨테이너 명] # 컨테이너 명 변경
docker rm [컨테이너 명] # 컨테이너 삭제

Common docker commands

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# image 검색
docker search <이미지 이름>
ex) docker search <hello-world>

# image 확인
docker images

# 컨테이너 확인
docker ps
docker ps -a

#image 다운로드
docker pull ubuntu:20.04

# 생성된 컨테이너가 없을 때 생성 및 접속
docker run -it --name <컨테이너 이름> <이미지>
ex : docker run -it --name ubuntu20.04 ubuntu:20.04

# 생성된 컨테이너가 없을 때 생성 및 접속하되, 백그라운드로 실행 및 container ID 출력
docker run -dit --name <컨테이너 이름> <이미지>
ex : docker run -dit --name ubuntu20.04 ubuntu:20.04

# 생성된 컨테이너가 없을 때 생성 및 접속하되, 종료 시 삭제
docker run --rm -it --name <컨테이너 이름> <이미지>
ex : docker run --rm -it --name ubuntu20.04 ubuntu:20.04

# 생성된 컨테이너가 없을 때 디렉토리를 마운트하며 생성 및 접속
docker run -it --name <컨테이너 이름> --volume="$PWD:/<컨테이너 내 경로>" <이미지>
ex 1 : docker run -it --name ubuntu20.04 --volume="$PWD:/test_dir" ubuntu:20.04
ex 2 : docker run -it --name ubuntu20.04 -v $PWD:/test_dir ubuntu:20.04

# port를 지정하며 실행
docker run -it -p <host port:container port>/<protocol> --name <컨테이너 이름> <이미지>
ex 1 : docker run -it -p 80:80 --name ubuntu20.04 ubuntu:20.04
ex 2 : docker run -it -p 80:80/tcp --name ubuntu20.04 ubuntu:20.04


# 종료되어 있는 컨테이너를 시작
docker start <container 이름 or ID>
ex : docker start ubuntu20.04

# 생성한 컨테이너에 접속(container 실행시 사용)
docker attach <container 이름 또는 container ID>
ex : docker attach ubuntu20.04

# 생성된 컨테이너가 있을 때 실행(외부에서 컨테이너 진입할 때 사용)
docker exec -it <container name> <command>
ex : docker exec -it ubuntu20.04 /bin/bash

image download

1
2
docker pull <image 이름>
ex : docker pull ubuntu:20.04

List images

1
docker images

List containers

1
2
docker ps
docker ps -a

Run a command in a new container

  • run : 컨테이너 생성 및 접속
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    # Usage
    docker run <options> Image <command> <ARG...>

    # run 옵션
    -i(--interactive) : 사용자가 입출력을 할 수 있는 상태
    -t(--tty) : 가상 터미널 환경을 에뮬레이션 한다.
    -v(--volume) : 공유 디렉토리 설정
    -d(--detach) : 컨테이너를 일반 프로세스가 아닌 데몬프로세스 형태로 실행하여 프로세스가 끝나도 유지되도록 한다
    -e(--env) : docker -e KEY=value와 같이 사용하며 컨테이너에 환경변수를 설정한다.
    -p : port의 줄임말로 특정 포트를 컨테이너에 포트 포워딩하기 위해 사용한다.
    --rm : 컨테이너가 종료되면 이를 자동으로 삭제한다.

    # 실행 중인 컨테이너가 없을 때
    docker run -it --name <container name> <image name> <command> <ARG...>
    ex : docker run -it --name ubuntu20.04 ubuntu:20.04 /bin/bash

    # 도커 실행 시 항상 재시작하겠끔 컨테이너 생성
    docker run --restart always --name ubuntu20.04 -dt ubuntu:20.04 /bin/bash

    # 컨테이너 생성 시 호스트의 현재 경로를 공유 디렉토리로 지정하면서 컨테이너 생성
    docker run -it --volume="$PWD:/[컨테이너 내에 생성될 경로]" [이미지] [명령]
    ex : docker run -it --volume="$PWD:/test_dir" ubuntu:20.04 /bin/bash
    ex2 : docker run -it --name ubuntu20.04 -v $PWD:/test_dir ubuntu:20.04 /bin/bash
    ex3(windows) : docker run -it --name ubuntu20.04 -v ${PWD}:/test_dir ubuntu:20.04 /bin/bash

    # -e
    docker run -it -e <KEY=value> <image name> <command>
    ex : docker run -it --name ubuntu20.04 -e test=test1 ubuntu:20.04 /bin/bash

    # -p
    docker run -it -p <host port:container port> <image name> <command>
    ex : docker run -it --name ubuntu20.04 -p 7000:7000 ubuntu:20.04 /bin/bash
    ex2 : docker run -it --name ubuntu20.04 -p 7000:7000/tcp ubuntu:20.04 /bin/bash
    ex3 : docker run -it --name ubuntu20.04 -p 7000:7000/tcp -p 7001:7001 ubuntu:20.04 /bin/bash

dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
1. 반드시 Dockerfile 이라는 이름으로 파일을 생성

작성법
FROM "기본 이미지"

MAINTAINER <작성자이름> <이메일>

# 로컬 파일 또는 디렉토리를 docker 이미지에 복사하려는 경우는 COPY 사용
COPY <src>...<dst>
ex) copy . /app

# COPY와 동일한 기능이나 추가로 압축 파일이나 원격지의 파일을
# 추출 또는 다운로드하여 docker 이미지에 복사하려는 경우는 ADD 사용
ADD <src>...<dst>
ex1) ADD test.tar.xz /
ex2) ADD http://test.com/download.php?id=1 /

RUN "실행할 명령어"
RUN ["명령어", "인자1", "인자2"]

WORKDIR "작업할 디렉토리"

expose <local port>

====================

2. 만들어진 dockerfile이 존재하는 위치에서 아래 명령어 입력
- 빌드 컨텍스트 경로 지정 부분에 있는 경로를 기준으로 COPY나 ADD 명령이 수행됨
docker build --tag "태그:버전" [빌드 컨텍스트 경로 지정]
ex 1) docker build --tag xeanbaek/ubuntu20.04:1.0 ./
ex 2) docker build -t xeanbaek/ubuntu20.04:1.0 .

# docker build 상황을 캐시로 저장하지 않음
2-1 --no-cache
docker build --no-cache --tag "태그:버전" [빌드 컨텍스트 경로 지정]
ex 1) docker build --no-cache --tag xeanbaek/ubuntu20.04:1.0 ./
ex 2) docker build --no-cache -t xeanbaek/ubuntu20.04:1.0 .

docker image push

1
2
3
4
5
6
7
8
1. docker build --tag <dockerhub에 로그인 가능한 사용자명>/<image 이름>:<버전> <빌드 컨텍스트 디렉토리 경로>
ex 1) docker build --tag xeanbaek/ubuntu20.04:1.0 ./
ex 2) docker build -t xeanbaek/ubuntu20.04:1.0 /home/sean/

2. docker login

3. docker push <tag>
ex) docker push xeanbaek/ubuntu20.04:1.0

docker ubuntu 컨테이너에서 systemctl 가능하도록 run

1
2
3
4
5
6
7
8
9
# systemctl 명령어 사용 가능하도록 백그라운드 모드로 실행
1. docker run --privileged -d --name <컨테이너 이름> <이미지 이름>:<버전> init

# 생성된 컨테이너의 ID 확인
2. docker ps

# 컨테이너 ID를 이용하여 접속
3. docker exec -it <컨테이너 ID> <명령어>
ex) docker exec -it <컨테이너 ID> /bin/bash

docker Image의 Label 확인하기

1
docker image inspect --format = ' ' [이미지 이름]

docker compose command

버전 확인

1
docker compose --version

docker compose.yml 문법 확인 및 구성 파일의 내용을 확인

1
docker compose config

컨테이너들의 상태 확인

1
2
3
- docker compose ps

- docker compose ps -q # 컨테이너 ID만 출력

컨테이너들의 로그를 출력

1
docker compose logs

서비스 실행

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[*] docker-compoose [옵션] [서비스명] [*]

# 모든 서비스 실행
docker-compose up -> 구형 표기법
docker compose up -> 신형 표기법

# 백그라운드로 docker compose를 실행하여 모든 서비스 실행
docker compose up -d

# 링크 서비스를 실행하지 않는다.
docker compose up --no-deps

# 캐싱된 이미지를 체크하지 않고 무조건 도커 이미지 빌드 후 compose up 한다.
docker compose up --buiid

# 이미지를 빌드하지 않고 compose up 한다.
docker compose up --no-buiid

# 컨테이너의 타임 아웃을 지정한다.(기본값은 10초)
docker compose up -t

# 서비스 수를 지정
docker compose up --scale SERVICE=[서비스 수]

생성 및 실행된 컨테이너에서 임의의 명령을 실행하기 위해 사용

1
2
3
4
5
6
7
8
9
10
[*] docker compose run [서비스명] [명령] [*]

# 특정 서비스 실행
docker compose run [서비스 이름]

# web_notice_board라는 서비스에 /bin/bash 명령어를 실행
docker compose run web_notice_board /bin/bash

# 백그라운드로 특정 서비스 실행
docker compose run [서비스 이름] -d

여러 개의 서비스 또는 특정 서비스를 시작/정지/일시정지/재시작 하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 서비스 시작
docker compose start # 여러 서비스들
docker compose start [서비스 이름] # 특정 서비스

# 서비스 정지
docker compose stop # 여러 서비스들
docker compose stop [서비스 이름] # 특정 서비스

# 서비스 일시 정지
docker compose pause # 여러 서비스들
docker compose pause [서비스 이름] # 특정 서비스

# 서비스 일시 정지 해제
docker compose unpause # 여러 서비스들
docker compose unpause [서비스 이름] # 특정 서비스

# 서비스 재시작
docker compose restart # 여러 서비스들
docker compose restart [서비스 이름] # 특정 서비스

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

1
2
3
4
5
[*] docker compose kill [옵션] [*]

docker compose kill

docker compose kill -s SIGINT

docker compose로 생성한 컨테이너들 일괄 삭제

1
docker compose rm

네트워크 정보, 볼륨, 컨테이너들을 일괄 정지 및 삭제

1
2
3
4
5
6
7
8
9
10
[*] docker compose down [옵션] [*]

# 모든 이미지 삭제
docker compose down --rmi all

# 커스텀 태그가 없는 이미지 삭제
docker compose down --rmi local

# Compose 정의 파일의 데이터 볼룸을 삭제
docker compose down -v[--volumes]

서비스의 공개용 포트 번호 확인

1
2
3
4
5
6
7
[*] docker compose port [옵션] <서비스 이름> <프라이빗 포트 번호> [*]

# nginx 서비스의 80 포트에 할당되어 있는 설정을 확인
docker compose port nginx 80

# nginx 서비스의 tcp 프로토콜 80번 포트에 할당되어 있는 설정을 확인
docker compose port --protocol=tcp nginx 80