위키북스 도커/쿠버네티스 책을 공부하면서 작성한 글입니다.
도커 엔진에서 사용하는 기본 단위는 이미지와 컨테이너
이미지는 컨테이너를 생성할 때 필요한 요소입니다. 도커에서 사용하는 이미지의 이름은 기본적으로 [저장소 이름]/[이미지이름]:[태그]의 형태로 구성됩니다.
alicer106/ubuntu:14.04
docker run -i -t ubuntu:14.04
docker run 명령어는 컨테이너를 생성하고 실행하는 역할을 합니다 ubuntu14.04는 컨테이너를 생성하기 위한 이미지의 이름이며, -i -t 옵션은 컨테이너와 상호 입출력을 가능하게 합니다.
컨테이너 내부에서 빠져나오는 방법(컨테이너 정지)
컨테이너 내부에서 빠져나오는 방법(컨테이너 정지하지 않고)
docker pull centos:7
centos7 이미지를 내려 받습니다.
docker images
이미지 목록을 출력합니다.
docker create -i -t --name centos7_2 centos:7
run 명령어가 아닌 create명령어를 사용할 수도 있습니다. 다음 명령얼르 입력해 centos:7 이미지로 컨테이너를 생성합니다. run 명령어와 달리 컨테이너 내부로 들어가지 않습니다.
$ docker start centos7_2
centos7_2
$ docker attach centos7_2
[root@fae7dcc61868 /]#
docker start 명령어와 docker attach 명령어를 사용하여 컨테이너를 시작하고 내부로 들어갑니다.
run 명령어
docker pull -> docker create -> docker start -> docker attach
create 명령어
docker pull -> docker create
docker ps
docker ps 명령어는 정지되지 않는 컨테이너만 출력합니다. 정지된 컨테이너를 포함한 모든 컨테이너를 출력하려면 -a 옵션을 추가합니다.
docker ps -a
docker rm name
docker run -i -t --name network_test ubuntu:14.04
root@7aa62fd27e29:/# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:03
inet addr:172.17.0.3 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:516 (516.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
아무런 설정을 하지 않았다면 이 컨테이너는 외부에서 접근할 수 없습니다. 외부 노출되게 웹서버 컨테이너를 생성합니다.
docker run -i -t --name mywebserver -p 80:80 ubuntu:14.04
데이터베이스와 웹 서버 컨테이너를 구분하는 편이 도커 이미지를 관리하고 컴포넌트의 독립성을 유지하기가 쉽습니다. 이 같은 구조는 여러 도커 커뮤니티뿐 아니라 도커 공식 홈페이지에서 권장하는 구조입니다.
데이터베이스와 워드프레스 웹 서버 컨테이너를 연동ㅎ 워드프레스 기반 블로그 서비스를 만들어 봅시다.
데이터베이스 컨테이너 생성
docker run -d --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress mysql:5.7
워드프레스 웹 서버 컨테이너 생성
docker run -d -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=password --name wordpress --link wordpressdb:mysql -p 80 wordpress
데이터베이스와 웹서버 컨테이너가 생성되었으면 잘 되는지 워드프레스 웹사이트 접속합니다.
http://127.0.0.1:63756/
run -d 옵션
docker run -d --name detach_teat ubuntu:14.04
-d 옵션으로 실행하면 입출력이 없는 상태로 컨테이너를 실행합니다. 컨테이너 내부에서 프로그램이 터미널을 차지하는 포그라운드로 실행되 사용자의 입력을 받지 않습니다. 컨테이너 내부에서 프로그램을 시행하지 않는 채로 -d 옵션을 사용하면 컨테이너는 시작되지 않습니다
run -e 옵션
컨테이너 내부의 환경변수 설정
docker exec -i -t wordpressdb /bin/bash
echo $MYSQL_ROOT_PASSWORD
password
exec 명령어를 사용하면 컨테이너 내부에서 명령어를 실행 한뒤 그 결과값을 받을수 있습니다.
run --link 옵션
내부 ip를 알 필요 없이 항상 컨테이너에 별명으로 접근하도록 설정합니다.
첫 번째로 호스트와 볼륨을 공유함으로써 데이터베이스 컨테이너를 삭제해도 데이터는 삭제되지 않도록 설정해봅시다.
docker run -d --name wordpressdb_hostvolume -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -v /Users/docker/wordpress_db:/var/lib/mysql mysql:5.7
/Users/docker/wordpress_db 는 로컬 디렉토리 경로입니다. 로컬개발환경에 맞게 다른경로 사용가능합니다.
docker rm -f wordpressdb_hostvolume
컨테이너를 생성해도 로컬에 있는 /Users/docker/wordpress_db 그대로 남아 있습니다.
볼륨을 사용하는 두 번째 방법은 -v 옵션으로 볼륨을 사용하는 컨테이너를 다른 컨테이너와 공유하는 것입니다. 컨테이너를 생성할 때, --volumnes-from 옵션을 설정하면 -v 또는 --volume 옵션을 적용한 컨테이너의 볼륨 디렉터리를 공유할 수 있습니다.
docker run -i -t --name volume_overide -v /Users/docker/wordpress_db:/home/testdir_2 alicek106/volume_test
docker run -i -t --name volumes_from_container --volumes-from volume_overide ubuntu:14.04
볼륨을 활용하는 세 번재 방법은 docker volume 명령어를 사요하는 것입니다.
볼륨을 다루는 명령어는 docker volume으로 시작하며 docker volume create 명령어로 볼륨을 생성합니다.
docker volume create --name myvolume
도커 볼륨을 조회합니다.
docker volume ls
위에서 생성한 myvolume 를 사용하는 컨테이너를 생성합니다.
[볼륨의 이름]:[컨테이너의 공유 디렉토리]
docker run -i -t --name myvolume_1 -v myvolume:/root/ ubuntu:14.04
컨테이너에서 공유할 디렉터리의 위치를 -v 옵션에 입력하면 해당 디렉터리에 대한 볼륨을 자동으로 생성합니다.
docker run -i -t --name volume_auto -v /root ubuntu:14.04
docker network ls
도커에서 기본적으로 쓸 수 있는 네트워크 확인
docker network create --driver bridge mybridge
브리지 타입의 mybridge 네트워크 생성
docker run -i -t --name mynetwork_container --net mybridge ubuntu:14.04
root@7b986d32898b:/# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:12:00:02
inet addr:172.18.0.2 Bcast:172.18.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1392 (1.3 KB) TX bytes:0 (0.0 B)
호스트의 네트워크 인터페이스 카드를 가상화해 물리 네트워크 환경을 컨테이너에게 동일하게 제공합니다.
도커는 컨테이너의 표준출력과 에러 로그를 별도의 메타데이터 파일로 저장하며 이를 확인하는 명령어를 제공합니다.
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=1234 mysql:5.7
docker logs mysql
docker logs --tail 2 mysql
docker logs --since 144432123122 mysql
유닉스 시간을 입력해 특정 시간 이후의 로그를 확인할 수 있습니다.
기본적으로 컨테이너 로그는 json형태로 도커 내부에 저장됩니다.