우분투 도커 설치 및 컨테이너 설치

개발할래·2023년 8월 4일

Docker

목록 보기
1/4
  1. 도커란

도커란

2

내용

우분트 서버에 도커를 설치해보자.
도커 파일로 이미지를 만들어 보자 = build
태그를 달고 도커 허브에 이미지를 올리자. Registry = 도커 허브에 push
도커 저장소에서 이미지 가져와 서비스해보자. pull & run

3
KTCloud 서버 생성
*참고로 KTCloud는 신규회원 가입시 3개월 동안 사용가능한 100만 포인트 지급

<2> ubuntu 18.04 login과 업데이트

1
login as:
ubuntu
sudo su -

2
apt update

<3> 서버 정보 확인

1
버전 확인
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.2 LTS
Release: 20.04
Codename: focal

2
프로세스 확인
ps auf
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
ubuntu 1326 0.0 0.5 10028 5148 pts/0 Ss 05:06 0:00 -bash
root 1343 0.0 0.4 11172 4748 pts/0 S 05:06 0:00 _ sudo su -
root 1344 0.0 0.4 10132 4312 pts/0 S 05:06 0:00 _ su -
root 1345 0.0 0.5 10028 5032 pts/0 S 05:06 0:00 _ -
root 1689 0.0 0.3 10616 3380 pts/0 R+ 05:07 0:00 p
root 540 0.0 0.1 5828 1844 tty1 Ss+ 05:04 0:00 /sbin/agetty
root 517 0.0 0.2 7352 2104 ttyS0 Ss+ 05:04 0:00 /sbin/agetty

pstree

systemd─┬─accounts-daemon───2*[{accounts-daemon}]

    ├─acpid

    ├─2*[agetty]

    ├─amazon-ssm-agen─┬─ssm-agent-worke───7*[{ssm-agent-worke}]

    │                 └─7*[{amazon-ssm-agen}]

    ├─atd

    ├─cron

    ├─dbus-daemon

    ├─multipathd───6*[{multipathd}]

    ├─networkd-dispat

    ├─packagekitd───2*[{packagekitd}]

    ├─polkitd───2*[{polkitd}]

    ├─rsyslogd───3*[{rsyslogd}]

    ├─snapd───11*[{snapd}]

    ├─sshd───sshd───sshd───bash───sudo───su───bash───pstree

    ├─systemd───(sd-pam)

    ├─systemd-journal

    ├─systemd-logind

    ├─systemd-network

    ├─systemd-resolve

    ├─systemd-timesyn───{systemd-timesyn}

    ├─systemd-udevd

    └─unattended-upgr───{unattended-upgr}

3
IP 확인 ?

ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
link/ether 02:61:e3:02:0f:c6 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.116/24 brd 10.0.0.255 scope global dynamic ens5
valid_lft 3329sec preferred_lft 3329sec
inet6 fe80::61:e3ff:fe02:fc6/64 scope link
valid_lft forever preferred_lft forever

4
ip route show
default via 10.0.0.1 dev ens5 proto dhcp src 10.0.0.116 metric 100
10.0.0.0/24 dev ens5 proto kernel scope link src 10.0.0.116
10.0.0.1 dev ens5 proto dhcp scope link src 10.0.0.116 metric 100

5
서버에 설정된 iptable 보안 정책 확인
IPTABLE 확인해보면 기본으로 모두 열려있다.

iptables -t filter -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT

6
df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/root ext4 7.7G 1.3G 6.5G 17% /
devtmpfs devtmpfs 484M 0 484M 0% /dev
tmpfs tmpfs 490M 0 490M 0% /dev/shm
tmpfs tmpfs 98M 784K 98M 1% /run
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 490M 0 490M 0% /sys/fs/cgroup
/dev/loop0 squashfs 34M 34M 0 100% /snap/amazon-ssm-agent/3552
/dev/loop1 squashfs 56M 56M 0 100% /snap/core18/1997
/dev/loop2 squashfs 71M 71M 0 100% /snap/lxd/19647
/dev/loop3 squashfs 33M 33M 0 100% /snap/snapd/11588
tmpfs tmpfs 98M 0 98M 0% /run/user/1000

