241230 도커 (설치, 기본명령어)

241230 에이콘 아카데미 수업에 기반하여 작성되었음을 알립니다.

 

도커
Docker (도커)는 컨테이너 기반의 오픈소스 가상화 플랫폼을 말한다. 가상화를 통해 배포 및 개발 환경을 구축해두는 것이다. 각 개인이 개발을 할 때 DB, 에디터, 서버 등등을 한명이 이미지화 시켜놓으면 다른 사람이 그 이미지를 가져다 사용한다면 개발 환경을 동일화시킬 수 있다. 개발 환경을 이미지화 시키는 것! 버전이 중요하다.
즉, Docker는 개발자가 컨테이너를 빌드, 배포, 실행, 업데이트, 관리할 수 있는 오픈 소스 플랫폼이다.

                                                          전가상화                                       반가상화 

반가상화 중 Container Runtime이 도커이다! 도커를 사용하면 OS를 별도로 설치할 필요가 없다. 중요한 점 리눅스 OS에서만 도커를 사용할 수 있다. 리눅스만이 리눅스 컨테이너를 가질 수 있기 때문이다.
LXC에는 cgroups, namespace가 있는데 윈도우나 맥에는 없다.

리눅스에 도커를 설치, 컨테이너를 운영할 수 있다. 여러 컨테이너 안에 리눅스 서버, DB, 자바를 설치할 수 있다.
이러한 개발 환경들을 캡처하듯이 이미지를 뜰 수 있고 이 이미지를 다른 사람들과 공유해서 사용할 수 있다.
hub.docker.com에서 공유! Github와 비슷한 역할 데이터 공유가 아니라 개발 환경을 공유하는 것!!

윈도우나 맥에서도 리눅스 환경을 만들 수 있어서 도커를 사용할 수 있다. 서버는 리눅스 환경에서만 운영하는 것이 기본이다!!

도커는 엄밀히 말하면 개발자의 업무 영역은 아니지만 현재 취업 시장 특성상 개발자 한명에게 많은 역할을 원하는 경우가 많으니 할 줄 안다면 좋은 기술을 가지게 되는 것이다.

🙏 dockerhub
🙏 Docker란 무엇입니까?
🙏 Docker, K8s, DevOps

우분투 도커 설치 실습

🙏 Ubuntu에 Docker client 설치

 

1. VMware 실행

 

2. 우분투 시스템 패키지 업데이트

$ sudo apt-get update

 

3. 필요한 패키지 설치

$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

 

4. Docker의 공식 GPG키를 추가

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

 

5. 시스템 패키지 업데이트

$ sudo apt-get update

 

6. Docker 설치

(EE(Enterprise Edition): 유료, CE(Community Edition): 무료로 제공되는 도커 엔진으로서, 별도의 기술 지원 및 서비스를 제공하지는 않지만 도커 엔진 자체의 핵심적인 기능을 사용 가능).
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

 

6-1 도커 설치 에러 시

아래와 같은 방법으로 설치

1) 기존 Docker 패키지 제거 (이미 설치되어 있는 경우)

$ sudo apt-get remove docker docker-engine docker.io containerd runc

2) 패키지 업데이트 및 필수 패키지 설치

$ sudo apt-get update

$ sudo apt-get install ca-certificates curl gnupg lsb-release

3) Docker의 공식 GPG 키 추가

$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

4) Docker 리포지토리 설정

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5) 패키지 목록 업데이트

$ sudo apt-get update

6) Docker 엔진 설치

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

7) Docker 서비스 시작 및 확인

$ sudo systemctl start docker
$ sudo systemctl enable docker
$ sudo systemctl status docker

(q로 빠져나오기)

 

7. Docker 설치 확인

$ sudo docker version


윈도우에서 리눅스 환경을 설정하고 도커 데스크탑설치

🙏 Windows에 Docker Desktop 설치

 

1. 자신의 컴에 설치된 CPU가 가상화를 지원해야 한다. 먼저 확인 필요!

컨트롤 쉬프트 이에쓰씨 - 성능 - 가상화: 사용 확인!

 

2. 윈도우 시작 메뉴에서 [제어판] -> [프로그램] -> [프로그램 및 기능] -> [Windows 기능켜기/끄기]를 클릭한다.

아래 그림 처럼 두 개의 기능을 활성화해 준다. 컴퓨터를 재부팅~

 

3. 리눅스 커널을 내려 받아 실행하면 리눅스 커널이 업데이트 된다.

아래 URL을 클릭하면 다운로드됨.
 http://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

 

4. 윈도우용 도커 데스탑 다운로드 후 설치하기

https://docs.docker.com/desktop/install/windows-install/

 

Docker Desktop Installer.exe 를 실행(관리자 권한 사용 권장)한다.

설치 끄트머리에서 'close and logout' 버튼을 누르면 wondows 가 재부팅 된다.

 

5.  화면에 만들어진 Docker Desktop 아이콘을 실행해 준다.

 

6. Windows PowerShell

docker version

 

7. Docker Login을 해 보자.     

먼저 https://hub.docker.com/ 사이트에 접속해 로그인 정보를 만들어 준다. id와 password를 잊으면 안돼~~~

 

8) PowerShell 프롬프트에서 login 명령을 실행해 주자.

> docker login

 

성공적으로 로그인이 됨. Docker Desktop 화면에서 로그인해도 됨. 그러면 docker hub와 연결된다. 


