image 빌드하기
-> docker build USER_NAME/IMAGE_NAME
빌드된 이미지들 확인하기
-> docker images /// docker image ls
이미지 삭제
-> docker image rm IMAGE_ID /// docker rmi
docker hub 연동
-> docker login -u 사용자ID -p 사용자PW
image pull or push
-> docker pull USER_NAME/IMAGE_NAME // docker push USER_NAME/IMAGE_NAME🎈 docker container 관련 명령
- docker create
- docker run --name=지정할 컨테이너이름 -p -v IMAGE_NAME : 빌드한 이미지로 생성
- docker ps : 현 실행중인 컨테이너 ID 출력
- docker ps -a // docker ps -q
- docker stop, start, restart, kill, pause, unpause, rm CONTAINERID (이름도 가능)
- docker logs -f CONTAINERID : 컨테이너 로그 출력 가능 (ERROR확인)
- docker logs --tail 100 CONTAINERID : 뒷부분 100줄만 출력
- docker run -d USER_NAME/CONTAINER_NAME : (백그라운드에서 컨테이너 실행)
docker container가 버그나 user 입장에서 실행 중에 중단시키는 과정이 발생될 수 있다.
이때 데이터를 영구적으로 보관하기 위해 사용하는 기능이 docker volume이다.
docker container 내 가상 파일 시스템과 호스트 시스템의 파일 시스템을 맵핑하여 진행
-> 이 경우 docker container가 중단되도 모든 airflow logs는 기록이 남게 된다.
ex) container로 MySQL 실행하는 경우 데이터는 모두 docker volume에 저장된다.docker volume 의 타입은 다음과 같다.
- Host Volumes : docker run -v를 실행할 때 페어로 지정된다. 예시로는 다음과 같다.
-> docker run -v /home/taejun/logs:/var/lib/airflow/logs
-> :을 기준으로 앞부분은 호스트 파일 시스템의 path, 뒷부분은 컨테이너 파일 시스템의 path
- Anonymous Volumes : docker run -v container path로 실행 시 컨테이너 패스만 지정
- Named Volumes : docker run -v name:container path 이름과 컨테이너 패스만 지정
🎈 volume을 Readonly로 지정하길 원한다면 ?
-> docker run -v name:container path:ro
dockerfile : anonymouse volume만 지정
docker-compose : host, named volume 사용하는 것이 일반적🎈 nginx란?
- 경량화된 웹 서버이자 Load Balancer
-> 도커를 이용한 실행방법은 다음과 같다.$ mkdir nginx docker run -d --name=nginx -p 8081:80 nginx docker exec --user=root -it nginx sh apt update apt install nano nano /usr/share/nginx/html/index.html exit docker restart nginx
다수의 container로 구성된 프로그램은 어떻게 이미지를 빌드해야 하는가? - 환경 클린업
- 컨테이너 삭제 : docker container rm -f ~~
- 이미지 삭제 : docker image rm ~~
- 다 삭제되었나 docker ps, docker image ls 로 확인
이어서 docker에 존재하는 예제 프로그램인 voting application을 활용하여 다수의 container로 구성된 SW를 도커로 실행해보고자 한다
# 1. clone 진행
git clone https://github.com/dockersamples/example-voting-app 진행.
# 2. Ubuntu에서 만들어진 폴더로 이동하여 해당 디렉토리에서 image build 진행
docker build -t vote ./vote
docker build -t result ./result
docker build -t worker ./worker
# 3. 컨테이너 실행
docker run -d --name=redis redis
docker run --name=db -e POSTGRES_PASSWORD=password postgres
docker run -d --name=vote -p 5001:80 vote
docker run -d --name=worker worker
docker run -d --name=result -p 5002:80 result
docker ps로 컨테이너 실행 확인
# 4. 네트워크 세팅하여 포트 연결
# -> vote 들어가서 redis 연결여부 확인
ping www.google.com
docker exec -it --user root vote sh
ping redis : ping install 필요
apt update
apt install iputils-ping
ping redis : Name or service not known이 나오면 연결해주어야 함.
# -> exit빠져나온 후 네트워크 커맨드 사용
docker container rm -f $(docker container ls -aq)
# 네트워크 생성
: docker network create mynetwork
# 네트워크 옵션 지정
docker run -d --name=redis --network mynetwork redis
docker run -d --name=db -e POSTGRES_PASSWORD=password --network mynetwork postgres
docker run -d --name=vote -p 5001:80 --network mynetwork vote
docker run -d --name=result -p 5002:80 --network mynetwork result
docker run -d --name=worker --network mynetwork worker
# 이후 docker ps로 실행중인 컨테이너들 확인
# 이후 localhost::5001 들어가서 voting 후 5002 들어가서 result 확인
# 또는 아래 커맨드 실행
docker exec -it --user root vote sh
apt update
apt install iputils-ping
ping redis