초보자를 위한 Docker 기본 (1)
Updated:
본 포스팅을 읽기전에,
Docker가 설치되어 있지 않다면 Docker를 미리 설치하고 본 포스팅을 읽으며 따라하면 훨씬 더 효과적이에요~
초간단 개요
Docker 엔진에서 사용하는 기본 단위는 “이미지”와 “컨테이너”이며, 이 두가지가 핵심입니다.
아래와 같은 간략한 정의 정도만 기억하시고, 읽어가면서 차차 익혀 봅시다.
- “이미지”
컨테이너를 생성할 때 필요한 요소이며, CD 또는 CD를 구운 iso 파일과 비슷한 개념입니다.
- 이미지 이름 표기법 : [저장소이름]/[이미지이름]:[태그]
※ [저장소이름] 생략 시 도커 공식 이미지를 지칭함
※ [태그] 생략 시 latest로 취급 ex) [이미지이름]:latest
- “컨테이너”
도커 이미지를 프로세스化 하는 것입니다.
쉽게 생각하면 게임 CD(Docker image)를 CD Reader기(Docker engin)에 넣고 게임을 실제로 실행(컨테이너 생성&실행)한 것입니다.
도커 핵심 명령어
이 정도 명령어만 알아도 왠만큼 Docker를 사용할 수 있습니다.
자주 사용하며 손가락에 익혀둡시다.
docker -v
Docker의 버전을 확인한다.
$ docker -v
Docker version 19.03.7, build 7141c199a2
docker pull [이미지이름]
이미지 저장소에서 이미지를 Download 한다.
$ docker pull centos:7
7: Pulling from library/centos
ab5ef0e58194: Pull complete
Digest: sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813c
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
docker images
내 Local Repository에 저장된 이미지 목록을 확인한다.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 5e35e350aded 4 months ago 203MB
docker rmi [이미지명]
내 Repository에 있는 이미지를 삭제한다.
삭제한 이미지는 이미지 이름만 알고 있으면 언제든지 다시 받을 수 있으므로 내 Repository는 깔끔하게 유지하자.
참고로 이미지 이름 표기법은 [저장소이름]/[이미지이름]:[태그] 이다.
docker run [OPTIONS] [이미지이름] [COMMAND] [ARG…]
컨테이너를 “새로” 생성 및 실행한다. (뒤에 설명하는 docker exec와 구분)
내 Repository에 해당 이미지가 없을 경우 이미지 Download를 자동으로 먼저 수행한다
$ docker run -d -e MYSQL_ROOT_PASSWORD=mypasswd --name=mysql1 mysql:5.7
Unable to find image 'mysql:5.7' locally
5.7: Pulling from library/mysql
68ced04f60ab: Pull complete
f9748e016a5c: Pull complete
da54b038fed1: Pull complete
6895ec5eb2c0: Pull complete
111ba0647b87: Pull complete
c1dce60f2f1a: Pull complete
702ec598d0af: Pull complete
63cca87a5d4d: Pull complete
ec05b7b1c5c7: Pull complete
834b1d9f49b0: Pull complete
8ded6a30c87c: Pull complete
Digest: sha256:b475cf2d99b3209c9fafe7841b6f05cfd862c67ee5b06ff66506216409370b74
Status: Downloaded newer image for mysql:5.7
d0e085dac537aea3ef6bdccd999081e63e9dbe4cbd5d20b5ebf4f41a606b351a
[위 명령어의 옵션 설명]
-d, –detach : 백그라운드로 컨테이너 실행(즉, 입출력이 없는 상태로 실행)
-e, –env list : 관련 환경변수 설정
–name=[이름], –name [이름] : 컨테이너 이름 지정
$ docker run -i -t --name myubuntu1 ubuntu:14.04
Unable to find image 'ubuntu:14.04' locally
14.04: Pulling from library/ubuntu
2e6e20c8e2e6: Pull complete
30bb187ac3fc: Pull complete
b7a5bcc4a58a: Pull complete
Digest: sha256:ffc76f71dd8be8c9e222d420dc96901a07b61616689a44c7b3ef6a10b7213de4
Status: Downloaded newer image for ubuntu:14.04
root@918b5a0997e3:/#
[위 명령어의 옵션 설명]
-i, –interactive : 상호 입출력창을 open한 상태로 컨테이너를 실행
-t, –tty : TTY를 활성화하여 bash 쉘을 사용가능케 함
→ 2개 옵션을 붙여서 한 번에 써도 된다. docker run -it …
docker ps
“실행중”인 컨테이너 목록을 확인한다.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
534f97870d62 mysql:5.7 "docker-entrypoint.s…" 47 minutes ago Up About an hour 3306/tcp, 33060/tcp mysql1
정지된 목록을 보고 싶으면 –a 옵션을 추가
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
534f97870d62 mysql:5.7 "docker-entrypoint.s…" 46 minutes ago Up About an hour 3306/tcp, 33060/tcp mysql1
2c4627762afa ubuntu:14.04 "/bin/bash" About an hour ago Exited (0) About an hour ago myubuntu1
-q 옵션으로 컨테이너 id 출력
$ docker ps -a -q
89e753f1b95a
918b5a0997e3
de67d55ce5ab
-q 옵션 활용한 모든 컨테이너 중지
$ docker stop $(docker ps -a -q)
89e753f1b95a
918b5a0997e3
de67d55ce5ab
docker rm [컨테이너명]
“정지”되어 있는 컨테이너를 삭제한다.
“실행”중인 컨테이너를 삭제할 때는 -f 옵션 추가.
$ docker rm myubuntu1
myubuntu1
$ docker rm -f mysql1
mysql1
docker exec [OPTIONS] [컨테이너명] [COMMAND] [ARG…]
이미 생성되어 실행중인 컨테이너에 명령어를 전달, 또는 이미 실행중인 컨테이너의 shell로 들어가고자 할 때 사용
(docker run과 혼동하지 말자)
$ docker exec -it mysql1 bash
Uroot@534f97870d62:/# (← 아까 실행시켜 놨던 mysql1 컨테이너의 shell로 들어감)
참고로, 위와 같이 Docker 컨테이너 내부 shell로 들어간 후 다시 바깥으로 나오는 방법은 세 가지가 있습니다.
1) exit
명령어 “exit”을 치고 엔터 (컨테이너를 종료시키고 나옴)
2) Ctrl + D
컨테이너를 종료시키고 나옴
3) Ctrl + P 누른 후 다시 Q
컨테이너를 살려두고 나옴
→ 다시 접속하려면 docker attach [컨테이너명]
docker create [OPTIONS] [이미지이름] [COMMAND] [ARG…]
컨테이너를 생성만한다. (실행x)
내 Repository에 해당 이미지가 없을 경우 이미지 Download를 먼저 수행한다
$ docker create -it --name mycentos centos:7
Unable to find image 'centos:7' locally
7: Pulling from library/centos
ab5ef0e58194: Pull complete
Digest: sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813c
Status: Downloaded newer image for centos:7
9da63a5da2e324bebc249967bc82460ad19b30396f090f95fb46fdfc5c6a898c
docker start [컨테이너명]
생성된 컨테이너를 실행한다.
$ docker start mycentos
mycent
※ start 명령어는 생성된 컨테이너를 실행만 시킨 것이며, shell 사용을 원할 시 docker exec 명령어를 활용한다.
docker rename [old_name] [new_name]
컨테이너 이름을 변경한다.
$ docker rename myubuntu1 myu1
docker stop [컨테이너명]
실행중인 컨테이너를 중지한다.
$ docker stop mycentos
mycent
※ start 명령어는 생성된 컨테이너를 실행만 시킨 것이며, shell 사용을 원할 시 docker exec 명령어를 활용한다.
docker rename [old_name] [new_name]
컨테이너 이름을 변경한다.
$ docker rename myubuntu1 myu1
끝으로, 자주사용하는 옵션 정리
옵션 | 설명 |
---|---|
-d | detached mode, 흔히 말하는 백그라운드 모드 |
-e | 컨테이너 내부에서 사용할 환경변수 설정 |
–name | 컨테이너 명 설정 |
-it | -i와 -t를 동시에 사용하는 것으로 터미널 입력을 위한 옵션 |
-p | 호스트와 컨테이너의 포트를 연결(포워딩) |
-v | 호스트와 컨테이너의 디렉토리를 연결(마운트) |
다음글…