반응형

 

 

 

 

 

 

 

EtherChannel 이란 ?

 

  • EtherChannel를 사용하면 여러 물리적 이더넷 링크를 하나의 논리적 채널로 결합하는 기술입니다.
  • EtherChannel를 통해 데이터 트래픽 로드를 공유할 수 있습니다.
  • EtherChannel를 사용하여 하나 이상의 링크에 장애가 발생할 경우 이중화가 가능합니다.
  • EtherChannel을 사용하여 UTP(Unshielded Twisted Pair) 와이어링 또는 단일 모드 및 다중 모드 파이버를 통해 LAN 스위치, 라우터, 서버 및 클라이언트를 연결할 수 있습니다.
  • 단일 용어인 EtherChannel을 사용하는 Fast EtherChannel, Gigabit EtherChannel, Port Channel, Channel Group 및 Port Group을 가리킵니다.이 문서의 정보는 이러한 모든 EtherChannel과 같은 기술입니다.

 

 

요구사항

 

EtherChannel을 사용하기전에 해당 스위치와 포트가 지원이 되는지 확인해야합니다.

Switch# show interfaces Gi2/0/23 capabilities GigabitEthernet2/0/23
Model: WS-C3750G-24T
Type: 10/100/1000BaseTX
Speed: 10,100,1000,auto
Duplex: half,full,auto
Trunk encap. type: 802.1Q,ISL
Trunk mode: on,off,desirable,nonegotiate
Channel: yes
Broadcast suppression: percentage(0-100)
Flowcontrol: rx-(off,on,desired),tx-(none)
Fast Start: yes
QoS scheduling: rx-(not configurable on per port basis),tx-(4q2t)
CoS rewrite: yes ToS rewrite: yes
UDLD: yes Inline power: no
SPAN: source/destination
PortSecure: yes
Dot1x: yes
Switch#

 

 

 

 

EtherChannel 협상 프로토콜 종류

 

  • PAgP (Cisco 장비만 사용가능)
  • LACP (IEEE 802.3ad = 모든 장비 사용가능)

 

 

 

EtherChannel 협상 모드

 

모드 협상 프로토콜 내용
on None (둘다) EtherChannel을 항상 활성화합니다.
Workstation/Server에서 협상 프로토콜을 지원하지 않는 경우 권장합니다.
off None (둘다) EtherChannel을 항상 비활성화합니다.
active LACP LACP 패킷을 전송하여 협상을 시작합니다.
Workstation/Server가 LACP를 지원하는 경우 권장됩니다.
passive LACP 연결된 Peer 장비가 LACP 패킷을 전송하면 협상이 시작됩니다.
desirable PAgP PAgP 패킷을 전송하여 협상을 시작합니다.
Workstation/Server가 PAgP를 지원하는 경우 권장됩니다.
auto PAgP 연결된 Peer 장비가 PAgP 패킷을 전송하면 협상이 시작됩니다.

서버와 클라이언트 설정과 맞추면서 NIC 어댑터에서 지원하는 협상 프로토콜에 따라 적절한 모드를 사용합니다.

 

 

 

EtherChannel 설정 (L2)

 

SW1

# EtherChannel 생성
SW1(config)# interface range ethernet 1/2-3
SW1(config-if-range)# switchport
SW1(config-if-range)# switchport mode trunk
W1(config-if-range)# channel-group 1 mode ?
active Enable LACP unconditionally
auto Enable PAgP only if a PAgP device is detected
desirable Enable PAgP unconditionally
on Enable Etherchannel only
passive Enable LACP only if a LACP device is detected

SW1(config-if-range)# channel-group 1 mode active
Creating a port-channel interface Port-channel 1

SW1(config-if-range)# no shutdown

# Port-Channel 설정
SW1(config)# interface port-channel 1
SW1(config-if)# switchport 
SW1(config-if)# switchport mode trunk
SW1(config-if)# no shutdown

 

 

SW2

# EtherChannel 생성
SW2(config)# interface range eth1/2-3
SW2(config-if-range)# switchport
SW2(config-if-range)# switchport mode trunk
SW2(config-if-range)# channel-group 1 mode active
Creating a port-channel interface Port-channel 1

SW2(config-if-range)# no shutdown

# Port-Channel 설정
SW2(config)# interface port-channel 1 
SW2(config-if)# switchport 
SW2(config-if)# switchport mode trunk
SW2(config-if)# no shutdown

 

 

 

EtherChannel 상태 확인

SW1

SW1# show interfaces po1
Port-channel1 is up, line protocol is up (connected) 
  Hardware is EtherChannel, address is aabb.cc00.1031 (bia aabb.cc00.1031)
  MTU 1500 bytes, BW 20000 Kbit/sec, DLY 1000 usec, 
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation ARPA, loopback not set
  Keepalive set (10 sec)
  Full-duplex, Auto-speed, media type is RJ45
  input flow-control is off, output flow-control is unsupported 
  Members in this channel: Et1/2 Et1/3 
  ARP type: ARPA, ARP Timeout 04:00:00
  Last input never, output never, output hang never
  Last clearing of "show interface" counters never
  Input queue: 0/2000/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: fifo
  Output queue: 0/40 (size/max)
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     0 packets input, 0 bytes, 0 no buffer
     Received 0 broadcasts (0 multicasts)
     0 runts, 0 giants, 0 throttles 
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 input packets with dribble condition detected
     966 packets output, 77372 bytes, 0 underruns
     0 output errors, 0 collisions, 0 interface resets
     0 unknown protocol drops
     0 babbles, 0 late collision, 0 deferred
     0 lost carrier, 0 no carrier
     0 output buffer failures, 0 output buffers swapped out
SW1#

SW1#  show etherchannel  summary  
Flags:  D - down        P - bundled in port-channel
        I - stand-alone s - suspended
        H - Hot-standby (LACP only)
        R - Layer3      S - Layer2
        U - in use      N - not in use, no aggregation
        f - failed to allocate aggregator

        M - not in use, minimum links not met
        m - not in use, port not aggregated due to minimum links not met
        u - unsuitable for bundling
        w - waiting to be aggregated
        d - default port

        A - formed by Auto LAG


Number of channel-groups in use: 1
Number of aggregators:           1

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)         LACP      Et1/2(P)    Et1/3(P)    

SW1#

 

SW2