root@ip-10-0-0-116:~# df -h --type=ext4
Filesystem Size Used Avail Use% Mounted on
/dev/root 7.7G 1.5G 6.3G 19% /

7
유틸 설치
apt-get install bridge-utils net-tools jq tree -y

<4> 도커 설치

컨테이너는 도커가 설치된 어디에서나(온프라미스/클라우드 환경)에서 실행할수 있다.
도커 설치법

https://docs.docker.com/engine/install/ubuntu/

Install Docker Engine on Ubuntu
docs.docker.com

도커 다운을 위한 패키지 설치~

40 docker install.txt

1
도커 다운을 위한 필요한 패키지 설치
sudo su -

apt-get update && apt-get -y install apt-transport-https ca-certificates curl gnupg lsb-release

참고
https://roseline124.github.io/kuberdocker/2019/07/17/docker-study02.html

2
도커 다운로드
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

3
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4
cat /etc/apt/sources.list.d/docker.list

5

도커 설치

apt-get update && apt-get -y install docker-ce docker-ce-cli containerd.io

6
도커 정보 확인 ?
docker info

Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
scan: Docker Scan (Docker Inc., v0.8.0)

Server:
Containers: 0
:
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
:
ID: 35OU:VQTE:TKGY:N3IU:CGCP:ZNRR:WMSR:EDWB:5IVJ:4ZYM:WRCY:K5LO
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

7
도커 상태 확인 ?
systemctl status docker

docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-06-06 12:32:01 UTC; 4min 37s ago
TriggeredBy: docker.socket
Docs: https://docs.docker.com
Main PID: 2482 (dockerd)
Tasks: 8
Memory: 54.3M
CGroup: /system.slice/docker.service
└─2482 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Jun 06 12:32:00 ip-10-0-0-163 dockerd[2482]: time="2021-06-06T12:32:00.898013709Z" level=warning msg="Your kernel does not support CPU real>

Command 'tree' not found, but can be installed with:

snap install tree # version 1.8.0+pkg-3fd6, or
apt install tree # version 1.8.0-1
See 'snap info tree' for additional versions.

8

버전 확인

docker version

9
도커 root 디렉토리 정보 확인 ?

tree -L 3 /var/lib/docker
/var/lib/docker
├── buildkit
│ ├── cache.db
│ ├── containerdmeta.db
│ ├── content
│ │ └── ingest
│ ├── executor
│ ├── metadata_v2.db
│ └── snapshots.db
├── containers
├── image
│ └── overlay2
│ ├── distribution
│ ├── imagedb
│ ├── layerdb
│ └── repositories.json
├── network
│ └── files
│ └── local-kv.db
├── overlay2
│ └── l
├── plugins
│ ├── storage
│ │ └── ingest
│ └── tmp
├── runtimes
├── swarm
├── tmp
├── trust
└── volumes
├── backingFsBlockDev
└── metadata.db

23 directories, 8 files

<5> 도커 설치 후 확인

1
pstree
systemd─┬─accounts-daemon───2[{accounts-daemon}]
├─acpid
├─2
[agetty]
├─amazon-ssm-agen─┬─ssm-agent-worke───7[{ssm-agent-worke}]
│ └─7
[{amazon-ssm-agen}]
├─atd
├─containerd───8[{containerd}]
├─cron
├─dbus-daemon
├─dockerd───7
[{dockerd}]
├─multipathd───6[{multipathd}]
├─networkd-dispat
├─packagekitd───2
[{packagekitd}]
├─polkitd───2[{polkitd}]
├─rsyslogd───3
[{rsyslogd}]
├─snapd───11*[{snapd}]
├─sshd───sshd───sshd───bash───sudo───su───bash───pstree
├─systemd───(sd-pam)
├─systemd-journal
├─systemd-logind
├─systemd-network
├─systemd-resolve
├─systemd-timesyn───{systemd-timesyn}
├─systemd-udevd
└─unattended-upgr───{unattended-upgr}

2
IP 확인하면 docker0가 생겼다.
DOWN 상태

ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
link/ether 02:61:e3:02:0f:c6 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.116/24 brd 10.0.0.255 scope global dynamic ens5
valid_lft 2369sec preferred_lft 2369sec
inet6 fe80::61:e3ff:fe02:fc6/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:64:35:16:c8 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever

