새소식

Docker

Docker 명령어

  • -

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

 

728x90

'Docker' 카테고리의 다른 글

github로 Docker Image 공유  (0) 2022.09.05
Dockerfile  (0) 2022.09.05
[🐳Docker] Flask App 띄우기  (0) 2022.07.08
[🐳Docker] image 삭제하기  (0) 2022.07.07
[🐳Docker] nginx 띄우기  (0) 2022.07.07
Contents