Container를 실행해보자

Koo·2023년 7월 17일
1
post-thumbnail
## Section01. docker engine 시작$$\cdot$$종료하기

컨테이너는 실행 중이 아니면 컴퓨터의 리소스를 거의 차지하지 않음

  • 도커 엔진은 컴퓨터를 킬 때 함께 자동으로 실행이 가능
  • 컨테이너는 복구하기 위해서는 컨테이너를 실행하는 별도의 스크립트가 필요
sudo systemctl start docker # 도커 엔진 시작
sudo systemctl stop docker # 도커 엔진 종료
sudo systemctl enable docker # 자동 실행 설정

Section02. container의 기본적인 사용 방법

container 조작 커맨드

start # container 실행
stop # container 정지
create # image를 이용해 container 생성
run # docker image를 내려받고 container를 생성 후 실행
rm # 정지된 container를 삭제
exec # 실행중인 container 속 프로그램을 실행
ls # container 목록 출력
cp # container와 host간에 파일 복사
commit # container를 image로 변환

image 조작 커맨드

pull # docker hub 등의 repository에서 image 다운
rm # image 삭제
ls # image 목록 출력
build # image 생성

volume 조작 커맨드

create # volume 생성
inspect # volume 상세 정보 출력
ls # volume 목록 출력
prune # mount되지 않은 volume을 모두 삭제
rm # 지정한 volume 삭제

network 조작 커맨드

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 및 명령형 도구의 버전 출력

Section03. container 생성과 삭제, 실행, 정지

container에서 가장 많이 사용되는 기능은 생성과 실행, 정지, 삭제
-> container를 삭제하기 위해서는 먼저 container를 정지시켜야 한다

docker run

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 # 사용 방법 안내

docker stop

container를 정지시키기 위한 명령어

docker stop <container-name>

docker rm

container를 삭제하기 위한 명령어

docker rm <container-name>

docker ps

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 이름

Section04. 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로 연결

Section05. container 생성에 익숙해지기

Linux

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을 인자로 전달

web/DB server

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 필요

Section06. image 삭제

container를 삭제해도 이미지는 남기 때문에, 필요없는 image는 그때그때 삭제하는 것이 좋다. image를 삭제할 때는 image ID 또는 image 이름을 지정

docker image rm <image-name>
docker image ls # image 목록을 출력
profile
스터디를 해보자

0개의 댓글