도커 사용을 위한 명령어(CLI) 핸드북
도커 GUI를 사용하지 않고 Shell 환경에서 CLI (Command-Line Interface)로 도커를 제어하는 명령어들의 핸드북입니다. 도커 이미지 생성 및 제어, 도커 컨테이너 생성 및 제어, 이미지 혹은 컨테이저를 저장하고 로드하는 방법을 소개합니다.
permission denied while trying to connect to the Docker daemon socket
도커를 설치하고 도커와 관련된 명령어 실행을 시도하면, /var/run/docker.sock
의 접속 관련한 권한 에러가 발생한다. 시스템 측면에서 도커가 하는 동작은 root
권한이 필요해서 그런것 같다.
1
2
3
$ docker images -a
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json?all=1": dial unix /var/run/docker.sock: connect: permission denied
아래 명령어를 사용해서 당신의 우분투 계정이 /var/run/docker.sock
에 접근 가능하도록 권한을 부여한다.
1
sudo chmod 666 /var/run/docker.sock;sudo chown -R ${USER}:users /var/run/docker.sock
Image
Build Docker Image
도커를 사용하기 위해서 가장 처음 해야할 일은 도커 이미지를 생성하는 일이 될 수도 있다. 아래 명령어로 도커 이미지를 빌드 할 수 있다. 당신이 작성한 Dockerfile
을 기반으로 도커 이미지를 빌드 하는 명렁어 이다.
1
2
3
4
5
6
7
8
9
# build general
docker build -f <Dockerfile> -t <tag> .
# build without cache
docker build -f <Dockerfile> --no-cache -t <tag> .
# -----------------------------------------------
# example
docker build -f Dockerfile -t img-my .
List Docker Images and remove it
아래는 시스템에 등록된 도커 이미지의 목록을 조회하고 삭제하는 명령어이다.
1
2
3
4
5
# list
docker images -a
# remove
docker rmi <repository name>
Remove Docker images cache
Dockerfile
을 수정해 가며 도커 이미의 빌드를 반복하면, 최초로 이미지를 빌드할 때 보다 빌드시간이 적게 든다. 이것은 도커가 레이어드 구조를 가지고 있고 변경되지 않은 부분은 시스템에 캐싱이 되기 때문에 가능하다. 하지만, 캐싱된 내용은 저장소의 공간을 점유한다. 도커 캐시를 삭제하는 명령어는 아래와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# remove docker cache
docker system prune -a
# -----------------------------------------------
# example
$ docker system prune -a
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N] y
Deleted build cache objects:
kxgva6ktfwea5hiatrfmgyeq3
...
c5tvqn2p53ledfjz4nqyrbl1g
gtdusijog41t1972eh4oggk37
Total reclaimed space: 15.34GB
Container
Create Container from Image
도커 이미지를 생성했다면, 이미지를 기반으로 컨테이너를 생성하는 명령어 입니다.
1
2
3
4
5
docker run -d -it --name <container name> -p <ubuntu machine port>:<docker port> <image name>
# -----------------------------------------------
# example
docker run -d -it --name cond-my -p 43389:3389 -p 48080:8080 -p 44000:4000 -p 422:22 img-my
List Docker Containers and remove it
run
명령어로 도커 컨테이너를 최초 실행했다면 컨테이너가 생성됩니다. 그리고 ps
명령어를 통해 도커 컨테이너의 상태를 조회하고 컨테이너 목록을 조회 할 수 있습니다. 그리고 rm
명령어로 도커 컨테이너 삭제도 가능합니다.
1
2
3
4
5
6
# list
docker ps -a
# remove
docker rm <container id>
Start, Stop, Attach
도커 목록을 조회해서 도커 컨테이너의 ID를 알아 냈다면, start
명령어를 통해 도커 컨테이너를 시작하고 정지(stop
)하고 도커 내부에 들어갈 수 있습니다(attach
).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# start stopped container
docker start <container id>
# start stopped container & enter container
docker start -i <container id>
# stop running container
docker stop <container id>
# enter running(started) container
docker attach <container id>
# pass to commands to running container
docker exec -it <container names> <commands>
Save/Load docker image
Export Docker Image to file
나의 경우는 시놀로지 나스의 도커 기능을 사용합니다. 시놀로지는 기본적으로 도커허브에 등록된 이미지 기반으로 컨테이너를 생성하는 기능을 지원합니다. 하지만, 나는 Dockerfile
기반에서 생성된 도커 이미지를 컨테이너로 사용하는 것을 원했기 때문에 우분투 머신에서 생성한 이미지를 파일로 저장해 시놀로지 도커에서 로드해 사용했습니다.
아래의 명령어는 시스템에 등록된 도커 이미지를 tar 형태의 파일로 저장합니다.
1
2
3
4
5
docker save -o <file name> <image name>
# -----------------------------------------------
# example
docker save -o img-my.tar img-my
Load Docker Image from Image file
아래 명령어는 tar파일 형태의 도커 이미지를 시스템에 로드합니다.
1
2
3
4
5
6
docker load -i <file name>
# -----------------------------------------------
# example
docker load -i img-my.tar
Export Docker Container to Image
상황에 따라서 Dockerfile
에 기술한 내용만으로 이미지 안의 환경을 구성하지 못할수도 있습니다. 그렇기 때문에 때때로 수동으로 환경 설정을 마친 도커 컨테이너를 이미지로 만들어야 할 경우가 생길 수도 있습니다. 아래 명령어는 도커 컨테이너를 이미지로 변환합니다.
1
2
3
4
5
docker commit <container name> <image name = repository name>:<tag>
# -----------------------------------------------
# example
참고자료
- Docker 이미지 추출 및 불러오기: https://dongle94.github.io/docker/docker-image-extract/