카테고리 없음

[도커]도커 공부,자주사용하는 명령어

juhwan 2023. 7. 13. 03:03

 

도커에 이미지란?

이미지는 가상머신에서 사용하는 이미지와 비슷한 역할을 합니다

이미지는 어떤 애플리케이션을 실행하기 위한 환경이라고 할 수 있습니다.

이미지를 기반으로 애플리케이션을 바로 배포할 수 있다

 

 

도커이미지 기본값

이미지 이름은 :을 구분자로 이미지 이름과 태그로 구분됩니다.

태그를 지정하지 않으면 기본값으로 latest가 사용됩니다

 

 

도커가 이미지 찾는 과정

도커는 먼저 이 이미지를 로컬에서 찾아보고, 찾을 수 없으면 도커 공식 저장소에서 찾아봅니다.

 

 

도커의 pull, push

도커에서는 이미지를 다운 받을 때 install이나 download와 같은 명령 대신 pull을 사용합니다. 

이미지를 업로드 할 때는 push라는 명령어

새로운 이미지를 생성할 때는 commit

이미지의 차이를 확인할 때는 diff

 

이미지 삭제시 주의사항

이미지에서 파생된(종료 상태 포함) 컨테이너가 하나라도 남아있으면 이미지는 삭제할 수 없다

이미지 삭제하려면 컨테이너 종료 후 삭제까지 해야함

 

 

centos 컨테이너를 실행하기 위한 2단계

  1. 도커 레지스트리에서 centos 이미지를 풀 받아서 로컬로 다운로드 받는다.
  2. 이 이미지를 통해서 컨테이너를 실행한다.

 

컨테이너란?

이미지는 어떤 환경이 구성되어있는 상태를 저장해놓은 파일 집합

이미지의 환경 위에서 특정한 프로세스를 격리시켜 실행한 것을 컨테이너라고 부른다

컨테이너를 실행하려면 반드시 이미지가 있어야합니다.

이미지는 파일들의 집합이고, 컨테이너는 이 파일들의 집합 위에서 실행된 특별한 프로세스입니다.

 

 

컨테이너는 가상머신이라기보다는 프로세스

 

 

도커 이미지 추가하는 방법 3가지

pull을 이용하여 미리 만들어져 있는 이미지 가져오기

컨테이너의 변경사항으로부터 이미지를 만들기

Dockerfile을 빌드하여 만들기

 

 

현재 실행중인 모든 컨테이너 목록을 출력하라는 명령어

$ docker ps

오류발생 : 에러가 발생하는 이유는 사용자에게 도커 소켓에 접근할 권한이 없기 때문이다

 

 

 

관리자 권한이 있는 경우 앞에 sudo를 붙여서 입력

$ sudo docker ps

 

 

사용자 계정에서도 도커를 직접 사용할 수 있도록 docker 그룹에 사용자를 추가(관리자만 추가가능)

$ sudo usermod -aG docker $USER
$ sudo su - $USER

 

 

도커에서 이미지 풀 받기

$ docker pull <IMAGE_NAME>

 

 

도커에서는 docker pull <IMAGE_NAME> 명령어로 이미지를 풀 받을 수 있습니다.

 

 

이미지가 정상 다운 되었는지 확인하는 법

docker pull 받은 후

마지막 줄의 메시지로 부터 centos:latest 이미지가 다운로드된 것을 알 수 있습니다.

Using default tag: latest
latest: Pulling from library/centos
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Image is up to date for centos:latest
docker.io/library/centos:latest

 

 

도커 이미지 확인

$ docker images

kimjuhwan@gimjuhwan-ui-MacBookPro ~ % docker images
REPOSITORY                                 TAG       IMAGE ID       CREATED         SIZE
ambassador/telepresence-docker-runtime     1.0.13    a462fe6d3003   2 days ago      23.7MB
ambassador/telepresence-docker-extension   1.0.13    d35f861d0016   2 days ago      418MB
centos                                     latest    e6a0117ec169   22 months ago   272MB

TAG는 임의로 붙여진 추가적인 이름입니다.

