# 컨테이너 만들고 실행
docker run hello-world
# 컨테이너 확인
docker ps
# 실행중인 컨테이너 확인
docker ps -a
# test라는 이름의 폴더를 만들고 이동
mkdir test && cd test
# 빌드하기
docker build -t node-app:0.1 .
# built한 이미지 보기
docker images
# 빌트한 이미지에 기반한 컨테이너를 아래 코드를 실행함으로써 run
docker run -p 4000:80 --name my-app node-app:0.1
# 터미널 열어서 서버 테스트해보기
curl http://localhost:4000
# 초기 터미널을 닫고 컨테이너 실행 중지 및 삭제
docker stop my-app && docker rm my-app
docker 커맨드 (옵션) 대상 (인자)
docker run (옵션) 이미지 (인자)
docker stop 컨테이너_이름
docker rm 컨테이너_이름
docker ps (옵션)
-p 호스트_포트_번호:컨테이너_포트_번호
docker image rm httpd
docker network create 네트워크_이름
docker network rm 네트워크_이름
docker network create wordpress000net1
docker run --name mysql
docker run --name wordpress
docker run --name mysql000ex11 -dit --net=wordpress000net1
MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress0
MYSQL_USER=wordpress000kun -e MYSQL_PASSWORD=wkunpass mysql
--character-set-server=utf8mb4 --collation-server=utf8mb4_
--default-authentication-plugin=mysql_native_password
docker run --name wordpress000ex12 -dit --net=wordpress000
-e WORDPRESS_DB_HOST=mysql000ex11 -e WORDPRESS_DB_NAME=word
-e WORDPRESS_DB_USER=wordpress000kun -e WORDPRESS_DB_PASSWO
항목 | 설정값 |
---|---|
네트워크 이름 | redmine000net2 |
MYSQL 컨테이너 이름 | mysql000ex13 |
MYSQL 이미지 이름 | mysql |
레드마인 컨테이너 이름 | redmine000ex14 |
레드마인 이미지 이름 | redmine |
docker network create redmine000net2
docker run --name mysql000ex13 -dit --net=redmine000net2 -e
MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=redmine000
MYSQL_USER=redmine000kun -e MYSQL_PASSWORD=rkunpass mysql
--character-set-server=utf8mb4 --collation-server=utf8mb4_
--default-authentication-plugin=mysql_native_password
docker run -dit --name redmine000ex14 --network redmine000
-e REDMINE_DB_MYSQL=mysql000ex13 -e REDMINE_DB_DATABASE=red
REDMINE_DB_USERNAME=redmine000kun -e REDMINE_DB_PASSWORD=r
파일 복사는 컨테이너 → 호스트, 호스트 → 컨테이너 양방향 모두 가능
# 호스트 -> 컨테이너
docker cp 호스트_경로 컨테이너_이름:컨테이너_경로
# 컨테이너 -> 호스트
docker cp 컨테이너_이름:컨테이너_경로 호스트_경로
# 파일 복사 명령어
docker cp 원본_경로 복사할_경로
항목 | 볼륨 마운트 | 바인드 마운트 |
---|---|---|
스토리지 영역 | 볼륨 | 디렉터리 또는 파일 |
물리적 위치 | 도커 엔진의 관리 영역 | 어디든지 가능 |
마운트 절차 | 볼륨을 생성한 후 마운트 | 기존 파일 또는 폴더를 마운트 |
내용 편집 | 도커 컨테이너를 통해서 | 일반적인 파일과 같이 |
백업 | 절차가 복잡함 | 일반적인 파일과 같이 |
# 볼륨 생성
docker volume create 볼륨_이름
# 볼륨 삭제
docker volume rm 볼륨_이름
# 바인드 마운트
docker run (생략) -v 스토리지_실제_경로 : 컨테이너_마운트_경로
docker run (생략) -v 볼륨_이름 : 컨테이너_마운트_경로
커맨드 | 내용 |
---|---|
create | 볼륨을 생성 |
inspect | 볼륨의 상세 정보를 출력 |
ls | 볼륨의 목록을 출력 |
prune | 현재 마운트되지 않은 볼륨을 모두 삭제 |
rm | 지정한 볼륨을 삭제 |
docker commit container+name new_name
docker build -t img_name comp_folder_path
| instruction | 내용 |
| FROM | 토대로 되는 이미지를 지정 |
| COPY | 이미지에 파일이나 폴더를 추가 |
| RUN | 이미지를 빌드할 때 실행할 명령어를 지정 |
-> 도커파일 스크립트에 사용되는 주요 인스트럭션
a. 파일 복사와 마운트 이용
b. 컨테이너에서 리눅스 명령어 실행
# bash를 실행하는 인자
/bin/bash
docker exec (옵션) 컨테이너_이름 /bin/bash
# 이미지에 태그를 부여해 복제하는 명령어
docker tag original_image_name registry_path / repository_name
# 이미지 업로드
docker push registry_path / repository_name : version
docker run -d -p 5000:5000 registry
컨테이너와 에트워크를 정지 및 삭제
볼륨과 이미지는 삭제 X
삭제 없이 종료만 하고 싶다면 stop 커맨드
도커 컴포즈는 컨테이너와 주변 환경을 생성하며, 네트워크와 볼륨까지 만들 수 있다.
스크립트는 이미지를 만들기 위한 것으로 네트워크나 볼륨은 만들 수 없다.
# 아파치 컨테이너의 컴포즈 파일 예시
version: "3"
services:
apa000ex2:
image: httpd
ports:
-8080:80
restart: always
# apa000ex2 컨테이너 실행 명령어
docker run --name apa000ex2 -d -p 8080:80 httpd
# 컴포즈 파일 작성 예시
version: "3"
services:
컨테이너_이름1:
컨테이너_이름2:
networks:
네트워크_이름1:
volumes:
볼륨_이름1:
볼륨_이름2:
항목 | 내용 |
---|---|
services | 컨테이너를 정의한다. |
networks | 네트워크를 정의한다. |
volumes | 볼륨을 정의한다. |
항목 | docker run 커맨드의 해당 옵션 또는 인자 | 내용 |
---|---|---|
image | 이미지 인자 | 사용할 이미지를 지정 |
networks | --net | 접속할 네트워크를 지정 |
volumes | -v, --mount | 스토리지 마운트를 설정 |
ports | -p | 포트 설정 |
environment | -e | 환경변수 설정 |
depends_on | X | 다른 서비스에 대한 의존관계를 정의 |
restart | X | 컨테이너 종료 시 재시작 여부를 설정 |
| 설정값 | 내용 |
| no | 재시작하지 않는다 |
| always | 항상 재시작한다 |
| on-failure | 프로세스가 9외의 상태로 종료됐다면 재시작 |
| unless-stopped | 종료 시 재시작하지 않음. 그 외에는 재시작 |
## ex
# up
docker-compose -f def_file_path up opt
# down
docker-compose -f compose_file_path down opt
# stop
docker-compose -f compose_file_path stop opt