도커 이미지 조회

docker images

docker images | grep hello

docker images --filter "dangling=true"

-- image id
docker images -q


Docker image를 public repository부터 다운로드

private repository도 사용 가능

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

docker pull ubuntu:18.04


Docker image는 컨테이너에서 사용하지 않는 경우 삭제 가능

사용 중인 image를 강제로 삭제하려면 -f  옵션을 추가한다.

docker ps -a

docker rmi [IMAGE1] [IMAGE2] [IMAGE3] 

docker rmi hello-world

docker rmi -f hello-world

 

쉘 기반으로 한꺼번에 삭제하기

docker rmi -f $(docker images -q)

-- container 삭제
docker rm -f $(docker ps -aq --filter ancestor=hello-world)

 

 

사용하지 않는 이미지 삭제하기

docker image prune

'Docker' 카테고리의 다른 글

Docker 설치  (0) 2023.09.19
Docker Volume  (0) 2022.11.13
Docker 개요  (0) 2022.11.04
Docker 사용법  (0) 2022.11.03

[ Linux Ubuntu ]

우선 기존에 설치된 docker 삭제하고

데이터, config, symlink와 service 파일도 정리한다.

sudo apt get remove docker-desktop
rm -r $HOME/.docker/desktop
sudo rm /usr/local/bin/com.docker.cli
sudo apt purge docker-desktop

 

Docker 설치 전 package repository 업데이트

sudo apt-get update

 

Docker Repository설치, 필요한 package와 GPG 키 설치, Docker 공식 apt를 저장소에 추가

sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

 

Docker SW 설치

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

 

Docker 설치 버전과 프로세스 확인

docker --version

sudo systemctl status docker

 

예제 hello-world image 실행

sudo docker run hello-world

 

[ 사용자 권한 ]

Docker 설치하면 root가 아닌 일반 사용자는 오류가 발생한다.

이런 경우 docker group에 사용자를 할당 해줘야 한다

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: 
Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json": dial unix /var/run/docker.sock: connect: permission denied

 

먼저 docker 그룹 생성하고 사용자를 그룹에 할당한다

Docker를 설치하면 docker 그룹이 자동으로 생성되지만 없으면 새로 생성한다.

재접속하거나 newgrop으로 그룹을 다시 시작한다.

cat /etc/group
cat /etc/passwd

sudo groupadd docker

sudo usermod -aG docker $USER

newgrp docker

 

 

[참조] https://docs.docker.com/engine/install/ubuntu/

'Docker' 카테고리의 다른 글

Docker - image  (0) 2023.09.19
Docker Volume  (0) 2022.11.13
Docker 개요  (0) 2022.11.04
Docker 사용법  (0) 2022.11.03

도커 볼륨 (Volume)

도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 되며 
컨테이너의 변경 사항만 별도로 저장해서 각 컨테이너의 정보를 보존한다.

컨테이너 실행 후 내부에서 생성된 파일이나 데이터는 컨테이너가 삭제되면 함께 사라진다.
컨테이너의 데이터를 영속성(persistent) 데이터로 활용할 수 있는 방법이 바로 볼륨이다.

컨테이너 자체는 상태가 없고 상태를 결정하는 데이터를 외부에 저장/관리하여
컨터이너가 삭제되도 데이터가 보존되도록 하는 stateless 컨테이너 설계가 중요

 

 

볼륨을 활용하는 방법에는 여러 가지가 있다 .

호스트와 볼륨을 공유, 볼륨을 사용하는 컨테이너를 공유, 도커 자체 볼륨을 활용하는 방법이다.

○ 호스트 볼륨 공유

-v 옵션을 이용해 호스트 위치를 지정하고 컨테이너에서 참조할 path명을 설정한다.

-v [호스트 디렉토리:컨테이너 디렉토리]

 

호스트 d:\docker\volume 디렉토리를 컨테이너에서 volume이란 Path로 공유한다.

여러 컨테이너에서 동일한 호스트 디렉토리를 공유할 수 있다.

 

docker run -v d:\docker\volume:/volume --rm -it --name myvol myvolume:1.0
>cd volume
>touch vol.txt
--> d:\docker\volume\vol.txt

docker run -v d:\docker\volume:/volume --rm -it --name mycache mycache:0.0
>cd volume
>ls vol.txt


