[Docker] 도커 설치/작동확인/Nginx 띄워보기
by Choi HyeSun
Docker 설치
Docker의 클라이언트 툴
-
Docker는 Linux 커널 기능을 사용하기 때문에 보통은 Linux 배포판 상에서 작동
- 개발 환경에서 이용하기 위한 클라이언트 PC용 툴을 제공
-
Docker for Mac
-
macOS용 ‘Docker for Mac’
-
macOS상에서 네이티브 애플리케이션으로 움직임
-
macOS 10.10 Yosemite에서 이용 가능하게 된 Hypervisor 프레임워크인 ‘xhyve’를 사용
-
-
Docker for Windows
-
windows용 ‘Docker for Windows’
-
Windows 10 이후에 이용가능하게 됨
-
Microsoft가 제공하는 하이퍼바이저인 x64용 가상화 시스템 ‘Hyper-V’를 사용
-
Windows 10 Pro, Windows 10 Enterprise, Windows 10 Education에서 작동
-
OS에서 Hyper-V를 유효화하면 Oracle VirtualBox와 같은 다른 가상화 툴은 사용할 수 없음!
-
-
Docker ToolBox
-
Oracle이 제공하는 가상화 툴
-
위의 두 개를 모두 사용할 수 없는 오래된 머신을 사용할 때 사용
-
Docker for Mac 17.12.0-ce Edge, Docker for Windows 18.02.0-ce Edge 이후 버전
Docker 컨테이너의 오케스트레이션 툴인 “Kubernetes”가 포함
다운로드
-
Docker for Mac
-
Docker for Windows
-
Docker ToolBox
-
Kitematic
CentOS에서 Docker 다운로드
-
공식문서 LINK
-
기존 버전 삭제
$ sudo yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 설치1. 필요한 유틸리티 선 설치
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
- 설치 2. stable 레포 추가
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 설치 3. 최신버전 설치
$ sudo yum install -y docker-ce docker-ce-cli containerd.io
- 실행
sudo systemctl start docker
- HelloWorld 테스트 실행
sudo docker run hello-world
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Docker 작동 확인
Hello world 문자 띄워보기
-
docker container run : Docker 컨테이너를 작성 및 실행
-
docker container run <Docker 이미지명> <실행할 명령>
-
docker container run : 컨테이너를 작성 및 싫애
-
<Docker 이미지명> : 바탕이 되는 Docker 이미지
-
<실행할 명령> : 컨테이너 안에서 실행할 명령
-
-
docker container run ubuntu:latest /bin/echo ‘Hello world’
// 이미지 없을 때
$ sudo docker container run ubuntu:latest /bin/echo 'Hello world'
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
7ddbc47eeb70: Pull complete
c1bbdc448b72: Pull complete
8c3b70e39044: Pull complete
45d437916d57: Pull complete
Digest: sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d
Status: Downloaded newer image for ubuntu:latest
Hello world
// 이미지 있을 때
$ sudo docker container run ubuntu:latest /bin/echo 'Hello world'
Hello world
-
실행된 순서
-
Docker 컨테이너의 바탕이 되는 이미지를 확인, 없다면 Docker 레파지토리에서 Docker 이미지를 다운로드
-
다운로드 완료되거나, 있다면 컨테이너가 시작됨
-
Linux의 echo 명령이 실행
-
-
로컬 캐시
- 로컬 환경에 다운로드 된 Docker 이미지
Docker 버전 확인
- docker version 명령을 통해 설치한 Docker 버전 확인
sudo docker version
Client: Docker Engine - Community
Version: 19.03.4
API version: 1.40
Go version: go1.12.10
Git commit: 9013bf583a
Built: Fri Oct 18 15:52:22 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.4
API version: 1.40 (minimum version 1.12)
Go version: go1.12.10
Git commit: 9013bf583a
Built: Fri Oct 18 15:50:54 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
Docker 실행 환경 확인
- docker system info 명령을 통해 Docker 실행 환경의 상세 설정을 표시
$ sudo docker system info
Client:
Debug Mode: false
Server:
Containers: 6 // 컨테이너 수
Running: 0
Paused: 0
Stopped: 6
Images: 145
Server Version: 19.03.4 // Docker 버전
Storage Driver: overlay2 // Storage Driver 종류
Backing Filesystem: xfs
Supports d_type: false
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-693.2.2.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux // OS 종류
Architecture: x86_64 // 아키텍쳐
CPUs: 2
Total Memory: 3.693GiB
Name: dev-chs001-ncl
ID: RABD:SMHH:GDIZ:MU5X:OMOZ:3PSA:BQHY:GUY2:2QQQ:U2UN:A5AI:72IM
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Docker 디스크 이용 상황 확인
- docker system df 명령을 통해 Docker가 사용하고 있는 디스크의 이용 상황을 표시
$ sudo docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 7 5 3.458GB 1.909GB (55%)
Containers 6 0 53.87MB 53.87MB (100%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
- 상세내용 확인시 -v 옵션
Nginx 띄워보기
Nginx Docker 이미지 다운로드
-
이미지 다운로드
$ sudo docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
8d691f585fa8: Pull complete
5b07f4e08ad0: Pull complete
abc291867bca: Pull complete
Digest: sha256:922c815aa4df050d4df476e92daed4231f466acc8ee90e0e774951b0fd7195a4
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
- 이미지 확인
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 540a289bab6c Less than a second ago 126MB
// 동일
$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 540a289bab6c Less than a second ago 126MB
Nginx 작동
-
이미지 nginx를 사용하여 webserver라는 이름의 컨테이너 기동
-
포트 허용 > 호스트OS 8080포트와 컨테이너 80포트 연결
-
정상완료되면 컨테이너 ID가 나타남
-
$ docker container run --name webserver -d -p 8080:80 nginx
68bb8c1317fa62cd0f631b3f429ea439b8805789f7e529f236d87e784fdbc280
// container 제외해도 동일
$ docker run --name webserver -d -p 8080:80 nginx
Nginx 작동 확인
- 호스트OS IP 주소의 8080포트로 웹 브라우저에서 요청 → nginx 초기화면 나타남
- 컨테이너 확인
$ sudo docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68bb8c1317fa nginx "nginx -g 'daemon of…" 4 minutes ago Up 4 minutes 0.0.0.0:8080->80/tcp webserver
// container 제외해도 동일
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68bb8c1317fa nginx "nginx -g 'daemon of…" 4 minutes ago Up 4 minutes 0.0.0.0:8080->80/tcp webserver
- 컨테이너 상세 내용 확인
// 모두 동일
$ sudo docker container stats webserver
$ sudo docker stats webserve
$ sudo docker container stats 68bb8c1317fa
$ sudo docker stats 68bb8c1317fa
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
68bb8c1317fa webserver 0.00% 1.41MiB / 3.701GiB 0.04% 2.33kB / 2.26kB 0B / 0B 2
Nginx 기동 및 정지
- Docker 컨테이너 정지
$ docker stop webserver
webserver
// ID를 써도 됨
$ docker stop 68bb8c1317fa
68bb8c1317fa
- 정지된 컨테이너는 ps -a로 조회해야 함
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68bb8c1317fa nginx "nginx -g 'daemon of…" 9 minutes ago Exited (0) 45 seconds ago webserver
- Docker 컨테이너 기동
$ docker start webserver
webserver
// ID를 써도 됨
$ docker start 68bb8c1317fa
68bb8c1317fa
Subscribe via RSS