본문 바로가기

[혁신성장 청년인재] 인공지능을 활용한 보안전문가 양성과정

Day16-1: 도커 실행 및 컨테이너 관리

docker run [옵션] --name [컨테이너이름] [이미지이름] 
 => docker create + start 

[admin@localhost ~]$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7                 8679ced16d20        5 days ago          448MB
httpd               latest              9d2a0c6e5b57        5 days ago          166MB
centos              latest              831691599b88        5 weeks ago         215MB
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB
[admin@localhost ~]$ docker run --name webserver httpd:latest 
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Tue Jul 28 00:53:43.670602 2020] [mpm_event:notice] [pid 1:tid 139922433365120] AH00489: Apache/2.4.43 (Unix) configured -- resuming normal operations
[Tue Jul 28 00:53:43.716340 2020] [core:notice] [pid 1:tid 139922433365120] AH00094: Command line: 'httpd -D FOREGROUND'
[Tue Jul 28 00:53:48.940642 2020] [mpm_event:notice] [pid 1:tid 139922433365120] AH00492: caught SIGWINCH, shutting down gracefully

 

 -d 옵션 : detach, 실행 시 백그라운드로 실행

[admin@localhost ~]$ docker run -d --name webserver2 httpd:latest 
8740ba8785ae3de2d1fa0340ae593a84a814bd52742ad1f0c6601771cd5b2ed4