볼륨 컨테이너
-v 옵션을 사용하는 컨테이너를 다른 컨테이너에서 공유하여 볼륨을 사용한다.

docker run -v d:\docker\volume:/volume --rm -it --name myvol myvolume:1.0

docker run --rm -it --volumes-from myvol --name mycache  mycache:0.0
>cd volume
>ls vol.txt


○ 도커 볼륨
도커 자체에서 제공하는 볼륨을 활용하여 컨테이너에서 사용한다.

실제 물리적인 저장 위치를 고민할 필요가 없다.

-v [볼륨이름:컨테이너 디렉토리]

 

-- volume 생성
docker volume create myvol

 

-- volume 조회
docker volume ls

 

-- volume 구조
docker volume inspect myvol

 

-- 컨테이너에서 volume 사용
docker run -v myvol:/volume --rm -it --name myvol myvolume:1.0

 

-- 미사용 volume 삭제
docker volume prune

 

'Docker' 카테고리의 다른 글

Docker - image  (0) 2023.09.19
Docker 설치  (0) 2023.09.19
Docker 개요  (0) 2022.11.04
Docker 사용법  (0) 2022.11.03

도커(Docker)는 리눅스 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다.

 

컨테이너는 소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지다.

컨테이너는 운영체제 수준에서 CPU, 메모리, 스토리지, 네트워크 리소스를 쉽게 공유할 수 있게 해주며 컨테이너가 실제로 실행되는 환경에서 애플리케이션을 추상화할 수 있는 논리 패키징 메커니즘을 제공한다.

 

컨테이너는 OpenVZ, LXC, cri-o 등 여러 개가 있지만 도커가 사실상 표준으로 사용되고 있다

 

도커는 리눅스에서 운영 체제 수준 가상화의 추상화 및 자동화 계층을 추가적으로 제공한다.

리눅스 자체 기능인 namespace, cgroups, chroot 등과 같은 리눅스 커널의 기능들과 OverayFS, aufs와 같은 파일 시스템의 리소스 격리 기능을 사용하여  프로세스 단위의 독립된 가상 공간을 만든다.

도커는 리눅스 컨테이너에 여러 기능을 추가함으로써  애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 해준다.

 

도커 관련 프로젝트는 도커 컴포즈, 레지스트리, 도커허브, 도커 데스크탑 등 여러 가지가 있지만
도커라고 하면 일반적으로 도커 엔진을 의미한다.
도커 엔진은 컨테이너를 생성하고 관리하는 주체로써 컨테이너를 제어할 수 있는 다양한 기능을 제공하는 핵심기술로써

도커 엔진에서 사용하는 가장 중요한 요소가 이미지와 컨테이너

 

[Docker Architecture]

 

컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하고, 컨테이너 안에는 어플리케이션을 구동하는데 필요한

라이브러리 및 실행 파일만 존재한다.
도커 컨테이너는 호스트 OS 위에서 실행되는 격리된 공간이다.
컨테이너 내부에 수많은 SW를 설치하고 설정 파일을 수정해도 호스트 OS에는 영향을 끼치지 않는다.

컨테이너 내부에서 SW개발 및 라이브러리 설치 등의 작업을 마친 후 운영 환경에 배포할 경우
컨테이너를 도커 이미지로 패키징하여 운영 서버에서 실행할 수 있다.
운영 서버에서 SW 설치 및 라이브러리 의존성을 고민할 필요가 없다.
서비스 개발 환경을 다른 서버에서 컨테이너로 똑같이 복제할 수 있기 때문에 개발/운영 환경의 통합이 가능해진다.
컨테이너를 이미지로 만들어 배포하는 시간이 빠르고 가상화된 공간을 사용할때 성능 손실도 거의 없다.

 

○ 도커 이미지
컨테이너 생성할때 필요한 요소.

이미지는 여러 개의 계층으로 된 바이너리 파일, 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용된다.

이미지 이름은 [저장소이름]/[이미지이름]:[태그] 로 구성된다.
- 저장소 : 이미지 저장된 장소. 기본 저장소는 도커 허브(Docker Hub)
- 이미지이름 : 이미지 역할, 종류 등 나타내는 이름
- 태그 : 이미지 버전, 생략시 latest 사용

