컨테이너는 실행 중이 아니면 컴퓨터의 리소스를 거의 차지하지 않음
sudo systemctl start docker # 도커 엔진 시작
sudo systemctl stop docker # 도커 엔진 종료
sudo systemctl enable docker # 자동 실행 설정
start # container 실행
stop # container 정지
create # image를 이용해 container 생성
run # docker image를 내려받고 container를 생성 후 실행
rm # 정지된 container를 삭제
exec # 실행중인 container 속 프로그램을 실행
ls # container 목록 출력
cp # container와 host간에 파일 복사
commit # container를 image로 변환
pull # docker hub 등의 repository에서 image 다운
rm # image 삭제
ls # image 목록 출력
build # image 생성
create # volume 생성
inspect # volume 상세 정보 출력
ls # volume 목록 출력
prune # mount되지 않은 volume을 모두 삭제
rm # 지정한 volume 삭제
connect # container를 docker network에 연결
disconnect # container의 docker network 연결 해제
create # docker network 생성
inspect docker network 상세 정보 출력
ls # docker network 목록 출력
prune # container가 접속하지 않은 network를 모두 삭제
rm # 지정한 network 삭제
checkpoint # 현재 상태를 일시 저장 후, 나중에 해당 시점으로 되돌릴 수 있음
node # docker swarm의 node 관리 기능
plugin # plugin 관리 기능
secret # docker swarm의 비밀값 정보 관리 기능
service # docker swarm의 service 관리 기능
stack # docker swarm 또는 k8s에서 여러 개 서비스를 합쳐 구성한 스택 관리 기능
swarm # docker swarm 관리 기능
system # docker engine 정보 확인 기능
login # docker repository에 login
logout # docker repository에 logout
search # docker repository 검색
version # docker engine 및 명령형 도구의 버전 출력
container에서 가장 많이 사용되는 기능은 생성과 실행, 정지, 삭제
-> container를 삭제하기 위해서는 먼저 container를 정지시켜야 한다
container를 실행하기 위한 명령어
docker run (option) image (param)
--name <container-name> # container 이름 지정
-p host_port_num:container_port_num # port num 지정
-v host_disk:container_dir # volume mount
--net=<network-name> # container를 network에 연결
-e env_name=value # 환경변수 지정
-d # 백그라운드 실행
-i # container에 터미널(키보드)을 연결
-t # 특수 키를 사용 가능하도록 함
-help # 사용 방법 안내
container를 정지시키기 위한 명령어
docker stop <container-name>
container를 삭제하기 위한 명령어
docker rm <container-name>
container 목록을 출력하는 기능, 현재 실행중인 container 목록을 출력
docker ps (option)
docker ps -a # 현재 존재하는 모든 컨테이너의 목록을 출력
CONTAINER ID : container 식별자. 무작위로 할당
IMAGE : container 기반 image
COMMAND : container 실행 시 실행하도록 설정된 프로그램 이름
CREATED : container 생성 후 경과된 시간
STATUS : container 현재 상태. UP - 실행중, Exited - 종료
PORTS : container에 할당된 port num. host_port_num -> container_port_num
NAMES : container 이름
웹 브라우저를 통해 container에 접근하기 위해서는 외부와 접속하기 위한 설정이 필요 > port가 필요
서버는 정해둔 포트에서 서버에 대한 접근을 기다리다 사용자가 포트에 접근을 하면 요청에 따라 서비스를 제공하게 된다. 하지만 container 속에서 실행중인 프로그램은 외부와 직접적으로 연결되지 않기 때문에 외부에서 바로 접근할 수 없다. 그렇기 때문에 물리적 컴퓨터가 외부의 접근을 대신 받아 container에 넘겨주는 방식을 사용한다.
-p host_port_num:container_port_num
host의 port 번호는 container마다 다르게 설정하여, 어떤 container로 요청이 가야할지 구분을 해주어야 한다. 반면 container는 다른 container와 격리되어 있기 때문에 container 내부의 port번호는 동일한 port 번호를 사용 가능하다.
docker run -d -p 8080:80 httpd # host의 8080번 port를 container의 80번 port로 연결
container 속 파일 시스템을 다루는 것을 전제로 하기 때문에 인자로 shell 명령어를 전달
ubuntu # -d 없이 -it 옵션 사용. /bin/bash 등 shell을 인자로 전달
centos # -d 없이 -it 옵션 사용. /bin/bash 등 shell을 인자로 전달
debian # -d 없이 -it 옵션 사용. /bin/bash 등 shell을 인자로 전달
fedora # -d 없이 -it 옵션 사용. /bin/bash 등 shell을 인자로 전달
busybox # -d 없이 -it 옵션 사용. /bin/bash 등 shell을 인자로 전달
alpine # -d 없이 -it 옵션 사용. /bin/bash 등 shell을 인자로 전달
httpd # -d로 백그라운드 실행, -p로 port 지정
nginx # -d로 백그라운드 실행, -p로 port 지정
mysql # -d로 실행시 -e MYSQL_ROOT_PASSWORD와 같이 root pwd 지정
postgreSQL # -d로 실행시 -e POSTGRES_ROOT_PASSWORD와 같이 root pwd 지정
mariadb # -d로 실행시 -e MYSQL_ROOT_PASSWORD와 같이 root pwd 지정
openjdk # -d를 사용하지 않고, 인자로 java 명령 등을 지정해 도구 형태로 사용
python # -d를 사용하지 않고, 인자로 python 명령 등을 지정해 도구 형태로 사용
php # 웹 서버가 포함된 것과 실행 명령만 포함된 것으로 나누어 제공
ruby # 웹 서버가 포함된 것과 실행 명령만 포함된 것으로 나누어 제공
perl # -d를 사용하지 않고, perl 명령 등을 지정해 도구 형태로 사용
gcc # -d를 사용하지 않고, gcc 명령 등을 지정해 도구 형태로 사용
node # -d를 사용하지 않고, app 명령 등을 지정해 도구 형태로 사용
registry # -d로 백그라운드 실행, -p로 port 지정
wordpress # -d로 백그라운드 실행, -p로 port 지정. MySQL 또는 MariaDB 필요 -e로 패스워드 지정
nextcloud # -d로 백그라운드 실행, -p로 port 지정
redmine # -d로 백그라운드 실행, -p로 port 지정. PostgreSQL 또는 MySQL 필요
container를 삭제해도 이미지는 남기 때문에, 필요없는 image는 그때그때 삭제하는 것이 좋다. image를 삭제할 때는 image ID 또는 image 이름을 지정
docker image rm <image-name>
docker image ls # image 목록을 출력