SW2# show interfaces po1
Port-channel1 is up, line protocol is up (connected) 
  Hardware is EtherChannel, address is aabb.cc00.2021 (bia aabb.cc00.2021)
  MTU 1500 bytes, BW 20000 Kbit/sec, DLY 1000 usec, 
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation ARPA, loopback not set
  Keepalive set (10 sec)
  Full-duplex, Auto-speed, media type is RJ45
  input flow-control is off, output flow-control is unsupported 
  Members in this channel: Et1/2 Et1/3 
  ARP type: ARPA, ARP Timeout 04:00:00
  Last input 00:00:00, output never, output hang never
  Last clearing of "show interface" counters never
  Input queue: 0/2000/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: fifo
  Output queue: 0/40 (size/max)
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     820 packets input, 47560 bytes, 0 no buffer
     Received 820 broadcasts (0 multicasts)
     0 runts, 0 giants, 0 throttles 
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 input packets with dribble condition detected
     148 packets output, 24112 bytes, 0 underruns
     0 output errors, 0 collisions, 0 interface resets
     0 unknown protocol drops
     0 babbles, 0 late collision, 0 deferred
     0 lost carrier, 0 no carrier
     0 output buffer failures, 0 output buffers swapped out
SW2#

SW2#  show etherchannel summary 
Flags:  D - down        P - bundled in port-channel
        I - stand-alone s - suspended
        H - Hot-standby (LACP only)
        R - Layer3      S - Layer2
        U - in use      N - not in use, no aggregation
        f - failed to allocate aggregator

        M - not in use, minimum links not met
        m - not in use, port not aggregated due to minimum links not met
        u - unsuitable for bundling
        w - waiting to be aggregated
        d - default port

        A - formed by Auto LAG


Number of channel-groups in use: 1
Number of aggregators:           1

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)         LACP      Et1/2(P)    Et1/3(P)    

SW2#

 

 

 

 

 

반응형

'Network > CISCO' 카테고리의 다른 글

[Network] CISCO - IPSEC (IKEv1) 설정  (1) 2023.10.08
[Network] CISCO - MTU 설정  (0) 2022.07.24
[Network] CISCO - 기능 설정  (0) 2022.02.18
[Network] CISCO - HSRP 라우터 이중화  (0) 2020.07.16
[Network] CISCO - Errdisable 기능  (0) 2020.07.10
반응형

 

 

Docker

Ubuntu 환경에서 Docker 명령어 사용하기


Ubuntu 20.04.4 LTS 환경으로 테스트 진행

 

 

 

 

 

Dockerfile을 생성하여 파일을 docker build 하려고 할 때 아래와 같은 에러가 발생합니다.

원인을 몰라 한참 찾아봤었는데 처음에는 뭐가 문제인지 잘몰랐었는데 Dockerfile을 만들어서

build 해줄 때 filename을 Dockerfile 이라고 만들어줘야 하는 거였다.

 

Dockerfile을 만들때에는 디렉토리를 새로만들고 해당 디렉토리로 들어가서 build 해줘야한다.

 

나는 바보인가보다 ㅠ

 

unable to prepare context: unable to evaluate symlinks in Dockerfile path:

 

 

$ sudo docker build -t kubers:1 .
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/djwlstn123/k8s/Dockerfile: no such file or directory

EX)
$ sudo docker build -t kuard-amd64:1 .
Sending build context to Docker daemon  2.048kB
Step 1/3 : FROM alpine

 

 

반응형
반응형

 

 

 

 

 

Docker

Ubuntu 환경에서 Docker 컨테이너간 통신 설정하기


 

Ubuntu 20.04.4 LTS 환경으로 테스트 진행

 

 

 

 

 

 

Docker 컨테이너간 연결하기

nginx 컨테이너와 DB 컨테이너를 생성하여 컨테이너 연결하기

mongo db 이미지를 다운받아 컨테이너 동작시키기
$ sudo docker run --name db -d mongo
Unable to find image 'mongo:latest' locally
latest: Pulling from library/mongo
d5fd17ec1767: Pull complete 
a3d1e6b0e1ff: Pull complete 
015ccc3eeca8: Pull complete 
0129deec1aaf: Pull complete 
3b9522656704: Pull complete 
42557cfd554b: Pull complete 
99e708669a41: Pull complete 
0e35f8644443: Pull complete 
e25527cd13cc: Pull complete 
Digest: sha256:d8f48972427a3d62bbb7e953bd5afb609ab6e9b69f347c01c7cfda133cf15b9c
Status: Downloaded newer image for mongo:latest
0ebf237f91f049d751e476fe149af216da534ff8f217c1cd85e9c737816d599e
$

동작중인 컨테이너 확인
$ sudo docker ps
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS                  PORTS                                       NAMES
0ebf237f91f0   mongo           "docker-entrypoint.s…"   19 minutes ago   Up 19 minutes           27017/tcp                                   db                                            jinsu-nginx
$
  • docker run 명령은 호스트서버에 이미지를 가지고 있지 않으면 자동으로 이미지를 받아옵니다.
  • docker run -d 옵션은 백그라운드에서 컨테이너 실행하는 명령입니다.

 

 

web서버 nginx 이미지를 다운받아 컨테이너 동작시키고 컨테이너간 연결 설정
$ sudo docker run --name web -d -p 80:80 --link db:db nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
42c077c10790: Pull complete 
62c70f376f6a: Pull complete 
915cc9bd79c2: Pull complete 
75a963e94de0: Pull complete 
7b1fab684d70: Pull complete 
db24d06d5af4: Pull complete 
Digest: sha256:2bcabc23b45489fb0885d69a06ba1d648aeda973fae7bb981bafbb884165e514
Status: Downloaded newer image for nginx:latest
4bbda3ace123d448f92fa860433b75b5aad49fbadf78979859ba1eab5f654b6d
$

동작중인 컨테이너 확인
$ sudo docker ps 
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                               NAMES
4bbda3ace123   nginx     "/docker-entrypoint.…"   4 minutes ago    Up 4 minutes    0.0.0.0:80->80/tcp, :::80->80/tcp   web
0ebf237f91f0   mongo     "docker-entrypoint.s…"   21 minutes ago   Up 18 seconds   27017/tcp                           db
$
  • docker run --link 옵션은 컨테이너에서 다른 컨테이너로 접근할 떄 별명으로 접근하도록 설정하는 옵션입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

 

 

Docker

registry pull 에러해결  "Error response from daemon"


 