○ 도커 컨테이너
이미지 목적에 맞게 독립된 SW, 자원 및 네트워크을 사용할 수 있는 독립된 공간

대부분의 도커 컨테이너는 생성될 때 사용된 이미지의 종류에 따라 알맞은 설정 파일을 가지게 된다.

하나의 이미지로 부터 여러 개의 컨테이너를 생성 할 수 있다.

컨테이너는 이미지를 읽기 전용으로 사용, 변경된 내용은 컨테이너 내부에 저장하므로 원래 이미지에 영향을 미치지 않는다.

생성된 컨테이너는 독립된 파일시스템을 사용, 호스트와 분리되어 있으므로

특정 컨테이너에서 어떤 애플리케이션이 설치하거나 삭제되어도 다른 컨테이너와 호스트에는 영향이 없다.

 

 

 

 

'Docker' 카테고리의 다른 글

Docker - image  (0) 2023.09.19
Docker 설치  (0) 2023.09.19
Docker Volume  (0) 2022.11.13
Docker 사용법  (0) 2022.11.03


[Docker Command]
o docker 정보
docker info
docker -v


o 도커 이미지 조회
docker images


o 도커 이미지 다운로드
docker image repository 부터 Docker image 를 다운로드
private repository 사용 가능

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

docker pull ubuntu:18.04


o 도커 container 생성
이미지가 없는 경우는 이미지 다운로드 후 컨테이너 생성

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

docker create -i -t --name myub ubuntu:16.04
-i  상호 입출력
-t  tty활성화해서 bash 셀 사용
-it    -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션


o 도커 container 생성 & 실행

컨테이너가 없는 경우 생성, 있다면 실행
rm은 컨테이너 종료시 저장된 내용 사라짐

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

docker run --rm -it ubuntu:16.04
docker run --rm -it --name myserver ubuntu:16.04 /bin/bash


-d    detached mode 흔히 말하는 백그라운드 모드
-p    호스트와 컨테이너의 포트를 연결 (포워딩)
-v    호스트와 컨테이너의 디렉토리를 연결 (마운트)
-e    컨테이너 내에서 사용할 환경변수 설정
--name    컨테이너 이름 설정
--rm    프로세스 종료시 컨테이너 자동 제거
-i  상호 입출력
-t  tty활성화해서 bash 셀 사용
-it    -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
?link    컨테이너 연결 [컨테이너명:별칭]



o 도커 container 실행
컨테이너 ID나 이름을 이용하여 실행 / 진입  

docker start [OPTIONS] CONTAINER [CONTAINER...]

  -a, --attach               Attach STDOUT/STDERR and forward signals
      --detach-keys string   Override the key sequence for detaching a  container
  -i, --interactive          Attach container's STDIN

   
docker start -i myub
docker start -i 77d68f6b75f3
docker attach -i myub


o container command 실행

docker exec -it demo2 /bin/bash


o 도커 container exit
Ctrl + P,Q : 컨테이너를 종료하지 않고 exit
exit : 컨테이너 종료 후 exit


o 도커 container List
컨테이너 목록 조회
- PORTS : 컨테이너가 개방한 포트와 호스크 연결한 포트
- NAMES : 컨테이너 고유한 이름

docker ps [OPTIONS]

-a, --all             Show all containers (default shows just running)
-f, --filter filter   Filter output based on conditions provided
    --format string   Pretty-print containers using a Go template
-n, --last int        Show n last created containers (includes all   states) (default -1)
-l, --latest          Show the latest created container (includes all  states)
    --no-trunc        Don't truncate output
-q, --quiet           Only display container IDs
-s, --size            Display total file sizes


o 도커 container name 변경
docker create -i -t --name myub ubuntu:16.04
docker ps -a
docker rename vigorous_bhaskara myubt


o 도커 container 종료
docker stop myubt
docker stop $(docker ps -a -q)


o 도커 container 삭제
docker rm myubt
docker rm -f myubt


o 도커 image 삭제
docker rmi ubuntu 


o 도커 container 외부 노출
컨테이너는 가상 IP 주소 가짐. 기본 IP 172.17.0.x
기본적으로 도커가 설치면 호스트에서만 접근 가능, 외부에서 접근할 수 없음

