Docker 기초

Look! there's a flower!·2024년 4월 8일

가상머신과 컨테이너

가상머신 : 하드웨어 가상화
컨테이너 : 프로세스의 실행환경을 격리

컨테이너는 사용자에게는 가상머신처럼 보이지만 실제로는 기반 시스템의 프로세스로 동작함

도커: 운영체제의 기능을 이용해 컨테이너를 실행하기 위한 파일 등 별도의 환경을 생성하고 리눅스 네임스페이스와 다양한 커널 기능을 조합해 해당 프로세스를 격리 실행 할 수 있는 도구

도커 구축 예

우분투에서 센트OS 환경 구축

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

CentOS 실행

$ docker run -it --rm centos:latest bash
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
8d30e94188e7: Pull complete
Digest: sha256:2ae0d2c881c7123870114fb9cc7afabd1e31f9888dac8286884f6cf59373ed9b
Status: Downloaded newer image for centos:latest

[root@881189373f8b /]#

도커 설치

$ curl -s https://get.docker.com | sudo sh
$ docker -v
Docker version 19.03.8, build afacb8b7f0

Docker 설치 후 확인

$ cat /etc/apt/sources.list.d/docker.list
deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable

$ dpkg --get-selections | grep docker
docker-ce install
docker-ce-cli install

사용자를 docker 관리자에 추가

만약에 사용자가 docker 그룹에 없으면 docker 명령이 제대로 안된다
docker ps 명령을 해도 권한 오류가 난다
다음과 같이 docker 그룹을 설정한다
$ sudo groupadd docker // /etc/group에 docker 그룹 없을 시
$ sudo usermod -aG docker $USER
이후에 newgrpdocker를실행하거나다시로그인해야변경이적용된다.newgrp docker를 실행하거나 다시 로그인해야 변경이 적용된다. newgrp docker 또는
$ sudo su - $USER
$ docker ps

도커 엔진과 클라이언트

도커엔진 = 서버
도커 클라이언트 = 사용자의 docker 명령어

도커 명령어

$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/json: dial unix /var/run/docker.sock: connect: permission denied
--> 권한이 없어 오류가 남
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

도커 이미지

가상머신 이미지와 유사한 개념
어플리케이션을 실행하기 위한 파일들의 집합
도커에서는 이러한 파일들을 모아서 이미지로 만들고 배포할 수 있음

샘플 도커 만들기 centos

  1. 현재는 해당 이미지가 없음
    $ docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    아무런 결과 없음

  2. docker 이용한 centos 생성
    $ docker pull centos
    --> 별도 지정하지 않으면 latest 버전 설치
    도커는 이미지를 서버에서 먼저 찾아보고 없으면 도커 공식 저장소에서 찾는다
    공식 저장소에서 다운서버에 있으면 풀 시킨다

  3. 확인
    $ docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    centos latest 470671670cac 8 weeks ago 237MB

도커 공식 이미지 레지스트리
$ docker info | grep Registry
Registry: https://index.docker.io/v1/

도커에서 제공하는 공식 이미지 검색

도커 실행하기

  1. 실행 방법
    docker run -it <이미지이름:태그> <명령어>

$ docker run -it centos:latest bash
[root@d3fef9c0f9e9 /]#

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3fef9c0f9e9 centos:latest "bash" 3 minutes ago Up 3 minutes sweet_keldysh
--> 도커 프로세스 실행 상태 확인 가능함

컨테이너 ID는 중요한 정보 임. 이를 통해 컨테이너 조작 함

도커 재실행

$ docker restart d3fef9c0f9e9
d3fef9c0f9e9
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3fef9c0f9e9 centos:latest "bash" 14 minutes ago Up 8 seconds compassionate_turing

도커 attach

예를 들어 docker로 shell을 실행 시켰는데 그걸 exit 시켰다가 다시 들어갈 때
root@65d60d3dd306:/# exit // docker shell exit

$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3fef9c0f9e9 centos:latest "bash" 13 minutes ago Exited (0) 34 seconds ago compassionate_turing

종료 된 것 확인

$ docker restart d3fef9c0f9e9
d3fef9c0f9e9
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3fef9c0f9e9 centos:latest "bash" 14 minutes ago Up 8 seconds compassionate_turing
$

$ docker attach d3fef9c0f9e9
[root@d3fef9c0f9e9 /]#

도커 diff

$ dockre ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
65d60d3dd306 ubuntu:bionic "bash" About a minute ago Up About a minute distracted_ardinghelli

$ dokcker diff 65d60d3dd306
최초 설치 이미지와의 차이

root@65d60d3dd306:/# apt update
...
root@65d60d3dd306:/# apt install -y git
...
root@65d60d3dd306:/# git --version
git version 2.17.1

$ docker diff 65d60d3dd306 | head
C /usr
C /usr/lib
A /usr/lib/ssl
A /usr/lib/ssl/certs
A /usr/lib/ssl/misc
A /usr/lib/ssl/misc/CA.pl
A /usr/lib/ssl/misc/tsget
A /usr/lib/ssl/misc/tsget.pl
A /usr/lib/ssl/openssl.cnf
A /usr/lib/ssl/private

도커 커밋 -- 새로운 이미지 생성

설치 한 다음에 커밋 해줌

$ docker commit 65d60d3dd306 ubuntu:git
sha256:12924460218feb38da74e9a64c95acd55d16297346b2698f47f396936636c93d
$ REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu git 12924460218f 4 seconds ago 186MB
ubuntu bionic 4e5021d210f6 8 hours ago 64.2MB
centos latest 470671670cac 2 months ago 237MB

이렇게 하면 새로이 설치한 것이 유지됨을 확인 할 수 있다
$ docker run -i -t ubuntu:git bash
root@2a00b9b2b7cc:/# git --version
git version 2.17.1
root@2a00b9b2b7cc:/# exit

도커 컨테이너 삭제, 이미지 삭제

이미지에서 만들어진 컨테이너가 있으면 이미지 삭제 안됨

$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a00b9b2b7cc ubuntu:git "bash" 2 minutes ago Exited (130) 3 seconds ago cranky_franklin
$ docker rm 2a00b9b2b7cc
2a00b9b2b7cc
$ docker rmi ubuntu:git
Untagged: ubuntu:git
Deleted: sha256:487a3619305e68483059caa21eb54d1d812ced4282df9e2ba05ec46ed9a2b8f4
Deleted: sha256:9b6621e819f094c16ea9f63af90f7cb564a48133c05504fad0f28563865f957d

시스템에서 docker 확인 하기

Docker 실행 확인하기
방법1. docker ps
방법2. sudo systemctl status
1) docker 실행 instance를 찾는다.
예) $ systemctl status | grep next
2) docker inspect를 통해 조사한다.

Docker 내용 확인하기
$ docker inspect 9addb09317d312522961b69bbf7933e5fb50814cbf29be6b97a62be2858464f
$ docker exec -it 9addb09317d312522961b69bbf7933e5fb50814cbf29be6b97a62be2858464f /bin/sh

Docker 파일 복사
// docker 안의 파일 복사하기
$ docker cp <path_on_host> <container_id_or_name>:<path_inside_container>
// docker 로 파일 복사하기
$ docker cp /home/user/my_project/new_config.ini my_container:/etc/app/
복사 시 주의 사항

  • 절대 path 사용
  • docker 가 docker cp 가능하도록 설정되어있어야 함
  • 큰 파일의 경우는 volume / bind mount가 효과적

// docker 자체 정보
$ docker info // information displayed

profile
Why don't you take a look around for a moment?

0개의 댓글