본문 바로가기

클라우드/도커(Docker)

도커 Docker 컨테이너 관리

환경 변수

 


cpu와 메모리


작동 확인


exec와 attach


cp 파일복사


 

diff


더보기

# 환경변수 제공 -e
vagrant@docker:~$ docker run -it -e A=123 ubuntu
root@5a5610043794:/# 

# mysql 실행
vagrant@docker:~$ docker run -d mysql:5.7
75fe207042911fff271a9ddf3fcd66730c3c29702213a336dd223c2fe7000ee3
# 상태 확인
vagrant@docker:~$ docker ps vagrant@docker:~$ docker ps 확인-a
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS                     PORTS     NAMES
75fe20704291   mysql:5.7   "docker-entrypoint.s…"   7 seconds ago   Exited (1) 6 seconds ago             busy_leakey

-> 실행 후 바로 종료 된것을 확인

# 원인을 찾기 위해 로그 확인
vagrant@docker:~$ docker logs 75
2021-07-01 05:28:19+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.34-1debian10 started.
2021-07-01 05:28:19+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2021-07-01 05:28:19+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.34-1debian10 started.
2021-07-01 05:28:20+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
    You need to specify one of the following:
    - MYSQL_ROOT_PASSWORD
    - MYSQL_ALLOW_EMPTY_PASSWORD
    - MYSQL_RANDOM_ROOT_PASSWORD
    
-> MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD, MYSQL_RANDOM_ROOT_PASSWORD 중 하나를
  지정해야 한다
  

# 환경변수를 설정하고 실행 
vagrant@docker:~$ docker run -d -e "MYSQL_ROOT_PASSWORD=0525" mysql:5.7
2e4d46aa30d6d95e952efc72d0c9ba75dc176b1473ea35051a7f8a13d7453f45
# 상태 확인
vagrant@docker:~$ docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS                      PORTS                 NAMES
2e4d46aa30d6   mysql:5.7   "docker-entrypoint.s…"   3 seconds ago    Up 2 seconds 3306/tcp, 33060/tcp   competent_lamarr
 ->컨테이너가 종료되지 않고 계속 실행중임을 확인

    
# 변수를 제공해서 db 를 초기화 할수있도록 쉘스크립트가 만들어져있음
/usr/local/bin/docker-entrypoint.sh  -> 파일 이름은 docker inspect dml "Entrypoint.sh" 확인
$MYSQL_ROOT_PASSWORD ~ 최소 설정
루트패스워드를 직접 지정 
스크립트에 의해 환경변수 제공하는 이미지들이 있다
 


# cpu와 메모리 제한을 걸고 컨테이너 생성
vagrant@docker:~$ docker run -it --name dh --cpus 0.3 ubuntu
root@0321e1df8175:/# 
vagrant@docker:~$ docker run -it  --cpus 0.3 --memory 100m ubuntu

# cpu와 메모리 제한 변경
vagrant@docker:~$ docker update --cpus 0.5 dh
vagrant@docker:~$ docker update --memory 200m dh


# 작동 확인 
vagrant@docker:~$ docker run --name web -d httpd
76337a16053c2b784e33ecaa5f4e37cc4ec2f71f71bac7d5c237187b00cc4922
vagrant@docker:~$ docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS     NAMES
76337a16053c   httpd     "httpd-foreground"   21 seconds ago   Up 19 seconds   80/tcp    web
vagrant@docker:~$ docker inspect 76
           "IPAddress": "172.17.0.3",
vagrant@docker:~$ curl http://172.17.0.3
<html><body><h1>It works!</h1></body></html>
잘 작동되고있다


# exec
#실행중인 컨테이너에서 어플리케이션 추가로 실행
#임시로 쉘을 띄워 접속
#디버깅 용도
#standrad input, terminal => -it 
vagrant@docker:~$ docker exec -it web bash
root@76337a16053c:/usr/local/apache2# 

#종료하지 않고 빠져나가는 방법 
ctrl+p+q
read escape sequence

# attach
# 컨테이너에 표준입출력을 연결
# 실시간으로 로그를 볼때 사용
vagrant@docker:~$ docker run -it ubuntu
vagrant@docker:~$ docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS     NAMES
5dbab2373f3e   ubuntu    "bash"               48 seconds ago   Up 48 seconds             trusting_kilby
76337a16053c   httpd     "httpd-foreground"   11 minutes ago   Up 11 minutes   80/tcp    web
vagrant@docker:~$ docker attach 5d
root@5dbab2373f3e:/# 


# host <-> container 파일 복사 (index.html 파일을 컨테이너에 복사 )
# host컴퓨터 index.html 생성
vagrant@docker:~$ echo "hello world" > index.html
vagrant@docker:~$ cat index.html
hello world

# 컨테이너 생성, 실행
vagrant@docker:~$ docker run -d httpd
vagrant@docker:~$ docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS     NAMES
7ccb7add2dae   httpd     "httpd-foreground"   18 seconds ago   Up 18 seconds   80/tcp    laughing_goodall

# 컨테이너의 index.html 파일 확인
vagrant@docker:~$ docker exec -it 7c bash
root@7ccb7add2dae:/usr/local/apache2# cd htdocs/
root@7ccb7add2dae:/usr/local/apache2/htdocs# ls
index.html
root@7ccb7add2dae:/usr/local/apache2/htdocs# cat index.html 
<html><body><h1>It works!</h1></body></html>

# index.html 파일을 컨테이너에 복사
vagrant@docker:~$ docker cp index.html 7c:/usr/local/apache2/htdocs

# 컨테이너의 index.html 파일 확인
vagrant@docker:~$ docker exec -it 7c bash
root@7ccb7add2dae:/usr/local/apache2# cd htdocs/
root@7ccb7add2dae:/usr/local/apache2/htdocs# ls  
index.html
root@7ccb7add2dae:/usr/local/apache2/htdocs# cat index.html 
hello world
root@7ccb7add2dae:/usr/local/apache2/htdocs# 




# docker diff
# 두가지의 차이를 보여줌
# 현재 컨테이너의 상태와 원래 이미지를 비교
vagrant@docker:~$ docker diff 7c
C /usr
C /usr/local
C /usr/local/apache2
C /usr/local/apache2/logs
A /usr/local/apache2/logs/httpd.pid
C /usr/local/apache2/htdocs
C /usr/local/apache2/htdocs/index.html
C /root
A /root/.bash_history

-> A: 파일이 추가 됨/C: 파일이 변경 됨 /D: 파일이 삭제 됨