Ubuntu 20.04.4 LTS 환경으로 테스트 진행

 

 

 

 

 

 

Docker 개인 저장소 registry에서 이미지를 pull 하여 받는 중 아래와 같은 에러 로그가 발생하였습니다.

$ sudo docker pull 192.168.0.210:5000/nginxtest:0.1
Error response from daemon: Get "https://192.168.0.210:5000/v2/": http: server gave HTTP response to HTTPS client
$

 

 

해당 에러 로그가 발생하는 사유는 Docker 구성파일 데몬에 insecure-registries 부분이 등록이 안되어 있으면 에러가 발생합니다.

 

 

해결방법

Docker 구성 파일을 사용하여 설정

vi 편집기를 이용하여 daemon.json을 설정 (파일이 없다면 생성)
$ sudo vi /etc/docker/daemon.json

사용하는 URL 및 IP를 등록하여 저장
$ cat /etc/docker/daemon.json 
{
        "insecure-registries": ["192.168.0.210:5000"]
}
$

daemon.json 저장 후 docker 데몬 재시작
$ sudo systemctl restart docker

문제없이 잘 받아오는 것을 확인
$ sudo docker pull 192.168.0.210:5000/nginxtest:0.1
0.1: Pulling from nginxtest
Digest: sha256:6d2ee764d8d6ce21b62c9cab92e28555c69b1a7028db7cf170b269ff97f901c1
Status: Downloaded newer image for 192.168.0.210:5000/nginxtest:0.1
192.168.0.210:5000/nginxtest:0.1
$

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

Docker

Ubuntu 환경에서 Docker insecure-registry 구성 및 설정


 

Ubuntu 20.04.4 LTS 환경으로 테스트 진행

 

 

 

 

 

 

 

Docker 개인 저장소 구축하기

Docker 명령은 기본적으로 Docker Hub를 사용됩니다.

개인 저장소 서버는 Docker registry 서버라고 부릅니다. Docker push, pull 명령으로 저장소 서버에 이미지를 올리고, 받을 수 있습니다.

이제 Docker 개인 저장소를 구축하겠습니다.

현재 동작중인 docker 데몬 상태
$ 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 2022-06-05 03:41:17 UTC; 1h 58min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 969 (dockerd)
      Tasks: 9
     Memory: 111.4M
     CGroup: /system.slice/docker.service
             └─969 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

동작중인 Docker 데몬을 stop 시키기
$ sudo systemctl stop docker
Warning: Stopping docker.service, but it can still be activated by:
  docker.socket
$

동작중인 docker 데몬을 stop 시킨 상태
$ systemctl status docker   
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Sun 2022-06-05 05:47:23 UTC; 3s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
    Process: 4671 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited,>
   Main PID: 4671 (code=exited, status=0/SUCCESS)

 

 

docker insecure-registry 수정하기

Docker 데몬을 멈춘상태에서 /etc/init.d/docker 파일을 수정해주어야합니다.

'DOCKER_OPTS=' 부분 뒤에 내용을 추가해주세요,

$ cat /etc/init.d/docker
DOCKER_OPTS=--insecure-registry localhost:5000

수정이 완료된 상태에서 docker 데몬을 재시작해주세요.
$ sudo systemctl docker restart

동작중인 상태 확인
$ 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 2022-06-05 05:53:21 UTC; 5s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 5170 (dockerd)
      Tasks: 10
     Memory: 32.5M
     CGroup: /system.slice/docker.service
             └─5170 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

 

 

Docker registry 이미지 설정

Docker Hub를 통해 Docker registry 이미지를 받습니다.

Docker registry 이미지 받기
$ sudo docker pull registry:latest
latest: Pulling from library/registry
Digest: sha256:bedef0f1d248508fe0a16d2cacea1d2e68e899b2220e2258f1b604e1f327d475
Status: Image is up to date for registry:latest
docker.io/library/registry:latest
$ 

Docker 이미지 확인
$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
registry     latest    773dbf02e42e   9 days ago      24.1MB
$

docker registry 이미지를 컨테이너로 생성
$ sudo docker run -d -p 5000:5000 --name jinsu-registry \
> -v /tmp/registry:/tmp/registry \
> registry
8d4a67d87d99a9dd4aab1d0c513c58b21c560da939fa4960ee98fbc4a3692841
$ 

생성된 컨테이너 동작 상태 확인
$ sudo docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS                  PORTS                                       NAMES
8d4a67d87d99   registry        "/entrypoint.sh /etc…"   2 minutes ago   Up 2 minutes            0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   jinsu-registry
$
  • docker run -p 옵션을 통해 5000:5000 포트로 호스트서버 5000 포트와 컨테이너 5000 포트를 연결해줍니다.
  • docker run -v 옵션을 통해 호스트서버 /tmp/registry 디렉토리와 컨테이너 /tmp/registry 디렉토리를 공유 시켜줍니다.

 

 

Docker 개인 저장소에 이미지 올리기

tag 명령을 통해 앞서 만든 이미지를 태그로 생성해주고

push 명령을 통해 개인 저장소로 올려줍니다.

Docker registry 컨테이너가 동작중인지 확인
$sudo docker ps -a
CONTAINER ID   IMAGE           COMMAND   CREATED      STATUS                  PORTS     NAMES
61edbce54f41   nginxtest:0.1   "nginx"   2 days ago   Exited (0) 2 days ago             jinsu-nginx
$ 

현재 가지고 있는 이미지 확인
$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginxtest    0.3       df69b2bb7f48   2 days ago      232MB
nginxtest    0.2       45fe3bfa31b6   2 days ago      232MB
nginxtest    0.1       740379f9b11b   2 days ago      232MB
registry     latest    773dbf02e42e   9 days ago      24.1MB
ubuntu       14.04     13b66b487594   14 months ago   197MB
$

Dodcker tag 생성하기
$ sudo docker tag [이미지 이름]:[TAG] [Docker registry URL]:[TAG]

EX)
$ sudo docker tag nginxtest:0.1 localhost:5000/nginx:0.1

Docker registry 서버로 업로드하기
$ sudo docker push [Docker registry URL]/[이미지 이름]:[TAG]

