docker image
∎ docker 컨테이너를 생성하기 위한 명령들을 가진 템플릿
docker container
∎ 도커 이미지가 리눅스 컨테이너 형태로 실행한 상태를 의미
∎ docker daemon에 있는 커널에서 LXC로 리눅스 컨테이너 실행 후, 해당 컨테이너에 docker image에 포함된 명령을 실행해 docker container를 만들고 실행
Docker image 관련 명령어
Docker hub에서 이미지를 다운받을 수 있음
docker hub : https://hub.docker.com/
▮ docker hub에 로그인
docker login
▮ 다운로드 받을 이미지 검색
docker search ubuntu
# 상위 5개만 출력
docker search --limit=5 ubuntu
▮ 이미지 다운로드
docker pull ubuntu
▮ 다운로드 받은 이미지 목록 확인
docker images
▮ 다운로드 받은 이미지 삭제
docker rmi 이미지ID
▮ 모든 이미지 삭제
docker rmi -f $(docker images -q)
Docker Container 관련 명령어
▮ 컨테이너 확인
실행 중인 컨테이너 확인
docker ps
실행 중이지 않은 컨테이너까지 확인
docker ps -a
▮ 컨테이너 삭제
docker rm 컨테이너이름orID
▮ 컨테이너 생성 및 실행
docker run 옵션
run은 이미지를 pull받고 컨테이너를 create, start까지 해주는 명령어
option
description
-it
docker 컨테이너에 표준 입력을 오픈하고(-i) pseudo tty를 만들어 해당 표준 입력을 pseudo tty에 연결(-t)하여 컨테이너의 표준 입력으로 전달
--name
컨테이너 이름 설정
-d
컨테이너를 백그라운드에서 실행
--rm
컨테이너 종료시 컨테이너를 자동 삭제
-p
호스트와 컨테이너 포트를 연결
-v
호스트와 컨테이너 디렉토리 연결
docker run -it ubuntu
# ubuntu 내로 들어가서 터미널로 명령을 내릴 수 있음
root@9dfe2222c4ad:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
# 종료
root@9dfe2222c4ad:/# exit
exit
▮ 컨테이너 종료시 자동으로 삭제
docker run -it --rm ubuntu
▮ 컨테이너를 백그라운드로 실행
docker run -it -d ubuntu
백그라운드로 실행된 컨테이너에 접속
docker attach {컨테이너이름orID}
▮ 실행 중인 컨테이너 종료
docker stop {컨테이너이름orID}
▮ -p 옵션과 -v 옵션
-p 옵션: 호스트와 컨테이너 포트를 연결
# apache 웹서버를 docker로 구동
docker run -d -p 9999:80 httpd
더보기
이 때 내 EC2 인스턴스에서 위에서 설정한 포트번호를 인바운드 규칙에 추가해주어야 한다.
누구나 내 EC2서버의 9999포트로 접속하면 해당 apache 컨테이너의 웹서버에 접속이 가능하다.
-v 옵션: 호스트와 컨테이너 디렉토리 연결
host pc에 있는 특정 폴더를 컨테이너 안으로 집어넣기 위해서 -v 옵션을 사용한다.
더보기
1. FileZila를 이용해 우선 새 사이트를 만든다.
2. 내가 올리려는 index.html 파일이 들어있는 폴더를 서버에 업로드한다.
3. -v 옵션을 사용해 특정 폴더를 -v 옵션으로 교체하면, 해당 폴더는 호스트 PC상에 있기 때문에 컨테이너가 종료되더라도 파일이 유지될 수 있다.
ubuntu@ip-172-21-34-67:~$ ls
docker_test
ubuntu@ip-172-21-34-67:~$ cd docker_test
ubuntu@ip-172-21-34-67:~/docker_test$ pwd
/home/ubuntu/docker_test
ubuntu@ip-172-21-34-67:~/docker_test$ docker run -d -p 9999:80 -v /home/ubuntu/docker_test:/usr/local/apache2/htdocs httpd:alpine
내 index.html 파일이 나오는 것을 확인할 수 있다.
▮ 실행 중인 컨테이너에 명령 실행
ubuntu@ip-172-21-34-67:~/docker_test$ docker exec -it 1b0d53 /bin/sh
/usr/local/apache2 #
해당 컨테이너 안에는 /usr/local/apache2/htdocs 라는 폴더가 있다.
/usr/local/apache2 # cd /usr/local/apache2/htdocs/
/usr/local/apache2/htdocs # ls
index.html
/usr/local/apache2/htdocs #
▮ 실행중인 컨테이너에 들어가서 명령 실행
docker attach {컨테이너ID}
exec 는 내부에 들어가지 않고 실행하는 도커에 명령을 실행
: 명령하나만 실행시키고 싶을 때는 exec를 사용
attach 는 실행중인 도커에 들어가서 실행
: 여러 명령도 쓰면서 도커 내부에서 무슨 작업을 하고 싶다면 attach를 사용
▮ 모든 컨테이너 중지
docker stop $(docker ps -a -q)
▮ 모든 컨테이너 삭제
docker rm ${docker ps -a -q)
▮ docker history
이미지가 만들어질 때, 어떤 과정을 거쳐서 만들어졌는지, 각 명령을 보여줌
# Dockerfile
FROM ubuntu:18.04
LABEL maintainer="byeol"
RUN apt-get update
RUN apt-get install -y apache2 # apache2 설치
COPY ./docker_test /var/www/html/
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] # 웹서버 실행
이미지 생성
docker build -t mytest -f Dockerfile_ubuntu ./
이미지 히스토리 확인
docker history mytest
▮ docker cp
컨테이너에서 특정 파일을 호스트PC로 가져오는 명령 (특정 파일 확인을 할 때 사용) 컨테이너 → 호스트PC
# 아까 history 확인했던 이미지를 사용하여 컨테이너 작성
docker run -d -p 9999:80 --name mywebserver --rm mytest
컨테이너이름:/가져올파일경로
# apache2 설정 파일 가져오기
docker cp mywebserver:/etc/apache2/sites-available/000-default.conf ./
000-default.conf 파일을 copy해서 가져옴을 확인할 수 있음
ls
호스트PC에서 컨테이너에 특정 파일을 넣을 수 도 있음 호스트PC → 컨테이너
docker cp 000-default.conf mywebserver:/etc/apache2/sites-available/000-default.conf
컨테이너 접속
docker exec -it mywebserver /bin/bash
컨테이너 안에서 넣은 파일 확인
cd /etc/apache2/sites-available/
cat 000-default.conf
▮ docker commit
컨테이너 변경사항을 이미지 파일로 생성
docker commit -m "add vim" mywebserver newimage
docker history newimage
ENTRYPOINT 상단에 layer가 추가됨
▮ docker diff
컨테이너가 실행되면서 본래의 이미지와 비교해 변경된 파일 목록 출력
기호
설명
A
파일 or 디렉토리 추가
D
파일 or 디렉토리 삭제
C
파일 or 디렉토리 수정
docker diff mywebserver