3
브리지 정보 확인
brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242643516c8 no

4
iptables를 보면 docker0 관련 추가 되었다
iptables -t filter -S
-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN

iptables를 보면 docker0 관련 뭐가 추가 되었다
iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N DOCKER
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A DOCKER -i docker0 -j RETURN

<6> AWS에 도커 서버 구성과 cowsay 컨테이너 실행

1

Docker 설치가 잘 되었다면 2번애서 바로 실습하기

설치가 잘 안되었다면 AWS에서 CloudFromation으로 우분트에 도커 자동 설치후 진행

temp-ec2-serverchk.yaml

로그인

ubuntu

2
cowsay 컨테이너 사용해보기
apt install cowsay -y
Reading package lists... Done

3
cowsay hello 이름쓰기
cowsay hello seo


< hello seo >


    \   ^__^
     \  (oo)\_______
        (__)\       )\/\
            ||----w
            ||     

4
docker ps
실행중인 docker 확인

docker ps -a
종료된 docker까지 확인

5
컨테이너 실행
docker run docker/whalesay cowsay 'hi seo'


< hi seo >


\
 \
  \
                ##        .
          ## ## ##       ==
       ## ## ## ##      ===
   /""""""""""""""""___/ ===
     \______ o          __/
      \    \        __/
        \____\______/


6
docker images
REPOSITORY        TAG       IMAGE ID       CREATED       SIZE
docker/whalesay   latest    6b362a9f73eb   6 years ago   247MB

7
정상 종료된 exited (0) 된 contailer  확인
docker ps -a
CONTAINER ID   IMAGE COMMAND       CREATED              STATUS                          PORTS     NAMES
6ad1d0d07fe8   docker/whalesay   "cowsay 'hi seo'"   About a minute ago   Exited (0) About a minute ago             lucid_robinson


Exited (0) = 정상으로 종료된 상태라는 뜻이다.

8
공식 도커 허브  Registry에서 가져온것이다.

기본 레지스트리 주소 : docker.io 이다.  디폴트 경로



<레지스트리 이름> / <이미지 이름 > : <TAG>형식이다.
기본 사용 TAG = latest




<7>  docker.io 는  기본 경로에 포함 되어 있어 생략해도 된다.

1
docker images
REPOSITORY        TAG       IMAGE ID       CREATED       SIZE
docker/whalesay   latest    6b362a9f73eb   6 years ago   247MB

2
docker.io에서 가져오기 시도한다.
docker pull  docker/whalesay:latest
이미 존재한다고 표시 된다.


latest: Pulling from docker/whalesay
Image docker.io/docker/whalesay:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
e190868d63f8: Already exists
909cd34c6fd7: Already exists
0b9bfabab7c1: Already exists


3
docker images
REPOSITORY        TAG       IMAGE ID       CREATED       SIZE
docker/whalesay   latest    6b362a9f73eb   6 years ago   247MB


docker ps -a
CONTAINER ID   IMAGE             COMMAND        CREATED         STATUS                     PORTS     NAMES
ea6c6693abbd   docker/whalesay   "cowsay soe"   7 minutes ago   Exited (0) 7 minutes ago             agitated_mclaren


4
컨테이너 이미지 이름만 확인


docker ps -a -q
ea6c6693abbd

5
지우기
docker rm $(docker ps -a -q)
ea6c6693abbd

6
지워진것 확인
docker ps -a -q
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES




<8>  nginx 컨테이너 실습


1

실습 내용 ?



공식 도커 허브  Registry에서 가져와서 사용해보기~

도커 허브에서 이미지를 가져온다.

컨테이너에서 Nginx를 실행한다.




2
docker run -d nginx



-d 는 Detached 모드로 컨테이너를 실행.

컨테이너를 백그라운드에서 동작

Unable to find image 'nginx:latest' locally

latest: Pulling from library/nginx

07aded7c29c6: Pull complete

bbe0b7acc89c: Pull complete

44ac32b0bba8: Pull complete

91d6e3e593db: Pull complete

8700267f2376: Pull complete



공식 도커 허브  Registry에서 가져온것이다.

기본 레지스트리 주소 : docker.io 이다.  디폴트 경로



3

docker ps

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES

4fdc8804dc31   nginx     "/docker-entrypoint.…"   56 seconds ago   Up 55 seconds   80/tcp    romantic_lehmann



4

실행중인 컨테이너의 ID만 확인

docker ps -q

4fdc8804dc31



5

컨테이너 상세 정보 확인

https://docs.docker.com/engine/reference/commandline/inspect/



docker inspect $(docker ps -q)



6

IP확인 ?

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)



ping 172.17.0.2

PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.

64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.072 ms

64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.051 ms



7

ip a

brctl show

bridge name     bridge id               STP enabled     interfaces

docker0         8000.0242966a7b18       no              vethe2cb9b6



8

curl로 웹 접속 테스트



curl `docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)`

<!DOCTYPE html>

<html>

<head>

<title>Welcome to nginx!</title>

<style>





curl 172.17.0.2



9

컨테이너 상세 정보 확인

docker inspect <CONTAINER_ID>

docker inspect $(docker ps -q)

docker inspect $(docker ps -q) | more



10

컨테이너 IP확인 ?

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)



11

컨테이너 로그 확인?

docker logs <CONTAINER_ID>

docker logs -f $(docker ps -q)



12

다른 터미널에서 질의

curl `docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)`



13

컨테이너에 명령어 전달법 ?



docker exec <CONTAINER_ID> <CMD>

nginx 컨테이너의 index.html 파일의 위치는 /usr/share/nginx/html/index.html

nginx 컨테이너에  ls 해서 /usr/share/nginx/html 의 경로에 뭐가 있는지 확인하는것이다.



docker exec $(docker ps -q) ls /usr/share/nginx/html

50x.html

index.html





nginx 컨테이너에  cat  해서 /usr/share/nginx/html/index.html 내용을 확인하는것이다.



docker exec $(docker ps -q) cat /usr/share/nginx/html/index.html

<!DOCTYPE html>

<html>

<head>

<title>Welcome to nginx!</title>

<style>

html { color-scheme: light dark; }





컨테이너 내부의 파일을 수정해보자!!!

docker exec $(docker ps -q) sh -c 'echo WebServer > /usr/share/nginx/html/index.html'



docker exec $(docker ps -q) curl -s localhost

WebServer

// 수정 되었다!!!





14

컨테이너 중단?



docker stop <CONTAINER_ID>



docker ps

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES

4fdc8804dc31   nginx     "/docker-entrypoint.…"   11 minutes ago   Up 11 minutes   80/tcp    romantic_lehmann



멈추기

docker stop $(docker ps -q)





15

현재 사용중인 컨테이너 확인?



docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES



종료된 컨테이너까지 확인 ?

docker ps -a

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS     NAMES

4fdc8804dc31   nginx     "/docker-entrypoint.…"   12 minutes ago   Exited (0) 30 seconds ago             romantic_lehmann



16

중단된 컨테이너 확인?

docker ps -a



중단된거 확인

docker start $(docker ps -aq)



확인

docker ps

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES

4fdc8804dc31   nginx     "/docker-entrypoint.…"   14 minutes ago   Up 16 seconds   80/tcp    romantic_lehmann





17

컨테이너 삭제?



docker rm <CONTAINER_ID>



중지

docker stop $(docker ps -q)



확인

docker ps -a

CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES

4fdc8804dc31   nginx     "/docker-entrypoint.…"   15 minutes ago   Exited (0) 10 seconds ago             romantic_lehmann



컨테이너 삭제

docker rm $(docker ps -aq) -f

4fdc8804dc31



18

종료된 컨테이너 전부 삭제

docker rm $(docker ps -a -q)



19

실행과 종료된 컨테이너 전부 삭제

docker rm -f $(docker ps -a -q)



확인

docker ps -a



이미지 확인

docker images

REPOSITORY        TAG       IMAGE ID       CREATED       SIZE

nginx             latest    f8f4ffc8092c   5 days ago    133MB

docker/whalesay   latest    6b362a9f73eb   6 years ago   247MB



20

이미지 삭제?

docker rmi



21

컨테이너 이미지는  다른 OS버전에서 설치 가능하다.



docker run -it ubuntu:16.04 bash



우분트 16.04 버전을 다운받고  해당 컨테이너를 설치하게 된다.



해당 컨테이너에서 버전 확인?



cat /etc/os-release

NAME="Ubuntu"

VERSION="16.04.7 LTS (Xenial Xerus)"

ID=ubuntu

ID_LIKE=debian

PRETTY_NAME="Ubuntu 16.04.7 LTS"



ps -ef

UID          PID    PPID  C STIME TTY          TIME CMD

root           1       0  0 10:13 pts/0    00:00:00 bash

root          12       1  0 10:15 pts/0    00:00:00 ps -ef



root@d8cf1ad5859f:/# exit





22

docker run -it centos bash



cat /etc/os-release

NAME="CentOS Linux"

VERSION="8"

ID="centos"

ID_LIKE="rhel fedora"

VERSION_ID="8"





23

도커 허브 (이미지 저장소) 계정 만들기
도커 허브(Docker Hub)는 도커 이미지 원격 저장소 입니다.

사용자가 도커 허브에 이미지를 업로드 하여 사용한다.

https://hub.docker.com/
masterseo11-g1002!






<9> 도커 파일 만들기


개발자가 도커파일을 생성한다.

빌드하면 도커 이미지가 만들어진다.






이미지 출처
https://cultivatehq.com/posts/docker/





1
테스트
mkdir dockerfile && cd dockerfile
echo 'Test Web page' > test.html
ls

2
도커 파일 만들기
100 dockerfile.txt

cat <<EOT> Dockerfile
FROM ubuntu:14.04
LABEL maintainer "topasvga"
LABEL "purpose"="practice"
RUN sed -i 's/archive.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install apache2 figlet -y
ADD test.html /var/www/html
WORKDIR /var/www/html
RUN ["/bin/bash", "-c", "echo Hello!  topasvga docker ! | figlet > /var/www/html/index.html"]
EXPOSE 80
CMD apachectl -DFOREGROUND
EOT


2
도커 빌드?
도커 파일을 읽어서 이미지 파일을 만드는것



docker build -t hello:1 ./


Sending build context to Docker daemon  3.072kB
Step 1/11 : FROM ubuntu:14.04
14.04: Pulling from library/ubuntu
:
Removing intermediate container b7eed1cae2f4
---> 78236e8ceba0
Successfully built 78236e8ceba0
Successfully tagged hello:1


3
생성된 이미지 확인 ?


docker images
REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
hello             1         592872f2bddc   13 seconds ago   222MB
ubuntu            14.04     13b66b487594   2 months ago     197MB
docker/whalesay   latest    6b362a9f73eb   6 years ago      247MB



<10> 이미지를 컨테이너에서 실행

1
hello1 이미지를 실행
호스트 8080 포트를 컨테이너 80 포트로 매핑함.
8080를 호출해봄  
curl localhost:8080


docker run -d -p 8080:80 --name webserver1 hello:1
// -d 백그라운드로 실행 , -p 포트 포워딩  , hello:1 라는 이미지를 실행 시켜라.

cb87aee3152a6f9f12f300713d94ed7bf597f9ed5f52ec0c11154c8a5ee6fb45

2
docker ps
CONTAINER ID   IMAGE     COMMAND      CREATED     STATUS      PORTS                        NAMES
cb87aee3152a   hello:1   "/bin/sh -c 'apachec…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp, :::8080->80/tcp   webserver                                                       1
//  이 컨테이너로 8080 으로  접속하면, 컨테이너 80으로 접속 된다.




3
curl localhost:8080
_   _      _ _       _   _
| | | | ___| | | ___ | | | |_ ___  _ __   __ _ _____   ____ _  __ _
| |_| |/ _ \ | |/ _ \| | | __/ _ \| '_ \ / _` / __\ \ / / _` |/ _`
|  _  |  __/ | | (_) |_| | || (_) | |_) | (_| \__ \\ V / (_| | (_|
|_| |_|\___|_|_|\___/(_)  \__\___/| .__/ \__,_|___/ \_/ \__, |\__,_
                                |_|                   |___/
   _            _               _
__| | ___   ___| | _____ _ __  |
/ _` |/ _ \ / __| |/ / _ \ '__| |
| (_| | (_) | (__|   <  __/ |    |_
\__,_|\___/ \___|_|\_\___|_|    (_)



4
curl localhost:8080/test.html
Test Web page
// add로 호스트에 있는것을 컨테이너에 추가한 결과이다.




5
허용 확인 ?
도커 Proxy가 만들어진다.



ps -ef |grep proxy
root       18221    2482  0 13:44 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.17.0.2 -container-port 80
root       18226    2482  0 13:44 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 8080 -container-ip 172.17.0.2 -container-port 80
root       18385    1282  0 13:49 pts/0    00:00:00 grep --color=auto proxy



6
8080 으로 시도하면,  컨테이너 80으로 접속



iptables -t nat -S |grep 8080
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 172.17.0.2:80

7
iptables -t filter -S |grep 80
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT




<11> 도커 이미지  업로드를 위해 태그 달기

1
이미지 이름 확인 과 변경


1
docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
hello        1         78236e8ceba0   9 minutes ago   222MB


2
이름 변경 ?
hello 1 을 topasvgahello:1 으로 변경해 보기


docker tag hello:1   masterseo11/topasvgahello:1
docker tag hello:1   도커허브 계정 / 이름 :1


root@ip-10-10-10-152:~/dockerfile# docker tag hello:1   masterseo11/topasvgahello:1


3
docker images
root@ip-10-10-10-152:~/dockerfile# docker images
REPOSITORY                  TAG       IMAGE ID       CREATED          SIZE
masterseo11/topasvgahello   1         592872f2bddc   15 minutes ago   222MB





<12> 도커 허브 계정생성과 로그인

도커 허브에 이미지를 올려서 사용하자!

1
사이트 접속
가입

2
docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username:  masterseo11-g1002!
Password:


root@ip-10-10-10-152:~/dockerfile# docker images
REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
hello             1         592872f2bddc   11 minutes ago   222MB
topasvgahello     1         592872f2bddc   11 minutes ago   222MB
ubuntu            14.04     13b66b487594   2 months ago     197MB
docker/whalesay   latest    6b362a9f73eb   6 years ago      247MB




<13>  push


도커 허브에 올리기?



만들고, 태그를 변경한 이미지를  Docker resistry 올리기



docker push masterseo11/topasvgahello:1





이미지 출처
http://erick.matsen.org/2018/04/19/docker.html






<14> 도커 허브에  이미지 올라간것  확인

도커허브 접속해서 확인하자


https://hub.docker.com/

Username:  masterseo11-g1002!





<15> 로컬에 있는 이미지  삭제하고 도커 이미지 실행해보자.

없으면 레파지토리에서  가져오는데, 제대로 가져 오는지 확인하는 것이다.

1
docker images

2
이미지 까지 전체 모두 삭제하기
docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q) -f && docker rmi $(docker images -q) -f

docker ps -a
docker images


<16>  도커 이미지 실행시키기, 로컬에 이미지가 없으면  레파지토리에서 가져옴


도커 허브에 올라간 이미지를 다른곳에서도 다운 받을수 있게 되었다!!!


1
docker run -d -p 8080:80 --name webserver masterseo11/topasvgahello:1
Unable to find image 'masterseo11/topasvgahello:1' locally

1: Pulling from masterseo11/topasvgahello

2e6e20c8e2e6: Pull complete

0551a797c01d: Pull complete

512123a864da: Pull complete

78c2f4a1b485: Pull complete

72dbc47708ba: Pull complete

fea73ff367f9: Pull complete

25fcbb10d6ac: Pull complete





<17> 확인


curl localhost:8080





<18>  모든 컨테이너 삭제

docker ps -a
docker images

docker rm $(docker ps -aq) -f
docker rmi $(docker images -q) -f


출처: https://brunch.co.kr/@topasvga/1638
profile
내 인생부터 개발

0개의 댓글