EX)
$ sudo docker push localhost:5000/nginxtest:0.1
The push refers to repository [localhost:5000/nginxtest]
c4adbf8d4df4: Pushed 
56104874600e: Pushed 
79b16ae8ffe2: Pushed 
958dcff7226f: Pushed 
83109fa660b2: Pushed 
30d3c4334a23: Pushed 
f2fa9f4cf8fd: Pushed 
0.1: digest: sha256:6d2ee764d8d6ce21b62c9cab92e28555c69b1a7028db7cf170b269ff97f901c1 size: 1782
$
  • 개인 저장소에 이미지를 업로드할때는 먼저 태그를 먼저 생성해야합니다.

 

 

Docker 개인 저장소에 있는 이미지 다운받기

pull 명령을 통해 개인 저장소에 있는 이미지를 다운로드 

이미지 다운받기 전 
$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginxtest    0.3       df69b2bb7f48   2 days ago      232MB
nginxtest    0.2       45fe3bfa31b6   2 days ago      232MB
nginxtest    0.1       740379f9b11b   2 days ago      232MB
registry     latest    773dbf02e42e   9 days ago      24.1MB
ubuntu       14.04     13b66b487594   14 months ago   197MB
$ 

$sudo doker pull [Docker registry URL]/[이미지 이름]:[TAG]

EX)
$ sudo docker pull 192.168.0.210:5000/nginxtest:0.1
0.1: Pulling from nginxtest
Digest: sha256:6d2ee764d8d6ce21b62c9cab92e28555c69b1a7028db7cf170b269ff97f901c1
Status: Downloaded newer image for 192.168.0.210:5000/nginxtest:0.1
192.168.0.210:5000/nginxtest:0.1
$

이미지 다운로드 후
$ sudo docker images
REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
nginxtest                      0.3       df69b2bb7f48   2 days ago      232MB
nginxtest                      0.2       45fe3bfa31b6   2 days ago      232MB
nginxtest                      0.1       740379f9b11b   2 days ago      232MB
192.168.0.210:5000/nginxtest   0.1       740379f9b11b   2 days ago      232MB
registry                       latest    773dbf02e42e   9 days ago      24.1MB
ubuntu                         14.04     13b66b487594   14 months ago   197MB
$

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

 

 

Docker

Ubuntu 환경에서 Docker 명령어 사용하기


 

Ubuntu 20.04.4 LTS 환경으로 테스트 진행

 

 

 

 

 

 

 

 

Docker history 명령으로 이미지 history 확인하기

 

history 명령은 동작중인 컨테이너에 입력된 명령어 history를 확인하는 명령어입니다.

이전 글에서 dockerfile로 만든 nginx 컨테이너입니다. 만들면서 사용된 RUN 커맨드가 history에 기록됩니다.

$ sudo docker ps -a
CONTAINER ID   IMAGE           COMMAND   CREATED          STATUS          PORTS                                        NAMES
61edbce54f41   nginxtest:0.1   "nginx"   18 minutes ago   Up 18 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   jinsu-nginx
$ 

$sudo docker history [NAMES]:[TAG]

EX)
$ sudo docker history nginxtest:0.1
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
740379f9b11b   29 minutes ago   /bin/sh -c #(nop)  EXPOSE 443                   0B        
929f903e2540   29 minutes ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
ed64817830f8   29 minutes ago   /bin/sh -c #(nop)  CMD ["nginx"]                0B        
2282172fd290   29 minutes ago   /bin/sh -c #(nop) WORKDIR /etc/nginx            0B        
de12d0c872bc   29 minutes ago   /bin/sh -c #(nop)  VOLUME [/data /etc/nginx/…   0B        
3da13963d2b2   29 minutes ago   /bin/sh -c chown -R www-data:www-data /var/l…   0B        
94c41b3f9ed3   29 minutes ago   /bin/sh -c echo "\n daemon off;" >> /etc/ngi…   1.61kB    
d6e387a15b8b   29 minutes ago   /bin/sh -c apt-get install -y nginx             21.1MB    
2f20874facdc   29 minutes ago   /bin/sh -c apt-get update                       14.1MB    
abbb27fabc8c   29 minutes ago   /bin/sh -c #(nop)  MAINTAINER jinsu <djwlstn…   0B        
13b66b487594   14 months ago    /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      14 months ago    /bin/sh -c mkdir -p /run/systemd && echo 'do…   7B        
<missing>      14 months ago    /bin/sh -c [ -z "$(apt-get indextargets)" ]     0B        
<missing>      14 months ago    /bin/sh -c set -xe   && echo '#!/bin/sh' > /…   195kB     
<missing>      14 months ago    /bin/sh -c #(nop) ADD file:276b5d943a4d284f8…   196MB     
$

 

 

 

 

Docker cp 명령으로 복사하기

 

cp 명령은 컨테이너에서 있는 파일을 복사하는 명령입니다.

명령어 입력 전
$ ls -al
total 12
drwxrwxr-x 2 djwlstn123 djwlstn123 4096 Jun  2 09:42 .
drwxr-xr-x 5 djwlstn123 djwlstn123 4096 Jun  2 08:54 ..
-rw-rw-r-- 1 djwlstn123 djwlstn123  325 Jun  2 08:54 Dockerfile
$ 

동작중인 컨테이너 확인
$ sudo docker ps -a
CONTAINER ID   IMAGE           COMMAND   CREATED          STATUS          PORTS                                        NAMES
61edbce54f41   nginxtest:0.1   "nginx"   30 minutes ago   Up 30 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   jinsu-nginx
$ 

$ sudo docker cp [NAMES]:[경로] [저장경로]

EX)
$ sudo docker cp jinsu-nginx:/etc/nginx/nginx.conf ./            

명령어 입력 후
$ ls -al
total 16
drwxrwxr-x 2 djwlstn123 djwlstn123 4096 Jun  2 09:44 .
drwxr-xr-x 5 djwlstn123 djwlstn123 4096 Jun  2 08:54 ..
-rw-rw-r-- 1 djwlstn123 djwlstn123  325 Jun  2 08:54 Dockerfile
-rw-r--r-- 1 root       root       1615 Jun  2 09:05 nginx.conf
$

 

 

 

 

Docker commit 명령으로 컨테이너 변경된 내용 이미지로 생성하기

 

commit 명령은 컨테이너의 추가로 변경된 사항을 이미지 파일로 생성하는 명령입니다.

명령어 입력 전
$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nginxtest    0.1       740379f9b11b   43 minutes ago   232MB
ubuntu       14.04     13b66b487594   14 months ago    197MB
$

$ sudo docker commit [옵션] [컨테이너 이름] [이미지 이름]:[태그]

