Docker 기본 명령어
1. Docker 기본 명령어
Docker의 명령은 docker run, docker push와 같이 docker <명령> 형식 입니다.
1-1 이미지 관련 명령어
> 이미지 검색
docker search <이미지 이름>
- 보통 Ubuntu, CentOS, Redis 등 OS나 프로그램 이름을 가진 이미지가 공식 이미지 입니다.
- 나머지는 사용자들이 만들어서 공개한 이미지 입니다.
[root@localhost ~]# docker search centos NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official build of CentOS. 4392 [OK] ansible/centos7-ansible Ansible on Centos7 113 [OK] jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x86_… 97 [OK] consol/centos-xfce-vnc Centos container with "headless" VNC session… 55 [OK] tutum/centos Simple CentOS docker image with SSH access 42 imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 41 [OK] gluster/gluster-centos Official GlusterFS Image [ CentOS-7 + Glust… 30 [OK] centos/mysql-57-centos7 MySQL 5.7 SQL database server 28 openshift/base-centos7 A Centos7 derived base image for Source-To-I… 27 centos/python-35-centos7 Platform for building and running Python 3.5… 24 kinogmt/centos-ssh CentOS with SSH 21 [OK] centos/postgresql-96-centos7 PostgreSQL is an advanced Object-Relational … 19 openshift/jenkins-2-centos7 A Centos7 based Jenkins v2.x image for use w… 13 centos/httpd-24-centos7 Platform for running Apache httpd 2.4 or bui… 13 openshift/mysql-55-centos7 DEPRECATED: A Centos7 based MySQL v5.5 image… 6 openshift/jenkins-1-centos7 DEPRECATED: A Centos7 based Jenkins v1.x ima… 4 pivotaldata/centos-gpdb-dev CentOS image for GPDB development. Tag names… 4 darksheer/centos Base Centos Image -- Updated hourly 3 [OK] openshift/wildfly-101-centos7 A Centos7 based WildFly v10.1 image for use … 3 pivotaldata/centos Base centos, freshened up a little with a Do… 2 blacklabelops/centos CentOS Base Image! Built and Updates Daily! 1 [OK] pivotaldata/centos-mingw Using the mingw toolchain to cross-compile t… 1 smartentry/centos centos with smartentry 0 [OK] jameseckersall/sonarr-centos Sonarr on CentOS 7 0 [OK] |
> 이미지 받아오기
docker pull <이미지 이름>:<태그>
- Docker Hub에서 ubuntu 이미지를 받아보겠습니다.
- 이미지 이름 뒤에 latest를 설정하면 최신 버전을 받을 수 있습니다.
- Ubuntu:14.04, Ubuntu12.10 처럼 태그를 지정할 수 있습니다.
- 이미지 이름에서 91jos/ubuntu처럼 / 앞에 사용자명을 지정하면 해당 사용자가 올린 이미지를 받을 수 있습니다.
[root@localhost ~]# docker pull ubuntu:latest latest: Pulling from library/ubuntu 6b98dfc16071: Pull complete 4001a1209541: Pull complete 6319fc68c576: Pull complete b24603670dc3: Pull complete 97f170c87c6f: Pull complete Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d Status: Downloaded newer image for ubuntu:latest |
> 이미지 목록 출력하기
docker images
- 다운받은 이미지 목록을 출력합니다.
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 113a43faa138 2 weeks ago 81.1MB |
> 이미지를 파일로 출력하기
docker save <이미지 이름> > <이름>.tar
[root@localhost ~]# docker save ubuntu:latest > ubuntu:latest.tar [root@localhost ~]# ll 합계 81720 -rw-r--r-- 1 root root 83680768 6월 25 14:12 ubuntu:latest.tar |
> 이미지 삭제하기
docker rmi <이미지 이름>:<태그>
- 태그를 지정하지 않고 이미지 이름만 지정하였을땐 이미지 이름을 가진 모든 이미지가 삭제 됩니다.
[root@localhost ~]# docker rmi ubuntu:latest Untagged: ubuntu:latest Untagged: ubuntu@sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d Deleted: sha256:113a43faa1382a7404681f1b9af2f0d70b182c569aab71db497e33fa59ed87e6 Deleted: sha256:a9fa410a3f1704cd9061a802b6ca6e50a0df183cb10644a3ec4cac9f6421677a Deleted: sha256:b21f75f60422609fa79f241bf80044e6e133dd0662851afb12dacd22d199233a Deleted: sha256:038d2d2aa4fb988c06f04e3af208cc0c1dbd9703aa04905ade206d783e7bc06a Deleted: sha256:b904d425ea85240d6af5a6c6f145e05d5e0127f547f8eb4f68552962df846e81 Deleted: sha256:db9476e6d963ed2b6042abef1c354223148cdcdbd6c7416c71a019ebcaea0edb |
> dockerfile로 이미지 생성하기
docker build <옵션> 경로>
- 아래 작성한 Dockerfile로 이미지 생성하겠습니다.
- Dockerfile이 저장된 docker 디렉토리에서 명령어 실행
- --tag 옵션으로 이미지 이름과 태그를 설정할 수 있습니다.
[root@localhost local]# mkdir docker [root@localhost local]# cd docker/ [root@localhost docker]# vi dockerfile
FROM ubuntu:14.04 MAINTAINER Foo Bar 91jos@naver.com
RUN apt-get update RUN apt-get install -y nginx RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf RUN chown -R www-data:www-data /var/lib/nginx
VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"]
WORKDIR /etc/nginx
CMD ["nginx"]
EXPOSE 80 EXPOSE 443
[root@localhost docker]# docker build --tag docker_test:0.1 . Sending build context to Docker daemon 2.048kB Step 1/11 : FROM ubuntu:14.04 14.04: Pulling from library/ubuntu
Successfully built 5e397b69fee8 Successfully tagged docker_test:0.1
[root@localhost docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker_test 0.1 5e397b69fee8 About a minute ago 266MB => 이미지 생성완료 ubuntu 14.04 578c3e61a98c 2 weeks ago 223MB ubuntu latest 113a43faa138 2 weeks ago 81.1MB |
> 컨테이너를 이미지로 만들기
docker commit <컨테이너 이름> <이미지 이름>:<태그>
[root@localhost ~]# docker commit smile smile_image:0.1 sha256:afdf27d4bd445e8848ad5d307cbd15154ba04f293707a337b7b81f9cc2dcc33f
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE smile_image 0.1 afdf27d4bd44 4 seconds ago 181MB docker_test 0.1 5e397b69fee8 31 hours ago 266MB ubuntu 14.04 578c3e61a98c 2 weeks ago 223MB ubuntu latest 113a43faa138 2 weeks ago 81.1MB |
1-2 컨테이너 관련 명령어
> run 명령어로 컨테이너 생성하기
docker run <옵션> <이미지 이름> <실행할 파일>
- ubuntu 이미지를 컨테이너로 생성한 뒤 ubuntu 이미지 /bin/bash 를 실행
- -i, -t 옵션을 사용하면 실행된 bash 쉘에 입력 및 출력 가능
- --name 옵션으로 컨테이너에 이름을 지정할 수 있음, 이름을 지정하지 않으면 docker가 자동으로 이름을 생성하여 지정
- cd, ls 명령으로 컨테이너 내부를 둘러본 뒤 exit를 입력하여 bash 쉘에서 나올 수 있습니다.
- 우분투 이미지에서 /bin/bash 실행 파일을 실행했기 때문에 여기서 나오면 컨테이너가 stop 됩니다.
[root@localhost ~]# docker run -i -t --name smile ubuntu /bin/bash root@9d1213227a9e:/# root@9d1213227a9e:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@9d1213227a9e:/# exit |
위에 run 명령어로 컨테이너 생성시 몇 가지 옵션들 입니다. -a, --attach=” “ => “stdin” : 컨테이너에 표준 입력 연결 => “stdout” : 컨테이너에 표준 출력 연결 => “stderr” : 컨테이너에 표준 에러 연결
-c, --cpu-shares=0 => CPU 자원 분배 설정 입니다. 기본 값은 1024 이며 각 값은 상대적으로 적용 됩니다. => --cpu-shares=2048로 설정하면 기본 값 보다 두 배 많은 CPU 자원을 할당합니다.
-d, --detach=false : 컨테이너가 백그라운드로 실행됩니다. --device=”<호스트 장치>:<컨테이너 장치> : 호스트의 장치를 컨테이너에서 사용할 수 있도록 연결합니다. --device=”/dev/sda1:/dev/sda1” 처럼 설정하면 호스트의 /dev/sda1 블록 장치를 컨테이너에서도 사용할 수 있습니다.
-h, --hostname=” “ : 컨테이너의 호스트 이름을 설정 합니다.
-m, --memory=” “ : 메모리 한계를 설정합니다. => <숫자><단위> 형식이며 단위는 b, k, m, g를 사용할 수 있습니다.
--net=” ” : 컨테이너의 네트워크 모드를 설정합니다. => bridge : docker 네트워크 브리지에 새 네트워크를 생성합니다. => none : 네트워크를 사용하지 않습니다. |
> 컨테이너 목록 확인하기
docker ps
- 모든 컨테이너 목록 출력이 가능합니다.
- 위에서 컨테이너를 생성할 때 이름을 smile로 지정했으므로 컨테이너 목록에서도 smile이 표시 됩니다.
- -a 옵션을 사용하면 정지된 컨테이너까지 모두 출력 됩니다.
- 옵션을 사용하지 않으면 실행되고 있는 컨테이너만 출력 됩니다.
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9d1213227a9e ubuntu "/bin/bash" 2 minutes ago Exited (127) About a minute ago smile |
> 컨테이너 실행하기
docker start <컨테이너 이름>
- OS 부팅 처럼 컨테이너 실행
- restart로 재시작 가능 합니다.
[root@localhost ~]# docker start smile smile |
> 컨테이너에 접속하기
docker attach <컨테이너 이름>
- 위에 시작한 컨테이너에 접속하여 보겠습니다.
- 명령어를 실행한 뒤에 엔터를 한번 더 입력하면 bash 쉘이 표시 됩니다.
- bash 쉘에서 exit 또는 Ctrl+d를 입력하면 컨테이너가 정지 됩니다.
- Ctrl+p, Ctrl+q 를 입력하면 컨테이너를 정지하지 않고, 빠져나올 수 있습니다.
[root@localhost ~]# docker attach smile root@9d1213227a9e:/# root@9d1213227a9e:/# |
> 외부에서 컨테이너 안의 명령 실행하기
docker exec <컨테이너 이름> <명령> <매개 변수>
- 현재 컨테이너가 /bin/bash로 실행된 상태 입니다.
- /bin/bash를 통하지 않고 외부에서 컨테이너 안의 명령을 실행하겠습니다.
[root@localhost ~]# docker exec smile echo "hello" hello |
> 컨테이너 정지하기
docker stop <컨테이너 이름>
[root@localhost ~]# docker stop smile smile [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
> 컨테이너 삭제하기
docker rm <컨테이너 이름>
[root@localhost ~]# docker rm smile smile [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
> 컨테이너 내의 파일을 로컬에 복사하기
docker cp <컨테이너 이름>:/복사할 파일 위치/파일이름 /복사받을 파일 위치/파일 이름
[root@localhost ~]# docker cp smile:/etc/issue /usr/local/src/docker_test [root@localhost ~]# ll /usr/local/src/ 합계 4 -rw-r--r-- 1 root root 24 4월 24 17:34 docker_test |
> 컨테이너 생성 후 이미지로부터 변경된 파일 확인하기
docker diff <컨테이너 이름>
[root@localhost ~]# docker diff smile C /lib C /lib/x86_64-linux-gnu A /lib/x86_64-linux-gnu/libhistory.so.7 A /lib/x86_64-linux-gnu/libexpat.so.1.6.7 A /lib/x86_64-linux-gnu/libreadline.so.7.0 A /lib/x86_64-linux-gnu/libexpat.so.1 A /lib/x86_64-linux-gnu/libhistory.so.7.0 A /lib/x86_64-linux-gnu/libreadline.so.7 C /usr C /usr/share A /usr/share/readline A /usr/share/readline/inputrc A /usr/share/vim A /usr/share/vim/addons A /usr/share/vim/addons/plugin A /usr/share/vim/addons/plugin/editexisting.vim
=> 컨테이너 생성 후 apt-get update 와 vim을 설치하여 위 같이 변경된 파일이 나타났습니다. |
> 컨테이너 세부 정보 확인하기
docker inspect
- 이미지와 컨테이너의 세부 정보를 출력합니다.
[root@localhost ~]# docker inspect smile [ { "Id": "be3291c0e07fa8a1e78b4def2b87310e539532a3892b9fc318df5b593cd8896c", "Created": "2018-06-25T05:14:33.567424159Z", "Path": "/bin/bash", "Args": [], "State": { "Status": "exited", "Running": false, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 0, "ExitCode": 0, "Error": "", "StartedAt": "2018-06-25T05:17:09.124026456Z", "FinishedAt": "2018-06-25T05:26:32.679370228Z" }, "Image": "sha256:113a43faa1382a7404681f1b9af2f0d70b182c569aab71db497e33fa59ed87e6", "ResolvConfPath": "/var/lib/docker/containers/be3291c0e07fa8a1e78b4def2b87310e539532a3892b9fc318df5b593cd8896c/resolv.conf", "HostnamePath": "/var/lib/docker/containers/be3291c0e07fa8a1e78b4def2b87310e539532a3892b9fc318df5b593cd8896c/hostname", "HostsPath": "/var/lib/docker/containers/be3291c0e07fa8a1e78b4def2b87310e539532a3892b9fc318df5b593cd8896c/hosts", "LogPath": "/var/lib/docker/containers/be3291c0e07fa8a1e78b4def2b87310e539532a3892b9fc318df5b593cd8896c/be3291c0e07fa8a1e78b4def2b87310e539532a3892b9fc318df5b593cd8896c-json.log", "Name": "/smile", "RestartCount": 0, "Driver": "devicemapper", "Platform": "linux", . . . . |
> 컨테이너를 파일로 출력하기
docker export <컨테이너 이름> > <컨테이너 이름>.tar
[root@localhost ~]# docker export smile > smile_container.tar [root@localhost ~]# ll 합계 251360 -rw-r--r-- 1 root root 173709312 6월 25 14:34 smile_container.tar |