[Docker] Docker 기본 사용법 정리

[Docker] Hot to use Docker

Posted by nicewoong on October 9, 2017

Docker 사용법 (Linux에서)

Reference

를 보고 직접 따라해본 것을 정리한 내용입니다.

Docker 다운받기

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

Docker 사용 권한 주기

  • docker 는 기본적으로 root 권한이 필요로 되어있다고 함.
  • sudo 명령어 없이 docker를 이요하고 싶다면 아래 커맨드로 사용자에게 권한을 줍시다.

sudo usermod -aG docker your-user

  • 그리고나서 docker version 을 입력하면 아래와 같은 결과를 볼 수 있음. 버전확인하기
    • 버전정보 확인을 통해서 설치가 제대로 되었는지 판단가능 :)
~$ docker version
Client:
 Version:      17.09.0-ce
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:42:18 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.09.0-ce
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:40:56 2017
 OS/Arch:      linux/amd64
 Experimental: false

컨테이너사용

옵션

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

출처 : 초보를 위한 도커 안내서 - 설치하고 컨테이너 실행하기

기본 Operation

  • **이미지 다운받기 **
#우분투 이미지 다운받기 (pull)

~$ docker pull ubuntu:latest
# 아래와 같이 다운받는 과정이 나타남. 
latest: Pulling from library/ubuntu
9fb6c798fa41: Downloading [=============================>                     ]     28MB/47.54MB
3b61febd4aef: Download complete 
9d99b9777eb0: Verifying Checksum 
d010c8cf75d7: Download complete 
7fac07fb303e: Download complete 
  • 다운 받은 docker image 확인하기
~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              b6dddb991dfa        2 weeks ago         107MB
ubuntu              16.04               2d696327ab2e        2 weeks ago         122MB
ubuntu              xenial              2d696327ab2e        2 weeks ago         122MB
centos              latest              196e0ce0c9fb        3 weeks ago         197MB
ubuntu              trusty              dea1945146b9        3 weeks ago         188MB
  • 이미지를 컨테이너로 실행한 뒤 bash shell 열기
    • -i 옵션 : interactive
    • -t 옵션 : tty
    • –name ubuntu01 : 해당 컨테이너 이름을 ubuntu01 이라 지정
    • /bin/bash : 해당 컨테이너의 bash shell 실행
    • bash shell 에서 exit 하면 컨테이너가 자동으로 stop 됨.
~$ docker run -i -t --name ubuntu01 ubuntu /bin/bash
#ubuntu 자리에 image id 를 입력해도 됨 

#아래와 같이 새로운 우분투 쉘로 진입한 것을 확인할 수 있음.
root@0a012fad0c3d:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
  • exit 하고 빠져나와서 다시 ubuntu01 시작할때 docker restart ubuntu01

  • 그리고 다시 해당 컨테이너에 접속하기

~$ docker attach ubuntu01

# 새로 진입한 ubuntu01 에서 ls 명령 실행해보기
root@0a012fad0c3d:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

  • 컨테이너 중지하기
~$ docker stop 5555b7dd1385
5555b7dd1385
  • 모든 컨테이너 중지하기
~$ docker stop $(docker ps -a -q)
5555b7dd1385
b318cd2b8377
6c9e33af1272
a9ac6712167f
bb5b70c94b85
2ab2195d8895
5e53723c44cc
d4bdcfc7f373
b76f537a4fd6
  • 컨테이너 재부팅하기
~$ docker restart 5555b7dd1385
5555b7dd1385

#ps 명령어로 확인해보기
wjhan@triton8:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
5555b7dd1385        redis               "docker-entrypoint..."   12 hours ago        Up 5 seconds        6379/tcp            sad_lichterman
  • 컨테이너 확인하기 (-a 옵션으로 종료된 컨테이너까지 확인하기)
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMES
5555b7dd1385        redis               "docker-entrypoint..."   11 hours ago        Up 11 hours               6379/tcp            sad_lichterman
b318cd2b8377        redis               "docker-entrypoint..."   11 hours ago        Exited (0) 11 hours ago                       mystifying_yalow
6c9e33af1272        redis               "docker-entrypoint..."   13 hours ago        Exited (0) 12 hours ago                       hopeful_joliot
479266e88816        ubuntu:16.04        "/bin/bash"              18 hours ago        Exited (0) 18 hours ago                       reverent_wright
a9ac6712167f        centos              "/bin/bash"              9 days ago          Exited (127) 9 days ago                       gallant_mirzakhani
bb5b70c94b85        ubuntu:xenial       "/bin/bash"              9 days ago          Exited (0) 9 days ago                         vigorous_williams
2ab2195d8895        ubuntu:xenial       "/bin/bash"              9 days ago          Exited (0) 9 days ago                         modest_mccarthy
5e53723c44cc        ubuntu:xenial       "/bin/bash"              9 days ago          Exited (0) 9 days ago                         clever_visvesvaraya
d4bdcfc7f373        ubuntu:xenial       "/bin/bash"              9 days ago          Exited (0) 9 days ago                         sleepy_cray
b76f537a4fd6        ubuntu:xenial       "/bin/bash"              9 days ago          Exited (0) 9 days ago                         peaceful_haibt
  • 컨테이너 삭제하기
