[docker]컨테이너 다루기

코드깎는 노인·2021년 7월 28일
1
post-thumbnail

컨테이너

컨테이너는 이미지를 읽기전용으로 사용하고 변경된 사항만 컨테이너 계층에 저장하여 원래이미지는 영향을 받지 않는다.각 컨테이너는 독립된 파일시스템으로 격리되어 있다.

컨테이너 생성

docker run -it ubuntu:14.04
-i(interative)는 컨테이너와 상호입출력을 -t는 tty를 활성화하여 bash shell을 활성화한다.
exit
컨테이너를 종료하고 컨테이너 빠져나오기
ctrl+P,Q
컨테이너를 유지하고 컨테이너 빠져나오기
docker pull ubuntu:14.04
도커 허브에서 이미지다운로드
docker images
도커엔진에 존재하는 이미지리스트 출력
docker create -it --name myContainer ubuntu:14.04
컨테이너 생성하기
docker start myContainer
컨테이너 진입없이 실행하기
docker attach myContainer
컨테이너 실행및 진입하기
docker ps
실행중인 컨테이너 리스트
docker ps -a
모든 컨테이너 리스트
docker run -it ubuntu:14.04 echo hello
우분투 이미지내 실행명령어로 bin/bash가 내장되있지만 echo hello로 덮어쓰기되어
상호입출력 불가상태
docker rename beforeName afterName
컨테이너이름 변경
docker container inspect mycontainer
컨테이너 정보 출력

컨테이너 삭제

docker stop (containerName || containerId)
컨테이너 중단
docker rm (containerName || containerId)
컨테이너 삭제
docker stop (containerName || containerId) -f
컨테이너 중단없이 삭제
docker container prune
중단된 컨테이너 삭제
docker ps -aq
-a는 모든 컨테이너 -q는 컨테이너 ID만 출력
docker stop $(docker ps -aq)
모든 컨테이너 중단

컨테이너 호스트와 연결

컨테이너는 가상의 IP주소를 할당받는데 172.17.0.x를 순차적으로 할당한다.ifconfig로 확인가능하다.
docker run -it --name webserver -p 80:80 ubuntu:14.04
-p는 호스트포트:컨테이너포트 연결
docker run -it -p 3306:3306 -p 192.168.0.100:7777:80
포트 여러개 연결 및 호스트 특정 IP연결
docker port webserver
포트만 확인

어플리케이션 구축

docker run -d \
--name wordpressdb \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
mysql:5.7
docker run -d \
--name testContainer \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=password \
--name wordpress \
--link wordpressdb:mysql \
-p 80 \
wordpress

호스트포트를 입력하지 않을경우 임의의 호스트포트가 컨테이너 80포트와 연결된다.docker ps로 확인가능하다.
-d는 detached모드(daemon)로 실행하여 백그라운드동작으로 실행한다.
프로그램이 터미널을 차지한 포그라운드로 실행되어 사용자의 입력을 받지 않는다.-d옵션에서 프로그램이 포그라운드로 실행되지 않으면 종료된다.mysql과 wordpress이미지는 터미널을 차지하여 실행되어 -d로 실행한다.mysql을 -it로 실행가능하지만 터미널 로그만 찍힐뿐 입력이 되지 않아 -d로 실행한다.-e는 환경변수옵션이다.
--link는 다른컨테이너 접근시 할당된 내부아이피로 접근하는 경우 재시작시 아이피가 바뀌므로 컨테이너이름으로 접근한다.--link wordpressdb:mysql은 wordpressdb의 alias가 mysql이라는 의미이다.link로 연결된 컨테이너가 실행중이지 않다면 컨테이너가 실행되지 않는다.link는 depcrecated되었으며 도커 bridge로 대체되었다.

docker exec wordpress curl mysql:3306 --silent
wordpress컨테이너에서 mysql로 wordpressdb접근

docker exec -it wordpressdb /bin/bash
-d로 실행할경우 attach명령어가 실행되지 않지만 exec로 내부 쉘을 사용할 수 있다.
docker exec wordptressdb ls /
-it를 사용하지 않을경우 명령에 대한 출력만 볼 수 있다.

도커볼륨

볼륨공유

도커 컨테이너에 데이터를 저장하면 컨테이너가 삭제될때 데이터도 같이 삭제되어 위험하다.따라서 컨테이너 데이터를 호스트에 저장할 수 있는 도커볼륨을 사용한다.

docker run -d \
--name wordpressdb \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
mysql:5.7
-v /home/wordpress_db:/var/lib/mysql \

-v옵션은 호스트디렉토리:컨테이너디렉토리 형식이다.호스트의 데이터를 컨테이너로 복사하므로 기존에 컨테이너디렉토리에 데이터가 존재한다면 호스트디렉토리데이터로 덮어쓰기된다.

볼륨컨테이너

docker run -it \
--name volumes_from_container \
--volumes-from volume_overide \
ubuntu:14.04

volume_overide라는 -v가 적용된 컨테이너와 볼륨을 공유한다.

도커 볼륨

docker volume create --name myvolume
도커 볼륨생성
docker volume ls
도커 볼륨리스트
docker run -it --name myvolume \ -v myvolume:/root \ ubuntu:14.04
생성한 볼륨과 컨테이너 연결
docker inspect --type volume myvolume
docker volume inspect myvolume
생성한 볼륨의 마운트포인트 정보 출력
docker run -it --name myvolume \ -v /root \ ubuntu:14.04
컨테이너 경로만 설정할경우 볼륨자동생성
docker container inspect myContainer
볼륨마운트 상세정보 출력
docker volume prune
사용되지 않는 볼륨 삭제

profile
내가 볼려고 만든 블로그

0개의 댓글