<시작하세요! 도커/쿠버네티스> 책을 보며 공부한 자료 정리하여 게시하고 있습니다.
책 내용의 100프로를 다 공부하지도 않고, 모든 내용을 다 올리지는 않으니 더 많은 자료는 책을 참고하시길 바랍니다..
1. 도커 Run 명령어
$ docker run -i -t ubuntu:14.04
docker run 명령어를 입력하면 해당 이미지(ubuntu:14.04) 를 받아 컨테이너를 생성하고 실행하는 역할
이후 자동으로 이미지 내부로 들어가 게된다.
-i -t 옵션은 컨테이너와 상호 입출력을 가능하게 함 (interactive)
---> -t 옵션으로 상호 입출력, -t 옵션으로 tty를 활상화하여 배시 셸 사용
이미지 내부에서 다시 밖으로 나가기 위해선
exit
를 입력해준다.
2. 내려받은 이미지 확인
root@k8s-node1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 daff57b7d2d1 8 weeks ago 430MB
wordpress latest a11fafff58cd 8 weeks ago 609MB
jennifer latest a6b7c5b874f8 2 months ago 195MB
docker images 로 이미지를 local 에 받은 이미지 리스트를 확인할 수 있다.
3. docker create, run 차이
docker run 명령어는 아래의 절차를 수행한다.
1) docker pull (이미지 없을 때 인터넷에서 이미지 다운로드)
2) docker create (이미지로 컨테이너 생성)
3) docker start (컨테이너 시작)
4) docker attach (해당 컨테이너로 접근 -i -t 옵션을 사용했을 때)
반면 docker create 명령어는 위 항목 중 2번까지만 수행한다. 대개 생성함과 동시에 시작하는 편이 많으므로 run 을 많이 쓰게 될 것이다.
4. 컨테이너 삭제
# docker ps -a
(현재 어떤 컨테이너가 떠있는지 확인)
# docker stop ${CONTAINER ID 혹은 NAMES}
(삭제 전 컨테이너 우선 종료)
# docker rm ${CONTAINER ID 혹은 NAMES}
(rm 명령어로 컨테이너 삭제)
# docker images
(어떤 이미지들이 받아져있는지 확인)
# docker rmi ${IMAGE_ID}
(rmi 명령어로 이미지 삭제 가능)
만약 모든 컨테이너를 한번에 내리고 지우고 싶다면 다음 명령어를 입력 하면 된다
(실제 운영 환경에서 사용해서는 안되며, 개인테스트 공간에서 사용 권장)
# docker stop $(docker ps -a -q)
# docker rm $(docker ps -a -q)
$(docker ps -a -q) 를 인자로 받아서 실행되며, -q 옵션은 CONTAINER_ID 값만 출력시켜주는 옵션이다.
또는
root@k8s-node1:~# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
prune 명령어를 이용해 컨테이너를 다 삭제할 수 있다.
5. 컨테이너 생성시 네트워크 설정
컨테이너를 생성하면 도커가 설치된 host PC에서만 접근이 가능하다. 외부에서도 접근이 가능하게 하려면 외부 포트와 바인딩을 시켜주어야 한다.
# docker run -i -t -p 7001:7001 -p 192.168.100.37:7900:80 ubuntu:14.04
-p 옵션을 이용해 [host PC Port] : [Container Port] 바인딩을 할 수 있다.
-p 옵션을 여러개 적용하면 동시에 여러 포트를 바인딩 할 수 있다.
위의경우 호스트(192.168.100.37)의 7001 번으로 접근하면 내부 도커 컨테이너의 7001번 포트랑 바인딩 되어 컨테이너 내부로 접근이 가능해진다.
6. 볼륨 공유
컨테이너의 데이터를 다른 컨테이너 또는 호스트와 공유할 때 사용한다.
호스트와 볼륨을 공유할 수 있고, 아예 볼륨용 컨테이너를 생성할 수도 있고 도커가 관리해주는 볼륨을 생성할 수도 있다.
1) 호스트와 볼륨 공유
root@k8s-node1:/home# echo test1 > test
root@k8s-node1:/home# echo test2 > test2
root@k8s-node1:/home# docker run -i -t --name host_volume -v /home/test:/test -v /home/test2:/test2 ubuntu:14.04
(컨테이너 안으로 진입됨)
root@e519257a2b13:/# pwd
/
root@e519257a2b13:/# cat test && cat test2
test1
test2
root@e519257a2b13:/#
-v [host]:[container] 로 볼륨매핑을 할 수 있다.
완전히 같은 파일(또는 디렉토리매핑시 디렉토리)로 볼 수 있다.
--name 옵션은 해당 컨테이너 이름을 설정하는 옵션 (docker ps 에서 name 을 확인할 수 있다)
2) 볼륨 컨테이너로 공유
root@k8s-node1:/home# docker run -i -t --name volumeContainer -v /home/test:/test ubuntu:14.0
root@61d8b44e7865:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test tmp usr var
(test 파일이 잘 공유[볼륨매핑]되었는지 확인)
root@61d8b44e7865:/# exit
exit
root@k8s-node1:/home# docker run -i -t --name fromVolumeContainer --volumes-from volumeContainer ubuntu:14.04
root@eab5d2510af8:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test tmp usr var
(새로 만든 컨테이너에 volumes-from 옵션으로 test파일이 잘 공유되었는지 확인)
위에서 만든 test 파일을 이용하였다.
--volumes-from 옵션으로 -v 옵션을 그대로 따와 적용할수 있다.
3) 도커 볼륨 활용
root@k8s-node1:/home# docker volume create --name myvolume
myvolume
root@k8s-node1:/home# docker volume ls
DRIVER VOLUME NAME
local myvolume
docker volume create 를 이용하여 도커 볼륨 생성
root@k8s-node1:/home# docker run -i -t --name myvolumeTest -v myvolume:/root/ ubuntu:14.04
root@0ef80610c8bc:/# echo myVoluem TEST >> /root/volumeTEST
root@0ef80610c8bc:/# cat /root/volumeTEST
myVolume TEST
root@0ef80610c8bc:/# exit
exit
생성한 myvolume(도커 볼륨)을 이용하여 컨테이너 생성 후
공유한 폴더(/root) 아래에 파일 생성해봄.
root@k8s-node1:/home# docker inspect myvolume
[
{
"CreatedAt": "2022-10-20T11:09:54+09:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/myvolume/_data",
"Name": "myvolume",
"Options": {},
"Scope": "local"
}
]
root@k8s-node1:/home# ls /var/lib/docker/volumes/myvolume/_data/
volumeTEST
root@k8s-node1:/home# echo volumeHost TEST >> /var/lib/docker/volumes/myvolume/_data/volumeHostTEST
docker inspect (자세한 정보 출력하는 명령어) 로 도커 볼륨에 자세한 정보 출력
mountpoint 를 확인하여 해당 위치에 위에서 생성한 파일이 있나 확인
host 에서도 파일을 하나 생성해봄
root@k8s-node1:/home# docker run -i -t --name myvolumeCheck -v myvolume:/root/ ubuntu:14.04
root@4e6eec2ace1a:/# ls /root/
volumeHostTEST volumeTEST
root@4e6eec2ace1a:/# cat /root/volumeHostTEST && cat /root/volumeTEST
volumeHost TEST
myVolume TEST
새로운 컨테이너 myvolumeCheck 를 만들어 myvolume 도커볼륨이 잘 공유되는지 확인해본다.
* -v 옵션을 이용해 볼륨을 만들면 자동으로 docker volume create 가 수행되어 볼륨이 만들어진다.
3번의 경우 따로 볼륨의 이름을 지정해 관리를 더 수월하게 할 수 있다.
사용하지 않는 볼륨을 지우려면
# docker volume rm ${볼륨이름}
# docker volume prune
(사용되지 않는 볼륨들 전부 삭제)
볼륨을 사용하여 컨테이너가 아닌 외부에 데이터를 저장하고 컨테이너는 그 데이터로 동작하게 설계한 것을 stateless 하다고 하며, 컨테이너가 데이터까지 저앟가오 시는 경우는 stateful 하다고 한다.
stateful 한 컨테이너는 지양하는 것이 좋다.
'IT 공부 > PaaS' 카테고리의 다른 글
[Docker] 도커 이미지 관리 (0) | 2022.10.26 |
---|---|
[Docker] Log 확인 및 컨테이너 자원 할당 (0) | 2022.10.25 |
[Docker] 도커 네트워크 기본 (1) | 2022.10.25 |
[Docker] 도커 설치 및 기본 정리용 (0) | 2022.02.22 |
[Docker] 도커 설치하기 - 1 (0) | 2021.09.02 |