리눅스 컨테이너
에 여러 기능을 추가함으로써 좀 더 쉽게 사용할 수 있게 만들어진 가상화 컨테이너 오픈소스 프로젝트
. 기존에 쓰이던 하이퍼바이져, VirtualBox, VmWare대비하여 이미지의 용량이 작고
, 배포시간이 빠르며
, 가상환경의 성능 손실
이 거의 없다.
하이퍼바이저
를 이용하여 여러 개의 운영체제를(각 리눅스, 우분투 등 각 운영체제가 하나의 가상머신) 하나의 호스트에서 생성하여 사용하는 방식.
하이퍼바이저에 의하여 생성되고 관리되는 운영체제를 Geust OS
라고 하고, VmWare, VirtualBox
등이 있다.
하이퍼바이져
를 사용하지 않고, chroot, namespace, cgroup
을 사용함으로써 프로세스 단위의 격리 환경
을 만들기 때문에 성능 손설이 거의 없다.
버젼확인
> docker -v
Docker version 20.10.16, build aa7e414
컨테이너 실행
> docker run -i -t ubuntu:14.04
root@a2e26bed26c2:/#
root@b561878054fd:/# exit
exit
이미지 다운 받기
> docker pull centos:7
7: Pulling from library/centos
6717b8ec66cd: Pull complete
Digest: sha256:c73f515d06b0fa07bb18d8202035e739a494ce760aa73129f60f4bf2bd22b407
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
도커엔진에 존재하는 이미지 확인
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 c9a1fdca3387 4 months ago 301MB
ubuntu 14.04 7304c635fe52 8 months ago 187MB
도커 이미지 실행 (컨테이너생성)
> docker create --name MyCentos7 centos:7
a8da55ff3bbeb66864c42d9b134a0f857f85de158ec3d557c1a92bea74ba1965
> docker start MyCentos7
MyCentos7
> docker attach MyCentos7
[root@a8da55ff3bbe /]#
컨테이너 목록 확인하기
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8da55ff3bbe centos:7 "/bin/bash" 6 minutes ago Up 3 seconds MyCentos7
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
413b72a0fb0e centos:7 "/bin/bash" 3 minutes ago Created MyCentos8
a8da55ff3bbe centos:7 "/bin/bash" 9 minutes ago Up 2 minutes MyCentos7
b561878054fd ubuntu:14.04 "/bin/bash" 31 minutes ago Exited (0) 31 minutes ago sharp_almeida
a2e26bed26c2 ubuntu:14.04 "/bin/bash" 33 minutes ago Exited (0) 33 minutes ago priceless_merkle
# docker run -i -t centos:7 echo hello world!
명령어를 통해 컨테이너를 수행하는 경우 이미지에 내장된 기본 커맨드 bin/bash
를 덮어쓰기 때문에 hello world!
만 출력되고 종료.컨테이너 이름변경
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8da55ff3bbe centos:7 "/bin/bash" 14 minutes ago Up 8 minutes MyCentos7
> docker rename MyCentos7 HelloCentos7
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8da55ff3bbe centos:7 "/bin/bash" 15 minutes ago Up 8 minutes HelloCentos7
컨테이너 삭제
일반적으로 정지 후 삭제
> docker stop HelloCentos7
> docker rm HelloCentos7
강제 삭제시 -f 옵션
> docker rm -f HelloCentos7
모든 컨테이너 삭제 prune
> docker container prune
도커 컨테이너는 호스트의 포트와 컨테이너 포트를 바인딩하여 외부로 노출시킨다.
-p {호스트포트}:{컨테이너포트}
옵션docker run -i -t --name mywebserver -p 80:80 ubuntu:14.04
MYSQL DB 컨테이너
docker run -d \ # -d 옵션은 detached 모드로 백그라운드에서 컨테이너 실행 --name mysqldb \ -e MYSQL_ROOT_PASSWORD=1234 \ -e MYSQL_DATABASE=wordpress \ mysql:5.7
WORDPRESS 컨테이너
docker run -d \ --name wordpress \ -e WORDPRESS_DB_HOST=mysql \ -e WORDPRESS_DB_USER=root \ -e WORDPRESS_DB_PASSWORD=1234 \ --name wordpress \ --link mysqldb:mysql \ #mysql 컨테이너 이름과 연결 -p 80 \ wordpress