inspect 를 사용하면 상세 정보를 확인 가능하다
저장소 다이제스트 값을 사용하면 똑같은 이미지를 사용할 수 있다
- 위 명령은 nginx daemon 을 시작시키는 명령어이다
- 이미지를 수정 및 추가하여, 다시 도커 허브에 push 할 때, 만약 전체를 다 저장하면 도커 허브의 용량에 문제가 생긴다
- 최초 이미지를 base 로 하여, 추가되는 내용만 저장한다. 이는 적은 용량이므로 이미지를 수정 및 추가하여도, 용량 문제가 없다. 이러한 추가되는 내용은 layer 형태로 쌓이게 된다. 위의 layers 를 확인하면, 여러 추가된 내용들이 layer 형태로 쌓여있는 것을 확인할 수 있다
docker ps = docker container ls
i : 대화식 모드 열기
t : 단말 디바이스 제공 ( 마치 ssh 연결하는 것과 같은 기능 ) . it 옵션은 함께 사용하는 경우가 많다
d : 생성된 컨테이너를 백그라운드에서 동작시킨다. 주로, 데이터 베이스나 웹 서버와 같이 생성된 컨테이너로 관리자가 즉시 진입할 필요가 없는 경우에 많이 사용한다
name : 생성된 컨테이너는 기본적으로 id 를 부여받고, 이중 12자리를 이용하여 관리할 수 있다. 하지만, 간단히 이름을 이용하여 관리하고자 하는 경우에는 --name 을 이용하여 컨테이너의 이름을 부여할 수 있다. 단, rename 을 이용하여 나중에 변경할 수도 있다
- 단, 동시에 다수의 컨테이너 ( 동일한 기능을 수행하는 ) 를 생성하는 경우에는 이름을 지정하는 것이 불필요한 작업이다. 만약, 이름을 부여하지 않으면, 자동으로 임의의 이름이 부여된다
hostname : 컨테이너 내에서 사용하는 컨테이너의 호스트 이름. 이 역시 지정하지 않으면, 자동으로 ID 값이 호스트 이름으로 사용된다
rm : 삭제
env : 컨테이너 내에서 사용할 시스템 환경 변수를 지정할 수 있다
v ( --volume ) : 볼륨 mount 하는 옵션. 호스트의 특정 디렉터리와 컨테이너의 특정 디렉터리를 마운트할 때 사용하거나, 별도의 볼륨을 만들어서 연결하는 방식으로도 사용된다
- 디렉터리 마운트 방법은 파일을 영구적으로 저장할 수 없다. 새 host 에서 컨테이너가 시작됬을때 이전에 다른 host에 저장된 파일을 불러올 수 없기 때문이다
- 외부 Storage Volume 과 mount 하면 영구적인 파일 저장이 가능해진다. 이를 위해선 iscsi 방식을 사용 해야 한다
일반적으로 둘을 구분할 때 아래와 같이 작성한다
- 디렉터리 마운트 : /home/rapa:/home/root
- Volume 마운트 : myvolume:/root
- 위의 Volume 은 클라우드에서 매우 중요하다. 이는 후에 쿠버네티스에서 나오는 PV / PVC 와 연관되있다
p : Host 의 특정 포트와 컨테이너의 특정 포트를 매핑할 때 사용한다 ( 주로 사용한다 )
P : 컨테이너에서 노출한 특정 포트를 Host 의 임의의 포트와 자동 매핑해준다
link : 두 개 이상의 컨테이너를 연결하는 방법
- 도커에는 자체 dns 가 있어서, 이름을 이용한 링킹이 가능하다. 주로, 외부에 노출되지 않은 데이터 베이스와 같은 경우 웹 컨테이너와 연결할 때 사용한다
- 서버를 준비 - os 를 설치 -> mysql 을 설치 ( bare metal 방식 )
- aws 에 접속 - rds 서비스 신청 ( os 는 Amazon linux 로 제공되지만, os 로의 접근은 되지 않는다 ) -> 이렇게 애플리케이션의 설치 과정 없이, 신청 즉시 해당 애플리케이션으로 접속할 수 있는 서비스를 완전 관리형 서비스 하고 한다
- 도커를 이용하여 신청한다. 즉시 제공된다. 만약, 모든 개발자들이 동일 버전의 개발 환경이 필요하다면, 컨테이너를 이용한 개발이 유용하다
mysql 5.7 버전 이미지를 pull 하자
https://hub.docker.com/_/mysql 에 접속하여 mysql 의 offical image 의 문서를 확인하자. 여기서 Environment Variables ( 환경 변수 ) 키워드를 확인하자
외부로 열려있는 포트 번호를 확인하자
docker container run -d --name mydb -p 33061:3306 -e MYSQL_ROOT_PASSWORD=test123 -e MYSQL_DATABASE=testdb mysql:5.7
docker container run -d --name mydb -p 33061:3306 -e MYSQL_ROOT_PASSWORD=test123 -e MYSQL_DATABASE=testdb -v /home/rapa/mydb:/var/lib/mysql --restart=always mysql:5.7
위와 같이 v 옵션과 restart 옵션을 추가해주자
생성 후 Host 에 /home/rapa/mydb 디렉터리가 생성된 것을 확인 가능하며, 이 디렉터리는 mysql 컨테이너와 mount 되었다. 이제 DB 에 추가되는 사항들은 이 디렉터리에 저장된다
testdb 관련 Data 는 위에 저장된다
docker container run -d --name wpdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress --restart=always mysql:5.7
docker container run -d -e WORDPRESS_DB_PASSWORD=password \
> --name wordpress --link wpdb:mysql -p 80:80 wordpress
- wpdb:mysql 은 wpdb 의 별칭을 지정해준 것으로, wpdb 를 mysql 이라고 불러도 되게 alias 해준 것 이다
docker container run -d -e WORDPRESS_DB_PASSWORD=password -e WORDPRESS_DB_NAME=wordpress -e WORDPRESS_DB_USER=root --name wordpress --link wpdb:mysql -p 80:80 wordpress