EX)
$ sudo docker commit jinsu-nginx nginxtest:0.2
sha256:45fe3bfa31b6a7b9eb73603decb26779e348acd6e41ecd176cbeaf0c54c0c967
$ 

명령어 입력 후
$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nginxtest    0.2       45fe3bfa31b6   11 seconds ago   232MB
nginxtest    0.1       740379f9b11b   46 minutes ago   232MB
ubuntu       14.04     13b66b487594   14 months ago    197MB
$

 

 

 

 

Docker diff 명령으로 컨테이너 변경된 파일 확인하기

 

diff 명령은 컨테이너가 실행되면서 변경된 파일 목록을 출력하여 보여줍니다.

비교 기준은 컨테이너 생성한 이미지입니다.

  • A : 추가된 파일
  • C : 변경된 파일
  • D : 삭제된 파일
$ sudo docker diff [컨테이너 이름]

EX)
$ sudo docker diff jinsu-nginx
A /data
C /etc
C /etc/nginx
A /etc/nginx/site-enabled
C /var
C /var/lib
C /var/lib/nginx
A /var/lib/nginx/body
A /var/lib/nginx/fastcgi
A /var/lib/nginx/proxy
A /var/lib/nginx/scgi
A /var/lib/nginx/uwsgi
C /run
A /run/nginx.pid
$

 

 

 

 

 

 

Docker inspect 명령으로 이미지와 컨테이너 세부 정보 확인하기

 

inspect 명령은 이미지와 컨테이너의 세부 정보를 출력하는 명령입니다.

$ sudo docker inspect [이미지] or [컨테이너 이름]

EX)
$ sudo docker inspect jinsu-nginx
[
    {
        "Id": "61edbce54f412f5445422515247b95af982c6c99ad24d758c855056c8d69ab28",
        "Created": "2022-06-02T09:08:38.839283565Z",
        "Path": "nginx",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 94810,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-06-02T09:08:39.140534723Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
...
..
.
내용이 길게 출력중

 

 

 

 

반응형
반응형

 

 

 

 

Docker

Ubuntu 환경에서 Docker 명령어 사용하기


Ubuntu 20.04.4 LTS 환경으로 테스트 진행

 

 

 

 

 

 

 

Dockerfile 

Dockerfile은 Docker 이미지 설정 파일이며, Dockerfile에 설정된 내용으로 이미지를 생성할 수 있습니다.

  • Dockerfile은 대소문자를 구분하지 않습니다.
  • Dockerfile 명령은 순서대로 실행됩니다.
  • Dockerfile은 FROM 명령으로 시작해야 합니다.
  • #은 주석으로 사용합니다.
  • 각 명령들은 독입적으로 실행됩니다. 

 

 

 

Dockerfile 에서 사용하는 환경 변수 목록

 

  • FROM

FROM 명령은 기본 베이스 이미지를 설정하는 명령입니다.

이미지 이름만 설정하면 latest를 사용하여 생성됩니다. 

이미지 이름은 생략할 수 없습니다.

Dockerfile 하나에 FROM을 여러개 생성할 수 있으나 --tag 옵션으로 이미지 이름을 설정했다면 마지막 FROM에 적용됩니다.

FROM [이미지이름]:[태그]

EX)
FROM ubuntu:14.04

 

 

  • MAINTAINER

MAINTAINER 명령은 이미지 생성하는 관리자의 정보를 설정하는 명령입니다.

빌드에 영향을 주지 않기 때문에 생략하는 경우도 있습니다.

MAINTAINER [NAME] [Email]

EX)
MAINTAINER JinSu <djwlstn123@naver.com>

 

 

  • RUN

RUN 명령은 현재 생성되는 과정의 이미지 위에 스크립트 또는 명령을 실행해주는 명령입니다.

실행한 결과는 새 이미지로 생성되며, 실행 내역은 이미지 히스토리에 기록됩니다.

RUN [명령어]
RUN ["실행파일", "매개변수1", "매개변수2"]

EX)
RUN apt-get -y update
RUN /bin/bash -c

 

 

  • CMD

CMD 명령은 컨테이너가 시작될 때 실행할 실행 파일 또는 쉘 스크립트 명령입니다.

Dockerfile에는 하나의 CMD 명령만 있을 수 있습니다. (둘 이상의 CMD를 나열하면 마지막 CMD만 적용됩니다.)

여러 명령어를 사용하려면 따로 스크립트를 생성하여 설정해주어야합니다.

CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)
CMD [명령]


EX)
CMD ["nginx"]

 

 

  • ENTRYPOINT

ENTRYPOINT 명령은 컨테이너가 시작될 떄 스크립트 또는 명령을 실행합니다.

docker run, start 명령으로 정지된 컨테이너를 시작할 때 실행됩니다. 

ENTRYPOINT는 Dockerfile에 단 한번만 사용할 수 있습니다.

ENTRYPOINT [명령]
ENTRYPOINT ["실행파일", "매개변수1", "매개변수2"]

EX)
셸(/bin/sh)로 명령 실행
ENTRYPOINT cat /home/study/test.text
셸없이 바로 실행
ENTRYPOINT ["cat", "/home/study/test.text"]

 

 

  • ADD

ADD 명령은 새로운 파일이나 또는 디렉토리를 이미지로 복사하는 명령입니다.

절대경로를 사용할 수 없으며,  디렉토리를 지정하면 디렉토리 모든 파일을 복사합니다.

인터넷에 있는 URL을 설정할 수 있습니다.

ADD [복사할 파일 경로] [이미지에 파일이 위치할 경로]

EX)
ADD *.txt /root/

 

 

  • COPY

COPY 명령은 새로운 파일이나 또는 디렉토리를 이미지로 복사하는 명령입니다.

ADD 명령과 달리 URL을 사용할 수 없으며 압축 파일 그대로 복사됩니다. 절대경로 방식으로 설정해야 합니다.

COPY [복사할 파일 경로] [파일이 위치할 경로]

EX)
COPY test.txt relativeDir/

 

 

  • ENV

ENV 명령은 환경 변수를 설정하는 명령입니다.

ENV로 설정한 변수는 RUN, CMD, ENTRYPOINT에 적용됩니다.

ENV [환경변수] [값]

EX)
ENV PATH /go/bin:$PATH

 

 

  • EXPOSE

EXPOSE 명령은 호스트와 연결할 포트 번호를 설정하는 명령입니다.

