배포 컨테이너 -> 실행환경에 구애받지 않고 애플리케이션 실행 가능
의존성 충돌 문제 해결
애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고 실행되도록 만든 애플리케이션 단위
애플리케이션 및 애플리케이션의 구성을 담은 템플릿
이미지로 여러 개의 컨테이너 생성
이미지를 저장하고 배포/공유하는 데 사용
[Registry_Account/Repository_Name:Tag]
docker/whalesay:latest
➡️ Registry : docker Hub
➡️ Registry Account : docker
➡️ Repository Name : whalesay
➡️ Tag : latest
# docker/whalesay의 최신 이미지 받아오기
docker image pull docker/whalesay:latest
# 이미지 리스트 출력
docker image ls
# 이미지 삭제
docker image rm {이미지 이름}
# 컨테이너 리스트 출력
docker container ps -a
# 컨테이너 삭제
docker container rm {컨테이너 이름}
# 컨테이너 실행
docker container start {컨테이너 이름}
# 컨테이너 중지
docker container stop {컨테이너 이름}
# 컨테이너 실행
# run : 컨테이너 실행. 이미지가 없다면 pull한 뒤 실행.
# cowsay boo -> arg
docker container run --name {컨테이너 이름} docker/whalesay:latest cowsay boo
# -rm : 컨테이너를 일회성으로 실행. 컨테이너가 중지/종료될 때 컨테이너와 관련된 리소스 모두 제거.
docker container run --name {컨테이너 이름} --rm docker/whalesay cowsay boo
# 실행
# -p : publish -> 로컬호스트의 포트와 컨테이너의 포트를 연결
docker container run --name {컨테이너 이름} -p {로컬호스트 포트번호}:{컨테이너 포트번호} {이미지}
# 컨테이너에서 bash shell 실행
# -i : interative -> 사용자의 입력을 받음
# -t : tty -> TTY모드(pseudo-TTY)를 사용 (bash 사용하기 위해 설정)
docker exec -it {컨테이너 이름} bash
docker container commit {컨테이너 이름} {이미지 이름}:{태그}
docker 이미지 빌드를 위한 파일
# Dockerfile 예시
# httpd 이미지를 사용한다고 가정
# httpd -> /usr/local/apache2/htdocs/ 경로에 웹 서버와 관련된 파일이 저장
# 베이스 이미지
FROM httpd:2.4
# (optional) 컨테이너 내의 작업 디렉토리 설정
WORKDIR /user/local/apache2
# 지정한 경로에 있는 파일을 복사/붙여넣기
COPY {웹 서버 실행에 필요한 파일의 경로} /usr/local/apache/htdocs/
# --tag : [name:tag] 형식의 이미지를 생성
# 지정한 경로에 있는 Dockerfile을 찾아서 build
docker build --tag {이미지 이름}:{tag} {경로}
docker-compose.yaml (.yml) 파일 사용
version: "3"
services:
app:
build:
context: ./01_FLASK_DOCKER
dockerfile: Dockerfile
links:
- "db:mysqldb"
ports:
- "80:8080"
container_name: appcontainer
depends_on:
- db
db:
image: mysql:5.7
restart: always
volumes:
- ./mysqldata:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=dgkcoding
- MYSQL_DATABASE=dgkdb
ports:
- "3306:3306"
container_name: dbcontainer
# -d : 백그라운드 실행
docker-compose up -d
# docker-compose.yaml에 정의된 이미지로 실행된 컨테이너 종료
docker-compose down
# 특정 이미지만 컨테이너로 실행
docker-compose up {특정 이미지}