이미지를 지정할 때 태그를 생략하면 latest가 사용됨 

IMAGE ID는 이미지를 가리키는 고유한 해시 값

CREATED는 이미지가 생성된 시간

SIZE는 이미지의 용량

 

 

컨테이너실행

docker run -it <이미지이름:태그> <명령어>

$ docker run -it centos:latest bash

[root@d3fef9c0f9e9 /]#

[root@d3fef9c0f9e9 /]#  우분투 환경에서 센트OS환경에 접속하였다는 뜻

여기서 접속이란?? 호스트OS와 격리된 환경에서 bash 프로그램을 실행했다고 이해하기

 

 

실행된 bash 종료하기

[root@bdd4bde396c4 /]# exit

 

 

컨테이너 목록 출력

$ docker ps

CONTAINER ID   IMAGE           COMMAND   CREATED         STATUS         PORTS     NAMES
0b93533f6752   centos:latest   "bash"    6 minutes ago   Up 6 minutes             quirky_faraday

컨테이너 아이디는 앞으로 도커에서 컨테이너를 조작할 때 사용하는 아이디이기 때문에 필수적으로 알아야함

 

 

죽은(종료된) 컨테이너 목록 출력

$ docker ps -a
CONTAINER ID   IMAGE           COMMAND   CREATED          STATUS                       PORTS     NAMES
bdd4bde396c4   centos:latest   "bash"    32 seconds ago   Exited (0) 4 seconds ago               blissful_euler
0b93533f6752   centos:latest   "bash"    14 minutes ago   Exited (127) 3 minutes ago             quirky_faraday

배시 셸 프로세스이기 때문에, 셸을 종료하면 컨테이너도 종료된다

 

 

컨테이너 되살리기(입출력 불가능)

$ docker restart bdd4bde396c4
bdd4bde396c4

뒤에 컨테이너 아이디 적어주기

 

 

컨테이너 되살리고 입출력 가능

$ docker attach bdd4bde396c4
[root@bdd4bde396c4 /]#

 

컨테이너 강제로 종료시키기

$ docker stop bdd4bde396c4

 

 

 

종료된 컨테이너 삭제하기

$ docker rm bdd4bde396c4

 

이미지 삭제하기

$ docker rmi a462fe6d3003

 

 

 

 

우분투18.04 LTS (바이오닉 비버(Bionic Beaver)) 다운

$ docker pull ubuntu:bionic

$ docker run -it ubuntu:bionic bash

아래는 우분투 실행코드

 

 

컨테이너 깃 버전 확인방법

root@8b027838faa6:/# git --version

 

 

부모 이미지 파생된 컨테이너의 파일 시스템 간의 변경사항을 확인하는 방법

$ docker diff 8b027838faa6

컨테이너가 이미지파일 시스템 상태 그대로면 출력이 안됨

 

 

 

우분투 이미지에 깃(git)다운로드

root@8b027838faa6:/# apt update

root@8b027838faa6:/# apt install -y git

root@8b027838faa6:/# git --version
git version 2.17.1

 

컨테이너 변경사항 출력하기 (head로 앞부분만 출력함)

$ docker diff 8b027838faa6 | head

C /usr
C /usr/lib
A /usr/lib/systemd
A /usr/lib/systemd/user
A /usr/lib/systemd/user/graphical-session-pre.target.wants
A /usr/lib/systemd/user/graphical-session-pre.target.wants/ssh-agent.service
A /usr/lib/systemd/user/ssh-agent.service
A /usr/lib/git-core
A /usr/lib/git-core/git-diff-files
A /usr/lib/git-core/git-diff-tree

A -> ADD

C -> Change

D -> Delete

 

 

ubuntu:bionic이미지에 깃이 설치된 새로운 이미지를 생성하기

 $ docker commit 8b027838faa6 ubuntu:git

 

 

Dockerfile을 저장해놓기 위한 디렉터리 만들기

$ mkdir git-from-dockerfile
$ cd git-from-dockerfile

git-from-dockerfile $

파일 안열리면 아래 코드치기
touch Dockerfile
vi Dockerfile