로그아웃
> docker logout

참고 : docker login 시 username:어쩌구 입력 후 password:저쩌구 했을 때
permission denied while trying to connect to the Docker daemon socket at unix:/
에러가 나오면 docker group에 해당 유저를 추가해 주어야 한다.
보통은 docker group이 생기지만, 혹시 없으면 생성해준다. (일단 얘는 통과)
$ sudo groupadd docker
docker group에 해당 유저를 추가
$ sudo usermod -aG docker $USER
로그아웃 후 다시 로그인하거나 다음 명령어를 실행시켜야 적용이 된다.
$ newgrp docker
$ docker login 또는 $ reboot

Docker 기본 명령어

🙏 Docker 명령어의 기본 형태

 

1. 도커 명령어를 관리자 권한으로 사용해야하는데 불편!

 

 

2. 일반 계정에 수퍼 유저 권한 주기

user1@myubuntu:~$ su - root
암호:
su: 인증 실패  <--- 이렇게 나오는 것이 당연. root 암호를 설치할 때부터 준적입 없기 때문. 이제 root 암호를 주기로 하자. 

user1@myubuntu:~$ sudo passwd root
새 암호: 12345
잘못된 비밀번호: 암호는 8 개의 문자 보다 짧습니다
새 암호 다시 입력:
passwd: 암호를 성공적으로 업데이트했습니다

user1
@myubuntu:~$ su - root
암호: 12345

root@myubuntu:~# ls
snap

일반 계정인 user1에 docker 명령에 대해 root 권한을 부여해 준다.
root@myubuntu:~# usermod -a -G docker user

root@myubuntu:~# su - user1

도커그룹 추가

user에 절대 권한 부여, sudo 쓸 필요 없다.

 

본격적으로 도커 명령어를 실습해보자!

$ docker image ls / docker images

 

hub.docker.com 에서 이미지를 가져와보자!

nginx 검색

 

검색이 안되면 DNS 설정해줘야함!

DNS=8.8.8.8 8.8.4.4.

 

docker search nginx

docker pull nginx

docker images

nginx 이미지 설치된 모습

 

docker rmi

레포지토리, 태그, 이미지 아이디

 

docker search ubuntu

docker search ubuntu | head -n 5

 

docker pull ubuntu:latest

 

docker images

 

ls -a

도커는 가상화이기 때문에 실제로는 볼 수 없다.

 

sudo ls -l /var/lib/docker/overlay2

물리적으로 도커 이미지 확인하는 방법

 

$ docker create -it --name ubuntu1 ubuntu:latest /bin/bash

컨테이너 만들기

 

$ docker container ls

실행되고 있는 컨테이너만 보여줌

 

$ docker container ls -a

 

$ docker ps = $ docker container ls

$ docker ps -a = $ docker container ls -a

 

컨테이너 실행하기

$ docker start -ai ubuntu1

 

# uname -a

 

# exit

 

$ docker ps -a

 

$ docker stop ubuntu1

 

컨테이너 삭제

$ docker rm ubuntu1

컨테이너만 삭제됨, 이미지는 그대로있어 컨테이너는 다시 만들 수 있다.

 

이미지 삭제

$ docker rmi b1d9df8ab815

 

$ docker run -it --name ubuntu1 ubuntu:latest /bin/bash

이미 이미지가 있다면 풀은 안함, 이미지가 없다면 해당 풀하고 크리에이트, 실행까지해줌

 

우분투끼리 파일 주고 받기

 

$ docker cp test.txt ubuntu1:/

test.txt가 들어와있는 모습


MariaDB 설치

 

$ docker pull mariadb / $ docker pull mariadb:latest

 

$ docker run --name maria-container -e MYSQL_ROOT_PASSWORD=1111 -d mariadb:latest

 

$ docker exec -it maria-container mariadb -u root -p

 

 

마리아디비를 빠져나오고 컨테이너를 중지시키면 데이터가 살아있을까?

데이터는 살아있다! 컨테이너가 살아있기 때문에!

 

다른 사람이 이미지를 풀받고 다른 사람이 이미지를 열면 데이터는 없다. 그래서 데이터는 꼭 백업을 해두어야한다.

이미지는 데이터를 가져가지 않음

 

컨테이너를 중지시켰다가 다시 들어가도 데이터는 저장된 채로 있다.

 

컨테이너가 날아가면 데이터도 당연히 같이 날아감!

 

이미지는 컨테이너를 보관하는 역할만 할 뿐, 실질적인 기능들은 컨테이너안에서 이루어진다.

컨테이너는 독립적이다. 다른 컨테이너에 영향을 주지 않음


Dockerfile로 도커 컨테이너 build

 

🙏 Dockerfile로 도커 컨테이너 build

 

컨테이너 빌드하는 실행 순서는 다음과 같다.

 1) 디렉터리를 준비하여 이미지에 포함시킬 파일들을 모음

 2) Dockerfile을 작성

 3) 컨테이너에서 실행할 애플리케이션 코드를 작성하고 유닛 테스트를 실행

 4) 이미지를 빌드

 5) 컨테이너를 실행하고 동작을 확인

 

 

 

FROM alpine:latest

RUN apk update && apk add figlet

ADD ./message /message

CMD cat /message | figlet

 

 

 

 메세지를 안만들어줘서 에러