Docker 스터디
컨테이너 기반의 오픈소스 가상화 플랫폼
컨테이너
프로그램, 실행환경을 추상화 -> 프로그램의 배포 및 관리를 단순하게 해줌
- 격리된 공간에서 프로세스가 동작하는 기술(가상화 기술의 일종): host와 다른 process
- 기존에는 OS를 가상화했음. 가상머신에서 게스트 OS 전체를 가상화 / 사용법은 간단하지만 무겁고 느림
- KVM(Kernel-based VM), Xen(반가상화 방식)의 등장: 게스트 OS가 필요는 하지만 전체 OS를 가상화하지는 않음 -> 클라우드 서비스의 가상 컴퓨팅 기술의 기반이 됨
이미지(Image)
- 컨테이너 실행에 필요한 파일과 설정값(isolated filesystem)을 포함하고 있음. 상태값을 가지지 않고 변하지 않음(Immutable)
- 컨테이너는 이미지를 실행한 상태라 볼 수 있음
- 같은 이미지에서 여러개의 컨테이너를 생성할 수 있음
- 컨테이너의 상태가 바뀌거나 삭제되어도 이미지는 변하지 않고 그대로 남아있음
- 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더이상 의존성 파일을 컴파일하고 설치할 필요가 없음
Dockerfile
- 이미지를 만들기 위한 파일
- DSL(Domain-specific language) 언어를 이용하여 이미지 생성과정을 적음
Docker Tutorial
Docker Desktop을 설치했을 때 처음 나오는 튜토리얼
- image file을 깃헙에서 받아오기: docker run —name repo alpine/git clone {git_link}
- docker build하기(이게 이미지로부터 컨테이너를 만드는 작업?)
- container를 run하기
1
docker run -d -p 80:80 docker/getting-started
-d: container를 detached mode로 실행-p 80:80: host의 80번 port를 container의 80번 포트에 mapdocker/getting-started: 사용할 image
Docker 따라하기
Dockerfile 생성하기: container image 만들기
package.json과 같은 디렉토리에Dockerfile이라는 이름의 파일을 생성- 해당 디렉토리에서
docker build를 해준다1
docker build -t getting-started .
-t: flag tag(?)getting-started: container를 run할 때 참고하는 image.: current directory의Dockerfile을 보란 뜻
Container 시작하기
- container 실행하기: 만들어진 image를 명시해주기!
1
docker run -dp 3000:3000 getting-started localhost:3000을 들어가면 실행되어 있음!!
Multi-Container: MySQL
docker로 application을 실행하면서 MySQL도 같이 돌리려면 container를 networking해줘야 한다.
Container Networking Method
- 시작하는 시점에 assign
- 이미 존재하는 container에 연결
- MySQL image 받기
1
docker pull mysql
m1 맥북의 경우 arm/64를 아키텍쳐 이미지를 기본으로 사용하기 때문에 다음 커멘드를 이용하여 image를 받아야 한다
1
docker pull --platform linux/amd64 mysql:latest다음 커멘드를 이용하여 image가 잘 받아졌는지 확인할 수 있다
1
docker images
도커 image를 지우는 방법은 다음과 같다
1
docker rmi {image_id}
- Container 만들기 받아온 이미지로부터 container를 생성한다
1
docker run --platform linux/amd64 -p 3306:3306 --name {container_name} -e MYSQL_ROOT_PASSWORD={root_user_password} -e MYSQL_DATABASE={database_name} -d mysql --default-authentication-plugin=mysql_native_password
--default-authentication-plugin=mysql_native_password: mysql8부터 authentication이 바뀌어서 이렇게 설정해줘야 connection이 되었음container 실행
1
docker start {container_name or container_id}
container 재실행
1
docker restart {container_name or container_id}
container 종료
1
docker stop {container_name or container_id}
실행중인 container에 attach(접속)
1
docker attach {container_name or continaer_id}
실행중인 container bash에 접속: bash에서 빠져나오고 싶을 땐
exit명령어를 이용할 수 있다1
docker exec -it {container_name} bash
동작중인 container 확인
1
docker ps
정지된 container 확인
1
docker ps -acontainer 삭제
1
docker rm {container_id}