[admin@localhost ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS               NAMES
8740ba8785ae        httpd:latest        "httpd-foreground"   2 minutes ago       Up 2 minutes        80/tcp              webserver2

 

- i 옵션 : 표준 입력 유지

- t 옵션 : 가상 터미널 지정

[admin@localhost ~]$ docker run -it --name centos1 centos:latest 
[root@1711facb6e30 /]# pwd
/
[root@1711facb6e30 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@1711facb6e30 /]# exit
exit

docker stats 
: docker 실행 상태 확인하기 

docker stats --no-stream : 한 번만 보여줘라

docker stats -a : 현재 실행중이지 않은것도 다 보여주기


docker restart [컨테이너이름]

컨테이너 재시작하기


docker container rm [컨테이너이름]

컨테이너 삭제하기


docker prune

멈춰있는 컨테이너 전부 삭제하기

docker system prune 으로도 사용 가능

[admin@localhost ~]$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
1711facb6e30d89a8989074d669d44645de21db3badd58d5b6fdf572d797af37
083fb52e6619bf413e070371e84baa5c359c74b5951270fa2f323ed5834364c5
2f335508781f1fa72f42619e3d5c191e1f41e2376f45d4107fedb9e4c16a17ca
4750d4b7a5a5021e0f8a8999e8520a87dfbca83da22b27c8c8f9dfcb6cc97309
b4b3f6cee7016f41a6da257bc8a27bb54582cdce4101be79684aeac794669882
536633e64f4d9670224e688bb07cbf12ee731feebbc3acebcb98f31f585a170e

Total reclaimed space: 23B

컨테이너 환경변수 설정
컨테이너를 실행하면서 , run 을 할 때 적용할 수 있는 사항들!

(1) -e 옵션

docker run -e "LAB=docker"

 

(2) --cpus 옵션 : cpu 코어 수 제한

docker run -it --name os3 --cpus 0.3 centos:lastest

[admin@localhost ~]$ docker run -dit --name os4 --cpus 0.3 centos:latest dd if=/dev/zero of=/dev/null
a77d3f817c99caa4516e4ba25a476719304a4fca892672a12f81bfde6ac9355c

[admin@localhost ~]$ docker stats

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %
a77d3f817c99        os4                 23.75%              220KiB / 7.638GiB     0.00%
8740ba8785ae        webserver2          0.01%               12.46MiB / 7.638GiB   0.16%

(3) --memory 옵션 : 메모리 제한

(4) cpu나 memory 자원제한을 변경하고 싶으면 update 명령어를 사용한다.

docker update --memory 1400m os3


컨테이너 관리 

컨테이너 접근 및 실행

(1) docker attach 명령어: 표준입출력으로 컨테이너에 연결

컨테이너는 기본적으로 쉘 프로그램을 실행하고 있지 않기때문에 docker attach로 접근하지 않는 것이 좋다.

[admin@localhost ~]$ docker run -dit --name os2 centos:latest 
e369ee551681ac11fdf5cd2f3f91cf4b9a80698fe85e71dc4bc77ace9ede6660
[admin@localhost ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS               NAMES
e369ee551681        centos:latest       "/bin/bash"          11 seconds ago      Up 11 seconds                           os2
8740ba8785ae        httpd:latest        "httpd-foreground"   About an hour ago   Up About an hour    80/tcp              webserver2

[admin@localhost ~]$ docker attach os2
[root@e369ee551681 /]# 
[root@e369ee551681 /]# 
[root@e369ee551681 /]# read escape sequence

# Ctrl + P + Q 를 통해 종료하지 않고 빠져나오기
[admin@localhost ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED              STATUS              PORTS               NAMES
e369ee551681        centos:latest       "/bin/bash"          About a minute ago   Up About a minute                       os2
8740ba8785ae        httpd:latest        "httpd-foreground"   About an hour ago    Up About an hour    80/tcp              webserver2

 

(2) docker exec : 실행중인 컨테이너에서 명령 실행

[admin@localhost ~]$ docker exec os2 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
17: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

컨테이너 프로세스 및 로그 확인

docker top [컨테이너이름] : 컨테이너에서 실행되는 프로세스 정보 확인

docker logs [컨테이너이름] : 컨테이너 로그 확인

# mysql image 실행시키기
[admin@localhost ~]$ docker run -d --name db1 mysql:5.7
875f700437c01c710bd148bfcb78351103ade68b7b1d8570791333b6bd86edee

# 프로세스 확인해보니 mysql 이 exited 되었다.
[admin@localhost ~]$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
875f700437c0        mysql:5.7           "docker-entrypoint.s…"   9 seconds ago       Exited (1) 8 seconds ago                          db1

# 왜 그렇게 되었는지 log 확인해보기. 로그인 아이디 비밀번호를 설정해주지 않아서 오류남
[admin@localhost ~]$ docker logs db1
2020-07-28 02:24:15+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started.
2020-07-28 02:24:16+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-07-28 02:24:16+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started.
2020-07-28 02:24:16+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
	You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
    
# root_password 설정해서 다시 실행
[admin@localhost ~]$ docker run -d --name db2 -e "MYSQL_ROOT_PASSWORD=1234" mysql:5.7
50c97ebdd17f2856b23fb50c8f28570ecbf360519ac2ee639511d42920fb28af

# 실행이 잘 됨
[admin@localhost ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
50c97ebdd17f        mysql:5.7           "docker-entrypoint.s…"   4 seconds ago       Up 3 seconds        3306/tcp, 33060/tcp   db2

 

컨테이너에 파일 복사 및 확인

(1) docker cp [컨테이너이름]:[파일경로] [복사할위치]

이는 호스트에서 컨테이너로 복사도 되고, 컨테이너에서 호스트로 파일 복사도 가능하다!

# docker 컨테이너 os2의 /etc/passwd 파일을 /tmp 로 가져오기
[admin@localhost ~]$ docker cp os2:/etc/passwd /tmp

# 잘 가져와졌나, /tmp 에서 확인해보기
[admin@localhost ~]$ cat /tmp/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
...

(2) docker diff [컨테이너이름]

최초 이미지 파일에서 컨테이너의 변경사항을 알려준다. 

A : 파일이 추가됨 appended

C : 파일이 변경됨 changed

D : 파일이 삭제됨 deleted

[admin@localhost ~]$ docker diff webserver2
C /usr
C /usr/local
C /usr/local/apache2
C /usr/local/apache2/logs
A /usr/local/apache2/logs/httpd.pid

이미지 하나 넣고싶어서 걍 찍음

반응형