docker run --expose 옵션과 같은 설정입니다.

EXPOSE [포트번호]

EX)
EXPOSE 80
EXPOSE 443

 

 

  • USER

USER 명령은 실행할 사용자 계정을 설정하는 명령입니다.

RUN, CMD, ENTRYPOINT에 적용됩니다.

USER [계정 사용자명]

EX)
USER nobody

 

 

  • VOLUME

VOLUME 명령은 디렉토리의 내용을 컨테이너에 저장하지 않고 외부 호스트(파일시스템)에 저장하도록 설정하는 명령입니다.

VOLUME [컨테이너 디렉토리]
VOLUME ["컨테이너 디렉토리1", "컨테이너 디렉토리2"]

EX)
VOLUME /data
VOLUME ["/data", "/var/log/hello"]

 

 

  • WORKDIR

WORKDIR 명령은 RUN, CMD, ENTRYPOINT 명령이 실행될 디렉토리를 설정하는 명령입니다.

절대경로 대신 상대경로도 사용 할 수 있습니다.

WORKDIR [경로]

EX)
WORKDIR /var/www

 

 

  • ONBUILD

ONBUILD 명령은 생성한 이미지를 기반으로 다른 이미지가 생성될 떄 명령을 실행하는 명령입니다.

최초에 ONBUILD 사용한 상태에서는 아무 명령도 실행하지 않으며, 다음 이미지가 FROM으로 사용될 때 실행할 명령을 예약하는 기능입니다.

ONBUILD [Dockerfile 명령] [Dockerfile 명령의 매개변수]

EX)
ONBUILD RUN touch /test.txt
ONBUILD ADD test.txt /test.txt

 

 

 

 

 

 

Dockerfile 예제 작성하기

 

컨테이너 이미지를 만들기 위해 Dockerfile를 설정합니다.

$ vi Dockerfile

FROM ubuntu:14.04
MAINTAINER jinsu <djwlstn123@Naver.com>

RUN apt-get update
RUN apt-get install -y nginx
RUN echo "\n daemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx

VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"]

WORKDIR /etc/nginx

CMD ["nginx"]

EXPOSE 80
EXPOSE 443
  • FROM : 베이스 이미지 선택 [이미지] [태그] 
  • MAINTAINER : 제작자 정보
  • RUN : nginx를 설치하기 위해 필요한 셸 스크립트 또는 명령을 입력
  • VOLUME : /data 경로를 이미지를 외부 저장소랑 공유하는 디렉토리 목록
  • CMD : 컨테이너가 동작하게 됐을 때 실행할 실행 파일이나 셸 스크립트
  • WORKDIR : CMD에서 설정한 실행파일이 실행될 디렉토리
  • EXPOSE : 외부와 연결할 포트 번호

 

 

 

Docker build 명령으로 이미지 생성하기

 

Docker build 명령은 Dockerfile에 설정된 이미지를 생성하는 명령입니다.

$ sudo docker build -t nginxtest:0.1 .

Sending build context to Docker daemon  2.048kB
Step 1/11 : FROM ubuntu:14.04
 ---> 13b66b487594
Step 2/11 : MAINTAINER jinsu <djwlstn123@Naver.com>
 ---> Running in 9d3596a43146
Removing intermediate container 9d3596a43146
 ---> abbb27fabc8c
Step 3/11 : RUN apt-get update
 ---> Running in 620216d05c75
Ign http://archive.ubuntu.com trusty InRelease
Get:1 http://security.ubuntu.com trusty-security InRelease [65.9 kB]
Get:2 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]
Get:3 http://archive.ubuntu.com trusty-backports InRelease [65.9 kB]
Get:4 http://security.ubuntu.com trusty-security/main amd64 Packages [1032 kB]
Get:5 https://esm.ubuntu.com trusty-infra-security InReleas
...
..
.
계속 설치중

$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
nginxtest    0.1       740379f9b11b   About a minute ago   232MB
ubuntu       14.04     13b66b487594   14 months ago        197MB
$
  • 아까 지정한 nginxtest 이름과 tag 0.1이 생성되었습니다.

 

 

 

Docker run 명령으로 컨테이너 생성하기

 

Dockerfile로 nginx를 설치하는 이미지를 설정하고 build하여 생성된 이미지를 run 명령을 통해 컨테이너를 생성하여 실행시키는 명령입니다.

$ sudo docker run --name jinsu-nginx -d -p 80:80 -v /root/data:/data nginxtest:0.1
61edbce54f412f5445422515247b95af982c6c99ad24d758c855056c8d69ab28
$ 

$ sudo docker ps -a
CONTAINER ID   IMAGE           COMMAND   CREATED          STATUS         PORTS                                        NAMES
61edbce54f41   nginxtest:0.1   "nginx"   10 seconds ago   Up 9 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   jinsu-nginx
$
  • docker run -d 옵션은 컨테이너를 백그라운드 상태로 실행하는 옵션입니다.
  • docker run -p 80:80 옵션은 제 ubuntu 80번 포트와 생성하는 컨테이너 80번 포트를 연결하는 옵션입니다.
  • docker run -v 옵션은 제 ubuntu /root/data 디렉토리를 생성하는 컨테이너 /data 디렉토리에 연결하는 명령으로 제 /root/data 디렉토리에 파일을 넣으면 생성된 컨테이너에서 해당 파일을 읽을 수 있습니다.

 

 

http://[ubuntu server IP]:80 으로 접속하면 nginx가 정상적으로 동작하는 모습을 볼 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

Linux

Ubuntu 환경에서 Bash 문법 사용하기


 

Ubuntu 20.04.4 LTS 환경으로 테스트 진행

 

 

 

 

 

