# 도커 엔진 버전 확인
docker -v
# 컨테이너 생성 및 실행
# -i -t 옵션은 컨테이너와 상호(interactive) 입출력을 가능하게 함
# 도커 엔진에 이미지가 존재하지 않으면 중앙 이미지 저장소인 도커 허브에서 자동으로 이미지를 내려받음
docker run -i -t ubuntu:14.04
# 컨테이너를 정지하고 컨테이너에서 빠져나오기
exit
# 이미지 내려받기
docker pull centos:7
# 도커 엔진에 존재하는 이미지 목록 출력
docker images
# 컨테이너 생성만(컨테이너 내부로 들어가지 않음)
# --name 옵션은 컨테이너 이름 설정
docker create -i -t --name mycentos centos:7
# 컨테이너 시작
docker start mycentos
# 컨테이너 내부로 들어가기
docker attach mycentos
# 정지되지 않은 컨테이너 출력
docker ps
# 정지된 컨테이너 포함해서 출력
docker ps -a
# 컨테이너 정보 확인 | grep sth(특정 문자열 찾기)
docker inspect mycentos | grep Id
docker ps 명령어의 출력은 각각 다음과 같다.
# 컨테이너 정지
docker stop mycentos
# 컨테이너 삭제 (실행중이면 에러 발생)
docker rm mycentos
# 컨테이너 강제 삭제 (실행중이어도 삭제됨)
docker rm -f mycentos
# 모든 컨테이너 삭제 (정지된 컨테이너만)
docker container prune
# 모든 컨테이너 정지
docker stop $(docker ps -a -q)
# 모든 컨테이너 삭제
docker rm $(docker ps -a -q)
# mywebserver라는 이름으로 컨테이너 생성
# 3306 포트와 192.168.0.100 주소의 7777 포트를 외부에 개방
docker run -i -t --name mywebserver -p 3306:3306 -p 192.168.0.100:7777:80 ubuntu:14.04
# 컨테이너 내부에 아파치 웹 서버 설치
apt-get update
apt-get install apache2 -y
service apache2 start
cf. -p 옵션의 값으로 80:81과 같이 입력한 경우, 외부에서 접근하는 컨테이너의 포트는 81번인데, 웹서비스 포트는 80번이므로 외부에서 웹서버에 접근할 수 없음
# mysql 이미지로 데이터베이스 컨테이너 생성
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 # wordpressdb의 IP를 몰라도 mysql이라는 호스트명으로 접근 가능
-p 80
wordpress
# 호스트와 바인딩된 포트 확인
docker port wordpress
# 호스트의 활용 가능한 모든 네트워크 인터페이스 32769번 포트에 바인딩함
80/tcp -> 0.0.0.0:32769
- 백그라운드에서 동작하는 애플리케이션에서 실행하도록 설정
- 컨테이너 내부에서 프로그램이 터미널을 차지하는 포그라운드(foreground)로 실행
- 사용자의 입력을 받지 않음
- 반드시 컨테이너에서 프로그램이 실행되어야 함
- 포그라운드 프로그램이 실행되지 않으면 컨테이너는 종료됨
비밀번호와 같이 민감한 정보는 도커 스웜 모드의 secret이나 쿠버네티스의 secret 기능을 활용하는 것이 좋다
입력된 컨테이너가 실행중이지 않거나 존재하지 않는다면 이 옵션을 적용한 컨테이너도 실행할 수 없음
현재 deprecated된 옵션이며 추후 삭제될 수 있음
도커 브리지 네트워크를 사용하면 --link 옵션과 동일한 기능을 더욱 손쉽게 사용할 수 있음
위 예시에서 mysql은 하나의 터미널을 차지하는 mysqld를, 워드프레스는 하나의 터미널을 차지하는 apache2-foreground를 실행하므로 -d 옵션을 지정해 백그라운드로 설정함
mysql 이미지는 컨테이너가 시작될 때 mysqld가 동작하도록 설정돼 있으므로 -i -t 옵션으로 생성하더라도 상호 입출력이 불가능하고 프로그램이 포그라운드 모드로 동작하는 것만 지켜볼 수 있음