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
'[혁신성장 청년인재] 인공지능을 활용한 보안전문가 양성과정' 카테고리의 다른 글
Day16-2: 도커 볼륨 | 도커 네트워크 (0) | 2020.07.28 |
---|---|
Day16-3: 도커파일(Dockerfile)이란? 작성부터 사용까지 총정리 (0) | 2020.07.28 |
Day15-2: 도커 설치하는 법 | 도커 명령어 정리 | 컨테이너 실행 및 관리 (0) | 2020.07.27 |
Day15-1: 클라우드 개념, 도커(Docker) 학습 (0) | 2020.07.27 |
Day14: 리눅스 서버 실습| 미니 프로젝트 (0) | 2020.07.27 |