~$ docker rm 479266e88816
479266e88816
  • 모든 컨테이너 삭제
~$ docker rm $(docker ps -a -q)
5555b7dd1385
b318cd2b8377
6c9e33af1272
a9ac6712167f
bb5b70c94b85
2ab2195d8895
5e53723c44cc
d4bdcfc7f373
b76f537a4fd6
  • 이미지 삭제하기
docker rmi 이미지이름:이미지태그
  • 모든 이미지 삭제하기
~$ docker rmi $(docker images -q)
Untagged: redis:latest
Untagged: redis@sha256:ebb396dc3ac00e8eb4a64c1c022ef41ef16801f31ff98b16916a77fdc7252e67
Deleted: sha256:b6dddb991dfa5f8e49b00d2d4ff1e46e6593101ace99cca0febf287cadc4febf
Deleted: sha256:de0975f9263db0f0d446f5ed2789ec8316a1b81954215815bec6b1813545094a
Deleted: sha256:f4bca552ddb640965abb7cc6457c88960ed7e9b27e9ee4ae4e79307b9abbf015
Deleted: sha256:60087bf380ab081eba07e40965078d82b3f759910318e0cfce118b3f46b5a1d9
Deleted: sha256:c5bc4c295a15c2ff31c9edb3ecdcc18b1271f3fc7e544f64cf5ffb99c07fb555
Deleted: sha256:8686ba556bab3b5149f39e3f4ec6c82f0cc79d3181caa2773900491a6baf3713
Deleted: sha256:eda7136a91b7b4ba57aee64509b42bda59e630afcb2b63482d1b3341bf6e2bbb
Untagged: centos:latest
Untagged: centos@sha256:eba772bac22c86d7d6e72421b4700c3f894ab6e35475a34014ff8de74c10872e
Deleted: sha256:196e0ce0c9fbb31da595b893dd39bc9fd4aa78a474bbdc21459a3ebe855b7768
Deleted: sha256:cf516324493c00941ac20020801553e87ed24c564fb3f269409ad138945948d4
Untagged: ubuntu:trusty
Untagged: ubuntu@sha256:6e3e3f3c5c36a91ba17ea002f63e5607ed6a8c8e5fbbddb31ad3e15638b51ebc
Deleted: sha256:dea1945146b96542e6e20642830c78df702d524a113605a906397db1db022703
Deleted: sha256:6401e3024b4d4ef4c981cde2e830858eb790ee84284e1401cf569a6db8df51d9
Deleted: sha256:f12ee38eb7aa0ffdd43c657b433d91ac4c2930887c02eb638fd1518f374bc738
Deleted: sha256:9ac64e2751425199591402799079940629829c7c2fc0e083fb714e5dd94d70a9
Deleted: sha256:12a6279e654d2f23c2fa086bf2dcd82e1a2c82b01028379bbf2cde061d9235e6
Deleted: sha256:c47d9b229ca4eaf5d3b85b6fa7f794d00910a42634dd0fd5107a9a937b13b20f

우분투 (ubuntu 16.04) 컨테이너 실행하기

  • 해당 우분투 이미지가 없으면 알아서 설치하고나서 우분투를 실행함.

  • docker run ubuntu:16.04

  • 이때 우분투 이미지를 새로 설치하고나서 바로 종료됨.

  • 설치가 완료되고, 옵션과 함께 다시 실행해 봅시다.

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

  • 새로운 우분투 컨테이너로 진입한 상태를 알아챌 수 있을 것.

  • cat /etc/issue 명령어를 통해서 우분투 버전을 확인해봅시다.

  • –rm 옵션 때문에 exit 하는 순간 모든 데이터 삭제됨.

Redis 컨테이너 실행하기

  • detached mode (백그라운드모드)로 : -d 옵션
  • 컨테이너 포트를 호스트의 포트로 연결 : -p 옵션
  • docker run -d -p 1234:6379 redis
  • 없으니까 바로 다운로드 받고 실행됨
  • -p 옵션을 이용: 호스트의 1234포트를 컨테이너의 6379포트로 연결, localhost의 1234포트로 접속하면 하면 redis를 사용 가능
~$ docker run -d -p 1234:6379 redis
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
065132d9f705: Pull complete 
be9835c27852: Pull complete 
f4a0d1212c38: Pull complete 
43be9e9f0fb9: Pull complete 
a1bca8e532ec: Pull complete 
382eae952932: Pull complete 
Digest: sha256:ebb396dc3ac00e8eb4a64c1c022ef41ef16801f31ff98b16916a77fdc7252e67
Status: Downloaded newer image for redis:latest
6c9e33af12720e6d5ad70506e709d7bfddc621ae9887270dd6da4be93fdea964
  • 텔넷으로 연결해보기
~$ telnet localhost 1234
Trying ::1...
Connected to localhost.
Escape character is '^]'.
#아래와같이 명령어를 입력해보자. 
set mykey hello
+OK
get mykey
$5
hello