자동 설치 스크립트 파일 다운로드
itwillbs@dockerhost:~$ curl -fsSL https://get.docker.com -o get-docker.sh
ll
total 112
drwxr-x--- 14 itwillbs itwillbs 4096 Jan 26 05:30 ./
drwxr-xr-x 3 root root 4096 Jan 12 06:08 ../
-rw------- 1 itwillbs itwillbs 118 Jan 12 08:38 .bash_history
-rw-r--r-- 1 itwillbs itwillbs 220 Jan 6 2022 .bash_logout
-rw-r--r-- 1 itwillbs itwillbs 3771 Jan 6 2022 .bashrc
drwx------ 10 itwillbs itwillbs 4096 Jan 26 05:26 .cache/
drwx------ 11 itwillbs itwillbs 4096 Jan 12 08:13 .config/
drwxr-xr-x 2 itwillbs itwillbs 4096 Jan 12 07:38 Desktop/
drwxr-xr-x 2 itwillbs itwillbs 4096 Jan 12 07:38 Documents/
drwxr-xr-x 2 itwillbs itwillbs 4096 Jan 12 07:38 Downloads/
-rw-rw-r-- 1 itwillbs itwillbs 19859 Jan 26 05:30 get-docker.sh
…
itwillbs@dockerhost:~$ sudo chmod +x get-docker.sh
[sudo] password for itwillbs: 1234
itwillbs@dockerhost:~$ ll
total 112
drwxr-x--- 14 itwillbs itwillbs 4096 Jan 26 05:30 ./
drwxr-xr-x 3 root root 4096 Jan 12 06:08 ../
-rw------- 1 itwillbs itwillbs 118 Jan 12 08:38 .bash_history
-rw-r--r-- 1 itwillbs itwillbs 220 Jan 6 2022 .bash_logout
-rw-r--r-- 1 itwillbs itwillbs 3771 Jan 6 2022 .bashrc
drwx------ 10 itwillbs itwillbs 4096 Jan 26 05:26 .cache/
drwx------ 11 itwillbs itwillbs 4096 Jan 12 08:13 .config/
drwxr-xr-x 2 itwillbs itwillbs 4096 Jan 12 07:38 Desktop/
drwxr-xr-x 2 itwillbs itwillbs 4096 Jan 12 07:38 Documents/
drwxr-xr-x 2 itwillbs itwillbs 4096 Jan 12 07:38 Downloads/
-rwxrwxr-x 1 itwillbs itwillbs 19859 Jan 26 05:30 get-docker.sh*
…
설치 스크립트 실행
해당 스크립트 파일은 운영체제에 맞는 설치 과정을 자동으로 수행해주는 스크립트이다.
itwillbs@dockerhost:~$ sudo sh get-docker.sh
Docker는 기본적으로 root 권한을 사용하여 컨테이너를 관리하는 방식이다.
rootless 모드로도 일부 작은 가능하지만 제한이 있기 때문에 Docker의 모든 작업을 위해서는 root의 권한을 사용할 수 있어야 한다.
실습에 사용하는 itwillbs 계정은 root의 권한을 일시적으로 빌려올 수 있는 sudo 계정으로 docker 관련 명령어 입력 시 sudo 키워드를 붙여서 입력하면 권한 관련 문제를 해결 할 수 있다.
sudo docker version
[sudo] password for itwillbs: 1234
Client: Docker Engine - Community
Version: 20.10.23
API version: 1.41
Go version: go1.18.10
Git commit: 7155243
Built: Thu Jan 19 17:45:08 2023
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.23
API version: 1.41 (minimum version 1.12)
Go version: go1.18.10
Git commit: 6051f14
Built: Thu Jan 19 17:42:57 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.15
GitCommit: 5b842e528e99d4d4c1686467debf2bd4b88ecd86
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
접속 중인 계정 docker, sudo 그룹에 추가하기
$(whoami) 는 쉘 명령어로 현재 접속 중인 계정명을 출력해준다.
itwillbs@dockerhost:~$ sudo usermod -a -G docker $(whoami)
itwillbs@dockerhost:~$ sudo usermod -a -G sudo $(whoami)
가상머신 재시작으로 설정값 적용 또는 로그아웃 후 재접속
itwillbs@dockerhost:~$ sudo reboot
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
205dae5015e7: Pull complete
Digest: sha256:7b3ccabffc97de872a30dfd234fd972a66d247c8cfc69b0550f276481852627c
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 66ba00ad3de8 3 weeks ago 4.87MB
docker run busybox echo 'Hello World'
Hello World
1~8의 과정으로 순환하며 작업을 진행하게 된다.
1. 애플리케이션 코드 개발
2. 베이스 이미지를 이용한 dockerfile 작성
3. dockerfile build를 통한 새로운 이미지 생성
4. 생성된 이미지를 이용한 컨테이너 실행
5. 컨테이너 애플리케이션 서비스 테스트
6. 로컬 및 원격 저장소 이미지 저장(push)
7. 깃허브와 같은 형상관리 도구를 통하여 dockerfile 관리
8. 동일 환경에서의 지속적 애플리케이션 개발 수행
1. 도커 이미지 구조의 기본 운영체제 레이어들을 쌓는다.
2. 운영체제 베이스 이미지 위에 톰캣을 설치한 레이어를 올린다.
3. 톰캣 서비스에 필요한 리소스 정보 및 환경 정보가 포함된 레이어를 올린다. 이렇게 만들어진 이미지들은 불변(immutable)의 읽기 전용 레이어의 집합 → 유니언 파일 시스템이라 한다.
4. 도커 이미지를 실행하면 이미지를 가져다가 컨테이너를 생성할 수 있다. 각 컨테이너에서 발생한 모든 변경 정보들을 저장하기 위해서 읽고 쓰기가 가능한 레이어를 올리고 여기에 저장하게 된다.