문법 설명
> ## 출력 리다이렉션
명령 실행의 표준 출력을 파일로 저장합니다. 명령어 실행 결과를 특정 장치로 보낼 수도 있습니다.
EX)
sudo echo "Good day" > ./Good.txt
-rw-rw-r-- 1 guest guest     9 Jun  1 08:00 Good.txt
< ## 입력 리다이렉션
파일의 내용을 읽어 명령의 표준 입력을 사용
EX)
cat < ./Good.txt 
Good day
>> ## 명령 실행의 표준 출력을 파일에 추가
>는 이미 파일에 내용을 덮어 쓰지만 >>는 파일 뒷부분에 내용을 추가
EX)
$ sudo echo "Today" >> ./Good.txt 
Good day
Today
2> ## 명령 실행의 표준 에러를 파일로 저장
2>> ## 명령 실행의 표준 에러를 파일에 추가
&> ## 표준 출력과 표준 에러를 모두 파일로 저장
1>&2 ## 표준 출력을 표준 에러로 보내기
2>&1 ## 표준에어를 표준 출력으로 보냅니다. 
| ## 파이프
명령 실행의 표준 출력을 다른 명령의 표준 입력으로 보내줍니다. 첫번째 명령의 출력 값을 두번째 명령에서 처리합니다.
EX)
$ ls -al | grep Good
-rw-rw-r-- 1 djwlstn123 djwlstn123    15 Jun  1 08:04 Good.txt

 

 

추후 계속 업데이트 예정

2022.06.01

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

Docker

Ubuntu 환경에서 Docker 명령어 사용하기


 

Ubuntu 20.04.4 LTS 환경으로 테스트 진행

 

 

 

 

 

Docker start 명령으로 컨테이너 동작하기

 

start 명령어는 정지된 hello 컨테이너를 동작하게 만듭니다.

명령어 사용 전 
$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED      STATUS                    PORTS     NAMES
750026f56674   ubuntu    "bash"        3 days ago   Exited (0) 3 days ago               jinsu
68bf744c5a56   ubuntu    "/bin/bash"   3 days ago   Exited (127) 3 days ago             hello
$
$ sudo docker start [NAMES] or [CONTAINER ID]

EX)
$ sudo docker start hello
hello
$ 

명령어 사용 후
$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED      STATUS                  PORTS     NAMES
750026f56674   ubuntu    "bash"        3 days ago   Exited (0) 3 days ago             jinsu
68bf744c5a56   ubuntu    "/bin/bash"   3 days ago   Up 5 seconds                      hello
$
  • 사용 전 Exited 3 days ago 상태였는데 start 명령어를 사용하여 Up 5 seconds 상태가 되었습니다.

 

 

Docker restart 명령으로 컨테이너 재시작하기

 

restart 명령어는 PC를 재부팅하는 것처럼 컨테이너를 재시작하게 만들어 줍니다.

명령어 사용 전
$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED      STATUS                  PORTS     NAMES
750026f56674   ubuntu    "bash"        3 days ago   Exited (0) 3 days ago             jinsu
68bf744c5a56   ubuntu    "/bin/bash"   3 days ago   Up 8 minutes                      hello
$ 

$ sudo docker restart [NAMES] or [CONTAINER ID]
EX)
$ sudo docker restart hello
hello
$ 

명령어 사용 후
$ sudo docker ps -a        
CONTAINER ID   IMAGE     COMMAND       CREATED      STATUS                  PORTS     NAMES
750026f56674   ubuntu    "bash"        3 days ago   Exited (0) 3 days ago             jinsu
68bf744c5a56   ubuntu    "/bin/bash"   3 days ago   Up 2 seconds                      hello
$
  • 사용 전 Up 8 minutes 상태였는데 restart 재시작 후 Up 2 seconds 상태가 되었습니다.

 

 

 

 

Docker attach 명령으로 컨테이너에 접속하기

 

attach 명령어는 생성하여 동작 상태인 컨테이너에 접속하는 명령입니다.

$ sudo docker ps -a        
CONTAINER ID   IMAGE     COMMAND       CREATED      STATUS                  PORTS     NAMES
750026f56674   ubuntu    "bash"        3 days ago   Exited (0) 3 days ago             jinsu
68bf744c5a56   ubuntu    "/bin/bash"   3 days ago   Up 2 seconds                      hello
$

$ sudo docker attach [NAMES] or [CONTAINER ID]

EX)
$ sudo docker attach hello
root@68bf744c5a56:/#

컨테이너를 생성할때 /bin/bash 설정은 안해줬을때 아래 옵션으로 접속
$ sudo docker exec -it [이미지 이름] /bin/bash
root@0ebf237f91f0:/#
  • 사전에 컨테이너를 생성할 때 /bin/bash를 실행하여 컨테이너에 접속핵서 자유롭게 입력 출력이 가능합니다.
  • Bash 셸에서 exit 또는 Ctrl + D를 입력하면 컨테이너가 정지되면서 접속이 끊어지게 됩니다.
  • Ctrl + P, Ctrl + Q를 순서대로 입력하면 컨테이너를 정지하지 않고 컨테이너에서 나오게 됩니다.

 

 

 

Docker exec 명령으로 외부에서 컨테이너 안의 명령 실행하기

 

exec 명령어는 컨테이너의 /bin/bash를 통해 접속하여 입출력하는 것이 아닌 외부에서 컨테이너 안의 명령을 실행하는 명령입니다.

명령어를 실행하려면 컨테이너가 Up 상태에서만 가능합니다.
$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED      STATUS                    PORTS     NAMES
750026f56674   ubuntu    "bash"        3 days ago   Exited (0) 16 hours ago             jinsu
68bf744c5a56   ubuntu    "/bin/bash"   4 days ago   Up 16 hours                         hello
$ 

$ sudo docker exec [NAMES] [명령] [매개 변수]

EX)
$ sudo docker exec hello echo "Good day"
Good day
$

EX)
$ sudo docker exec hello apt-get update
Get:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:3 http://security.ubuntu.com/ubuntu jammy-security/multiverse amd64 Packages [4653 B]
Get:4 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [109 kB]
Get:5 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 Packages [156 kB]
Get:6 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Get:7 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages [159 kB]
Get:8 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages [71.8 kB]
Get:9 http://archive.ubuntu.com/ubuntu jammy/multiverse amd64 Packages [266 kB]
Get:10 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages [1792 kB]
Get:11 http://archive.ubuntu.com/ubuntu jammy/universe amd64 Packages [17.5 MB]
Get:12 http://archive.ubuntu.com/ubuntu jammy/restricted amd64 Packages [164 kB]
Get:13 http://archive.ubuntu.com/ubuntu jammy-updates/multiverse amd64 Packages [4653 B]
Get:14 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [277 kB]
Get:15 http://archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 Packages [157 kB]
Get:16 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages [126 kB]
Get:17 http://archive.ubuntu.com/ubuntu jammy-backports/universe amd64 Packages [1202 B]
Fetched 21.2 MB in 5s (4319 kB/s)
Reading package lists...
$

 

 

 

 

 

