[Docker] CentOS7에 Docker설치 후 시작하기
by Choi HyeSun
실행 환경
-
저번에 깔았던 VM
-
도커는 설치나 실행시 기본적으로 슈퍼유저 권한이 필요한데(root / sudo)
셋팅이 번거로우니까 root로 실행함
단, 블로그에서는 하이라이팅을 위해 (#은 주석처리되서..) $로 표기함
yum(패키지 관리)으로 Docker 설치하기
- yum으로 설치시 필요한 디펜던시도 같이 설치해줘서 편함
$ yum install -y docker
(중략)
Installed:
docker.x86_64 2:1.13.1-103.git7f2769b.el7.centos
Dependency Installed:
PyYAML.x86_64 0:3.10-11.el7
atomic-registries.x86_64 1:1.22.1-29.gitb507039.el7
audit-libs-python.x86_64 0:2.8.5-4.el7
checkpolicy.x86_64 0:2.5-8.el7
container-selinux.noarch 2:2.107-3.el7
container-storage-setup.noarch 0:0.11.0-2.git5eaf76c.el7
containers-common.x86_64 1:0.1.37-3.el7.centos
docker-client.x86_64 2:1.13.1-103.git7f2769b.el7.centos
docker-common.x86_64 2:1.13.1-103.git7f2769b.el7.centos
libcgroup.x86_64 0:0.41-21.el7
libsemanage-python.x86_64 0:2.5-14.el7
libyaml.x86_64 0:0.1.4-11.el7_0
oci-register-machine.x86_64 1:0-6.git2b44233.el7
oci-systemd-hook.x86_64 1:0.2.0-1.git05e6923.el7_6
oci-umount.x86_64 2:2.5-3.el7
policycoreutils-python.x86_64 0:2.5-33.el7
python-IPy.noarch 0:0.75-6.el7
python-backports.x86_64 0:1.0-8.el7
python-backports-ssl_match_hostname.noarch 0:3.5.0.1-1.el7
python-ipaddress.noarch 0:1.0.16-2.el7
python-pytoml.noarch 0:0.1.14-1.git7dea353.el7
python-setuptools.noarch 0:0.9.8-7.el7
setools-libs.x86_64 0:3.3.8-4.el7
subscription-manager-rhsm-certificates.x86_64 0:1.24.13-3.el7.centos
yajl.x86_64 0:2.0.4-4.el7
도커 실행하기
$ sudo systemctl start docker
$ ps -ef | grep docker
root 23419 1 3 12:43 ? 00:00:00 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json --selinux-enabled --log-driver=journald --signature-verification=false --storage-driver overlay2
root 23424 23419 0 12:43 ? 00:00:00 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc --runtime-args --systemd-cgroup=true
도커 이미지 찾기
- 이미지 찾는 명령어
docker search [이미지명]
-
Docker Hub에서도 확인할 수 있음 LINK
-
CentOS 이미지를 찾아보자
$ docker search centos
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/centos The official build of CentOS. 5617 [OK]
docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 124 [OK]
docker.io docker.io/jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos ... 114 [OK]
docker.io docker.io/consol/centos-xfce-vnc Centos container with "headless" VNC sessi... 99 [OK]
docker.io docker.io/centos/mysql-57-centos7 MySQL 5.7 SQL database server 63
docker.io docker.io/imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 57 [OK]
docker.io docker.io/tutum/centos Simple CentOS docker image with SSH access 44
docker.io docker.io/centos/postgresql-96-centos7 PostgreSQL is an advanced Object-Relationa... 39
docker.io docker.io/kinogmt/centos-ssh CentOS with SSH 29 [OK]
docker.io docker.io/centos/php-56-centos7 Platform for building and running PHP 5.6 ... 22
docker.io docker.io/pivotaldata/centos-gpdb-dev CentOS image for GPDB development. Tag nam... 10
docker.io docker.io/nathonfowlie/centos-jre Latest CentOS image with the JRE pre-insta... 8 [OK]
docker.io docker.io/drecom/centos-ruby centos ruby 6 [OK]
docker.io docker.io/centos/tools Docker image that has systems administrati... 4 [OK]
docker.io docker.io/darksheer/centos Base Centos Image -- Updated hourly 3 [OK]
docker.io docker.io/mamohr/centos-java Oracle Java 8 Docker image based on Centos 7 3 [OK]
docker.io docker.io/pivotaldata/centos Base centos, freshened up a little with a ... 3
docker.io docker.io/pivotaldata/centos-gcc-toolchain CentOS with a toolchain, but unaffiliated ... 2
docker.io docker.io/pivotaldata/centos-mingw Using the mingw toolchain to cross-compile... 2
docker.io docker.io/blacklabelops/centos CentOS Base Image! Built and Updates Daily! 1 [OK]
docker.io docker.io/indigo/centos-maven Vanilla CentOS 7 with Oracle Java Developm... 1 [OK]
docker.io docker.io/mcnaughton/centos-base centos base image 1 [OK]
docker.io docker.io/pivotaldata/centos6.8-dev CentosOS 6.8 image for GPDB development 0
docker.io docker.io/pivotaldata/centos7-dev CentosOS 7 image for GPDB development 0
docker.io docker.io/smartentry/centos centos with smartentry 0 [OK]
도커 이미지 Pull (받기)
-
이미지명:태그
-
공식 이미지는 이미지명에 사용자명이 붙지 않음
-
제일 마지막 Update본은 태그 latest
-
-
docker.io/centos의 최신 이미지를 받아보자
- centos:latest
docker pull centos:latest
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centos
729ec3a6ada3: Pull complete
Digest: sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
Status: Downloaded newer image for docker.io/centos:latest
도커 이미지 확인하기
- 명령어 docker images로 pull받아온 이미지들을 확인할 수 있음
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 0f3e07c0138f 2 weeks ago 220 MB
도커 이미지를 컨테이너로 띄우기
-
명령어 docker run으로 가지고 있는 이미지를 컨테이너화 할 수 있음
-
서버를 띄운다는 개념으로 보면 될 것 같음
-
docker run <옵션...> <이미지명> <실행할 파일="">실행할>이미지명>옵션...>
-
-
옵션은 상당히 많기 때문에 나중에 정리할 예정
-
이번에 쓸 옵션
-
-i
: interactive; interactive한 흐름을 만들어줌(출력을 사용자에게 보여줌) -
-t
: Pseudo-tty; TTY(터미널)을 사용자가 이용할 수 있게 해줌 -
--name [name]
: 컨테이너 이름 지정(지정 안할 경우 Docker가 Default 자동 이름 생성함) -
/bin/bash
: 컨테이너 생성 후 /bin/bash를 실행하여 배쉬 쉘을 이용할 수 있게 해줌
-
$ docker run -i -t --name hello centos /bin/bash
### 컨테이너에 접속됨
[root@265fa2e0199e /]$
[root@265fa2e0199e /]$ ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
### 컨테이너에서 빠져나옴
[root@265fa2e0199e /]$ exit
exit
도커 컨테이너 확인
-
명령어 docker ps로 확인
- docker ps <옵션...>옵션...>
-
이번에 쓸 옵션
- ‘-a’ : 정지된 컨테이너까지 모두 확인시켜줌
### 그냥 조회시 보이지 않음
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
### 아까 컨테이너에서 빠져나왔기 때문에 정지된 컨테이너이기 때문
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
265fa2e0199e centos "/bin/bash" 5 minutes ago Exited (0) About a minute ago hello
정지된 컨테이너 다시 띄우기
-
정지된 컨테이너를 다시 띄울 땐 docker start로 띄움
-
docker start <컨테이너명>컨테이너명>
-
docker start <컨테이너ID>컨테이너ID>
-
-
유의) 띄우면 바로 컨테이너로 인입하지 않음
### 컨테이너명으로 띄우던 ID로 띄우던 동일. 택 1
$ docker start hello # 컨테이너명
hello
$ docker start 265fa2e0199e # 컨테이너ID
265fa2e0199e
### 띄워졌는지는 docker ps로 확인
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
265fa2e0199e centos "/bin/bash" 10 minutes ago Up 56 seconds hello
띄워진 컨테이너 재시작하기
-
띄워진 컨테이너를 다시 띄울 땐(재시작) docker restart
-
docker start <컨테이너명>컨테이너명>
-
docker start <컨테이너ID>컨테이너ID>
-
### 컨테이너명으로 재시작하던 ID로 재시작하던 동일. 택 1
$ docker restart hello # 컨테이너명
hello
$ docker restart 265fa2e0199e # 컨테이너ID
265fa2e0199e
### 띄워졌는지는 docker ps로 확인(STATUS 시간 갱신 확인)
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
265fa2e0199e centos "/bin/bash" 12 minutes ago Up 1 second hello
띄워진 컨테이너에 인입(접속)
-
띄워진 컨테이너에 접속하기(처음 만들 때 처럼)
-
docker init <컨테이너명>컨테이너명>
-
docker init <컨테이너ID>컨테이너ID>
-
$ docker attach hello
[root@265fa2e0199e /]$ ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
접속한 컨테이너 정지하지 않고 빠져나오기
-
컨테이너 정지하고 빠져나오기
-
exit
명령어 입력 -
Ctrl
+d
-
### exit 명령어 입력
[root@265fa2e0199e /]$ exit
exit
### Ctrl + d
[root@265fa2e0199e /]# exit
### Docker ps시 컨테이너가 정지됨을 확인할 수 있음
[root@localhost ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-
컨테이너 정지하지 않고 빠져나오기
- 차례로)
Ctrl
+p
,Ctrl
+q
- 차례로)
### Docker ps시 컨테이너가 떠있는 것을 확인할 수 있음
[root@265fa2e0199e /]$ [root@localhost ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
265fa2e0199e centos "/bin/bash" 17 minutes ago Up About a minute hello
컨테이너에 인입하지 않고 명령어 보내기
-
실행중인 컨테이너에 docker exec 사용시, 외부에서 컨테이너 안의 명령을 실행할 수 있음
-
docker exec <컨테이너명> <명령> <매개 변수="">매개>명령>컨테이너명>
-
docker exec <컨테이너ID> <명령> <매개 변수="">매개>명령>컨테이너ID>
-
-
주로 실행된 컨테이너에 yum으로 패키지를 추가 설치하거나, 각종 데몬들을 실행할 때 사용됨
### 현재 서버에서 ls 명령을 보낼 때
$ ls
anaconda-ks.cfg
### 컨테이너에 ls 명령을 보냄 (컨테이너명 이용)
$ docker exec hello ls
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
### 컨테이너에 ls -l 명령을 보냄 (컨테이너ID 이용)
$ docker exec 265fa2e0199e ls -l
total 0
lrwxrwxrwx. 1 root root 7 May 11 00:33 bin -> usr/bin
drwxr-xr-x. 5 root root 360 Oct 16 04:17 dev
drwxr-xr-x. 1 root root 66 Oct 16 04:01 etc
drwxr-xr-x. 2 root root 6 May 11 00:33 home
lrwxrwxrwx. 1 root root 7 May 11 00:33 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 May 11 00:33 lib64 -> usr/lib64
drwx------. 2 root root 6 Sep 27 17:13 lost+found
drwxr-xr-x. 2 root root 6 May 11 00:33 media
drwxr-xr-x. 2 root root 6 May 11 00:33 mnt
drwxr-xr-x. 2 root root 6 May 11 00:33 opt
dr-xr-xr-x. 118 root root 0 Oct 16 04:17 proc
dr-xr-x---. 1 root root 27 Oct 16 04:05 root
drwxr-xr-x. 1 root root 21 Oct 16 04:01 run
lrwxrwxrwx. 1 root root 8 May 11 00:33 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 May 11 00:33 srv
dr-xr-xr-x. 13 root root 0 Oct 15 01:03 sys
drwxrwxrwt. 7 root root 145 Sep 27 17:13 tmp
drwxr-xr-x. 12 root root 144 Sep 27 17:13 usr
drwxr-xr-x. 20 root root 262 Sep 27 17:13 var
컨테이너 정지하기
-
docker stop으로 실행중인 컨테이너 정지
-
인입해서 exit하는 것과 같은 효과
-
docker stop <컨테이너명>컨테이너명>
-
docker stop <컨테이너ID>컨테이너ID>
-
### 컨테이너 떠있는 것 확인
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
265fa2e0199e centos "/bin/bash" 26 minutes ago Up 10 minutes hello
### 컨테이너 정지명령 (아래 명령 둘 동일)
$ docker stop hello # 컨테이너명
hello
$ docker stop 265fa2e0199e # 컨테이너 ID
265fa2e0199e
### 컨테이너 정지
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
265fa2e0199e centos "/bin/bash" 27 minutes ago Exited (0) About a minute ago hello
생성된 컨테이너 삭제
-
생성된 컨테이너를 삭제
-
docker rm <컨테이너명>컨테이너명>
-
docker rm <컨테이너ID>컨테이너ID>
-
-
단, 컨테이너는 정지된 상태여야 함
### 정지된 컨테이너 확인
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
265fa2e0199e centos "/bin/bash" 32 minutes ago Exited (0) 6 minutes ago hello
### 정지된 컨테이너 삭제 (아래 명령 둘 동일)
$ docker rm hello
hello
$ docker rm 265fa2e0199e
265fa2e0199e
### 삭제 확인
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
### 만약 컨테이너가 정지된 상태가 아니었다면?(다시 띄워보고 테스트) - 에러 발생
$ docker run -it --name hello centos
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da3bfea15220 centos "/bin/bash" 8 seconds ago Up 7 seconds hello
$ docker rm hello
Error response from daemon: You cannot remove a running container da3bfea15220622e49e0907b8e22102b77b54d622fd5b32049f0a6df031f9972. Stop the container before attempting removal or use -f
생성된 이미지 삭제
-
생성된(혹은 다운(pull)받았던) 이미지 삭제
-
docker rmi <이미지명>:<태그> → 이미지명 & 태그가 모두 일치하는 이미지가 삭제태그>이미지명>
-
docker rmi <이미지명> → 이미지명이 동일한 모든 이미지가 삭제(태그 구분 X)이미지명>
latest 버전만 삭제되는 것 같기도 함
-
-
단, 이미지를 통해 생성된 컨테이너가 모두 없어야 함
### 컨테이너 없음 확인
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
### 이미지 확인
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 0f3e07c0138f 2 weeks ago 220 MB
### 이미지명과 태그를 조합하여 삭제
$ docker rmi centos:latest
Untagged: centos:latest
Untagged: docker.io/centos@sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
Deleted: sha256:0f3e07c0138fbe05abcb7a9cc7d63d9bd4c980c3f61fea5efa32e7c4217ef4da
Deleted: sha256:9e607bb861a7d58bece26dd2c02874beedd6a097c1b6eca5255d5eb0d2236983
### 이미지 확인
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
### 만약에 컨테이너가 존재한다면(정지여부 상관 없음)? - 에러 발생
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da3bfea15220 centos "/bin/bash" 8 seconds ago Up 7 seconds hello
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da3bfea15220 centos "/bin/bash" About a minute ago Exited (0) 19 seconds ago hello
$ docker rmi centos
Error response from daemon: conflict: unable to remove repository reference "centos" (must force) - container da3bfea15220 is using its referenced image 0f3e07c0138f
이미지 생성은 다음 시간에 :)
Subscribe via RSS