host 8080 포트를 컨테이너 80포트로 연결
- http://172.29.32.1:7777  -> container:80
- localhost:7777은 연결 안됨

docker run -it -p 172.29.32.1:7777:80 --name webserver ubuntu:16.04


[ifconfig 설치]
apt update -y
apt install net-tools
ifconfig

[apache 설치]
apt-get update
apt-get install apache2 -y
service apach2 start

o Docker network
docker network ls
docker network inspect bridge

bride : 컨테이너 생성할때 자동으로 연결되는 docker() 브리지 활용
        172.17.0.x IP 대역을 순차적으로 할당


o 도커 container 로깅
docker logs [OPTIONS] CONTAINER

      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g.
                       2013-01-02T13:23:37Z) or relative (e.g. 42m for 42
                       minutes)
  -n, --tail string    Number of lines to show from the end of the logs
                       (default "all")
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g.
                       2013-01-02T13:23:37Z) or relative (e.g. 42m for 42
                       minutes)
                       
docker logs --tail 2 worddb
docker logs demo3
docker logs demo3 -f

-- log 옵션
docker run --rm -it --log-opt max-size=10k --log-opt max-file=3 ubuntu:16.04

-- syslog 설정
docker run --rm -d --name syslog_container --log-driver=syslog ubuntu:16.04 echo syslogtest

test 라는 이름의 busybox 이미지를 백그라운드에서 도커 컨테이너로 실행하여, 1초에 한 번씩 현재 시간을 출력
docker run --name demo3 -d busybox sh -c "while true; do $(echo date); sleep 1;done"


o 도커리소스 제한
-- 메모리
swap 메모리는 메모리의 2배로 설정, swap로 변경 가능(기본메모리보다 커야함)

docker run --rm -it --memory="1g" ubuntu:16.04
docker run --rm -it --memory=10m --memory--swap=50m ubuntu:16.04

-- CUP
1024를 기준으로 비율로 산정
docker run --rm -it --memory=100m --cpu-shares=1024 ubuntu:16.04
docker run --rm -it --memory=100m --cpu-shares=512 ubuntu:16.04

ps aux | grep stres

-- cpu 수 제한
cupset-cups=0.3은 1,3번째CPU, 0-2는 1,2,3번째 CPU
docker run --rm -it --memory=100m --cpuset-cpus=2 ubuntu:16.04
 
[htop] CPU 사용량 확인
agt-get install htop
yum -y install epel-release && yum -y install htop

 


o 도커 컨테이너 어플리케이션 구축
-d detached 모드로 백그라운드 실행
  사용자입력을 받지 않고 반드시 컨테이너에서 프로그램이 실행되어야 함
  포그라인드 프로그램이 실행하지 않으면 컨테이너는 종료됨
  docker ps로 확인할 수 없음-> ps -a 로 확인  
- link : 컨테이너에서 컨터이너로 접근.
  내부 IP와 포트를 사용하지 않고 컨테이터 alias로 접근
  컨테이너를 순차적으로 실행
 
docker run -d --name wordpressdb -e MYSQL_ROOT_PASSWORD=password 
      -e MYSQL_DATABASE=wordpress mysql:5.7
docker run --name wordpress -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_USER=root 
      -e WORDPRESS_DB_PASSWORK=password --link wordpressdb:mysql -p 80 wordpress

docker stop wordpress wordpressdb


o docker volume
docker run -d --name wordpressdb_v -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress 
      -v d:\\docker\NAS:/var/lib/mysql mysql:5.7
docker run --name wordpress_v -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_USER=root 
      -e WORDPRESS_DB_PASSWORK=password --link wordpressdb_v:mysql -p 80 wordpress

docker start -i wordpress_v
docker run --rm -it -v D://docker/home:/NAS ubuntu:16.04
docker run -d --name worddb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress 
      -v d:\\docker\home\mysql:/var/lib/mysql mysql:5.7
docker run -d --name word -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_USER=root 
      -e WORDPRESS_DB_PASSWORK=password --link worddb:mysql -p 80 wordpress

'Docker' 카테고리의 다른 글

Docker - image  (0) 2023.09.19
Docker 설치  (0) 2023.09.19
Docker Volume  (0) 2022.11.13
Docker 개요  (0) 2022.11.04

+ Recent posts