Docker stop 명령으로 컨테이너 정지시키기

 

stop 명령어는 Up상태, 동작중인 상태의 컨테이너를 정지시키는 명령입니다.

명령어 사용 전
$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED      STATUS        PORTS     NAMES
68bf744c5a56   ubuntu    "/bin/bash"   4 days ago   Up 16 hours             hello
$ 

$ sudo docker stop [NAMES]

EX)
$ sudo docker stop hello
hello
$ 

명령어 입력 후
$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED      STATUS                        PORTS     NAMES
750026f56674   ubuntu    "bash"        4 days ago   Exited (0) 16 hours ago                 jinsu
68bf744c5a56   ubuntu    "/bin/bash"   4 days ago   Exited (137) 47 seconds ago             hello
$

 

 

 

 

반응형
반응형

 

 

 

Docker

Ubuntu 환경에서  Docker 명령어 사용하기


 

Ubuntu 20.04.4 LTS 환경으로 테스트 진행

 

 

 

 

Docker search 명령으로 이미지 검색하기

 

search 명령어는 Docker Hub 및 여러 사람들이 올린 이미지를 검색하는 명령입니다.

$ sudo docker search [image name]

EX)
$ sudo docker search ubuntu
 
 

 

 

 

Docker pull 명령으로 이미지 받기

 

pull 명령어는 Docker Hub 및 여러 사람들이 올린 이미지를 다운 받는 명령입니다.

$ sudo docker pull [image name]:[tag] 형식으로 입력됩니다.

$ sudo docker pull ubuntu:14.04
14.04: Pulling from library/ubuntu
2e6e20c8e2e6: Pull complete
0551a797c01d: Pull complete
512123a864da: Pull complete
Digest: sha256:96a36dd3bcd8f149fa9874c4e28c35c01f715b3e5f8f1a8e06b45887619bf43b
Status: Downloaded newer image for ubuntu:14.04
docker.io/library/ubuntu:14.04

$ sudo docker pull ubuntu:latest
latest: Pulling from library/ubuntu 125a6e411906: Pull complete Digest: sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

이미지 이름에 jinsu/ubuntu 처럼 /앞에 사용자명을 입력하면 Docker Hub에서 해당 사용자가 올린 이미지를 다운받습니다.

$ sudo docker pull jinsu/ubuntu:latest

 

 

 

 

 

Docker images 명령으로 설치된 이미지 목록 확인

 

images 명령어는 다운받거나 설치된 이미지 목록을 출력해주는 명령입니다.

$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest d2e4e1f51132 4 weeks ago 77.8MB
ubuntu 14.04 13b66b487594 14 months ago 197MB

EX)
$ sudo docker images ubuntu
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest d2e4e1f51132 4 weeks ago 77.8MB
ubuntu 14.04 13b66b487594 14 months ago 197MB

 

 

 

 

 

Docker run 명령으로 컨테이너 실행하기

 

run 명령어는 이미지를 컨테이너로 생성하는 명령입니다.

$ Docker run [option] [image name] [file name]

EX)
$ sudo docker run -i -t --name hello ubuntu /bin/bash

-i, -t 옵션을 사용하여 생성할 컨테이너안에 Bash를 사용하여 나중에 접속하여 입력 및 출력이 가능합니다.
--name 옵션으로 컨테이너 이름을 지정 할 수 있습니다.

 

 

 

 

Docker ps 명령으로 컨테이너 목록 확인하기

 

ps 명령어는 모든 컨테이너 목록을 출력하는 명령입니다.

$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED      STATUS                    PORTS     NAMES
750026f56674   ubuntu    "bash"        3 days ago   Exited (0) 3 days ago               jinsu
68bf744c5a56   ubuntu    "/bin/bash"   3 days ago   Exited (127) 3 days ago             hello
  • ps -a 옵션을 사용하면 정지된 컨테이너까지 모두 출력하는 명령입니다.
  • 옵션없이 ps만 사용하면 Up 상태인 컨테이너만 출력됩니다.

 

 

 

 

 

Docker rm 명령으로 컨테이너 삭제하기

 

run 명령어는 생성된 컨테이너를 삭제하는 명령입니다.

명령어 입력 전
$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED      STATUS                        PORTS     NAMES
750026f56674   ubuntu    "bash"        4 days ago   Exited (0) 17 hours ago                 jinsu
68bf744c5a56   ubuntu    "/bin/bash"   4 days ago   Exited (137) 54 minutes ago             hello
$ 

$ sudo docker rm [NAMES] or [CONTAINER ID}

EX)
$ sudo docker rm jinsu
jinsu
$ 

명령어 입력 후
$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED      STATUS                        PORTS     NAMES
68bf744c5a56   ubuntu    "/bin/bash"   4 days ago   Exited (137) 55 minutes ago             hello
$

 

 

 

 

Docker rmi 명령으로 이미지 삭제하기

 

rmi 명령어는 다운받은 이미지를 삭제하는 명령입니다.

명령어 입력 전
$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
ubuntu       latest    d2e4e1f51132   4 weeks ago     77.8MB
ubuntu       14.04     13b66b487594   14 months ago   197MB
$

$ sudo docker rmi [NAMES]:[TAG]

EX)
$ sudo docker rmi ubuntu:latest
Error response from daemon: conflict: unable to remove repository reference "ubuntu:latest" (must force) - container 68bf744c5a56 is using its referenced image d2e4e1f51132
$ 
지우려는 이미지가 컨테이너로 사용중이라면 위와같이 제거 할 수 없다는 에러 로그가 나옵니다.

컨테이너 확인 해보면 해당 이미지로 생성된 컨테이너가 존재합니다.
$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED      STATUS                        PORTS     NAMES
68bf744c5a56   ubuntu    "/bin/bash"   4 days ago   Exited (137) 59 minutes ago             hello
$ 

생성된 컨테이너 제거
$ sudo docker rm hello
hello
$ 

이미지 삭제 명령
$ sudo docker rmi ubuntu:latest
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d
Deleted: sha256:d2e4e1f511320dfb2d0baff2468fcf0526998b73fe10c8890b4684bb7ef8290f
Deleted: sha256:e59fc94956120a6c7629f085027578e6357b48061d45714107e79f04a81a6f0c
$ 

명령어 입력 후
$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
ubuntu       14.04     13b66b487594   14 months ago   197MB
$

 

 

 

반응형

+ Recent posts