docekr ps
port 이렇게 변환해주는 기술이 NAT, ? docker에서는 docker proxy가 담당한다.
sudo apt -y install tree
저번 시간에는 개발팀에서 코드를 zip 파일로 전달받았다고 가정.
실무에서는 git으로 전달해준다(gitops)or 공용 클라우드 활용
docker -h
phpserver : 컨테이너의 호스트명을 phpserver로 지정한다.
작업할 땐 docker exec -it [컨테이너 이름] bash
라고 시작하면 컨테이너 id가 호스트명이 된다.
# git으로 코드를 공유받았다고 가정. Directory 단위로 개발한다.
yji@hostos1:~/LABs$ git clone https://github.com/brayanlee/docker-phpserver.git
Cloning into 'docker-phpserver'...
...생략
# Dockerfile 확인
yji@hostos1:~/LABs/docker-phpserver$ cat Dockerfile
FROM php:7.2-apache
MAINTAINER datastory Hub <hylee@dshub.cloud>
ADD index.php /var/www/html/index.php
EXPOSE 80
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
# Dockerfile 이용해서 image 생성
yji@hostos1:~/LABs/docker-phpserver$ docker build -t phpserver:1.0 .
# Docker image 확인
yji@hostos1:~/LABs/docker-phpserver$ docker images | grep php
phpserver 1.0 1385adda691e About a minute ago 410MB
php 7.2-apache c61d277263e1 21 months ago 410MB
yji@hostos1:~/LABs/docker-phpserver$ docker run -it -d -p 8004:80 \
> -h phpserver --name=phpserver phpserver:1.0
cd03d1e2944d14027aa1e5a341e05f27f7e23f89ea6f6d1109e62a6a290977e6
yji@hostos1:~/LABs/docker-phpserver$ docker exec -it phpserver bash
root@phpserver:/var/www/html# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@phpserver:/var/www/html# service apache2 status
[ ok ] apache2 is running.
root@phpserver:/var/www/html#
# ctrl + q + p 눌러서 컨테이너 빠져나온 후 docker cp로 index.php 파일 변경
yji@hostos1:~/LABs/docker-phpserver$ docker cp index.php2 phpserver:/var/www/html/index.php
yji@hostos1:~/LABs/docker-phpserver$ docker pull python:3.8-slim
3.8-slim: Pulling from library/python
7a6db449b51b: Extracting 28.51MB/31.38MB
e238bceb2957: Download complete
28c96731353f: Download complete
3154e472820f: Download complete
0a46f1dda381: Download complete
⭐ 레이어 5개로 이루어진 계층 구조 -> 이 레어이들이 merge 된 채로 -> container run하면 스냅샷 찍어서 /var/lib/docker에 저장한다.
fuse가 mount 작업을 해
Var~ 디렉토리 자체가 데몬처럼 올라온다.
디렉토리를 올려서 프로세스에 붙이는게 컨테이너
Fuse 가 컨테이너화 시켜서 프로세스에 붙여 …
yji@hostos1:~$ docker pull vishwasnarayanare/jupyternotebook
# 8900 포트는 실습 2-2 에서 필요함.
# -p 8900:8900 이 옵션을 적으면 docker proxy가 동작한다.
docker run -itd --name=py-test -p 8900:8900 python:3.8-slim
docker ps | grep python
# 컨테이너 나와서
docker cp py_lotto.py py-test:/py_lotto.py
docker cp py_http.py py-test:/py_http.py
docker exec -it py-test python /py_lotto.py
(docker exec -it [컨테이너명] [명령어])
yji@hostos1:~/LABs/python$ docker exec -it py-test python /py_http.py
Server running on port:8900
vishwasnarayanare/jupyternotebook latest c4d398d39f45 17 months ago 3.2GB
yji@hostos1:~$ docker run -it -p 8888:8888 --name=pyjupyter vishwasnarayanare/jupyternotebook
[I 2022-09-13 01:09:21.227 ServerApp] jupyterlab | extension was successfully linked.
[I 2022-09-13 01:09:21.237 ServerApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/jupyter_cookie_secret
[I 2022-09-13 01:09:21.779 ServerApp] nbclassic | extension was successfully linked.
..생략
To access the server, open this file in a browser:
file:///root/.local/share/jupyter/runtime/jpserver-1-open.html
Or copy and paste one of these URLs:
http://a0c494b0c8ce:8888/lab?token=86c54ed0964bc9325aefc1051ffee5997ee1795790e8fe7d
http://127.0.0.1:8888/lab?token=86c54ed0964bc9325aefc1051ffee5997ee1795790e8fe7d
http://127.0.0.1:8888/lab?token=86c54ed0964bc9325aefc1051ffee5997ee1795790e8fe7d
맨 아래 주소 ip 변경 > 브라우저에서 접속
http://192.168.56.101:8888/lab?token=86c54ed0964bc9325aefc1051ffee5997ee1795790e8fe7d
yji@hostos1:~/LABs/python$ docker exec -it pyjupyter bash
root@a0c494b0c8ce:/jup#
import folium
!pip install folium
seoulforest=folium.Map(location=[37.544392,127.0352537], zoom_start=15)
folium.Marker([37.544392,127.0352537], popup='서울숲공원').add_to(seoulforest)
folium.CircleMarker([37.544392,127.0352537], radius=30,
popup='서울숲공원', color='#3186cc',
fill_color='#3186cc',).add_to(seoulforest)
seoulforest
윈도우에 접속하기 위해선 -p 옵션이 필요하다.
yji@hostos1:~/LABs/node$ vim runapp.js
# 노드없어서 에러발생
yji@hostos1:~/LABs/node$ node runapp.js
Command 'node' not found, but can be installed with:
sudo apt install nodejs
yji@hostos1:~/LABs/node$ docker pull node:17-slim
yji@hostos1:~/LABs/node$ docker run -itd -p 9000:8000 --name=mynode node:17-slim
cbb81845e05851dbf602c40416601f5fed548a2864d0e775f99ef7daeed268cf
yji@hostos1:~/LABs/node$ docker cp runapp.js mynode:/runapp.js
yji@hostos1:~/LABs/node$ docker exec -it mynode ls
bin dev home lib64 mnt proc run sbin sys usr
boot etc lib media opt root runapp.js srv tmp var
# node service start
yji@hostos1:~/LABs/node$ docker exec -it mynode node /runapp.js
# 다른 터미널 : HostOS에ㅐ서 node container의 IP 확인
yji@hostos1:~/LABs/node$ docker inspect mynode | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.7",
"IPAddress": "172.17.0.7",
mysql의 행을 mongoDB에서는 Document라고 한다.
mongoDB는 json 형태로 데이터 저장
mysql : 3306
mongoDB : 27017
# mongoDB 5.0 설치
yji@hostos1:~/LABs/node$ docker pull mongo:5.0
# mongoDB container 실행
docker run -itd --name=mongodb -p 27017:27017 mongo:5.0
docker ps | grep mongo
docker exec -it mongodb bash
show dbs
use sampledb
db
db.t1.insert({name:'yji', job:'dev'})
db.t1.find()
image 다운받는 저장소는 변할 수 있다 !
docker pull docker.io/library/mongo:5
: docker hub에서 이미지 다운로드
docker pull gcr.io/google-samples/hello-app:1.0
: google gcr에서 이미지 다운로드
docker pull 192.168.56.200:5000/myweb:1.0
-> docker pull
하기 전에 hub.docker.com 에서 해당 image 정보를 확인 한다.
-> latest
버전은 비추합니다.
docker history
docker inspect
... EXPOSE 확인
docker pull mongo:5.0
이미지 검색은 어디서해 ? -> docker info로 확인
docker info | grep -i registry
docker pull gcr.io/google-samples/hello-app:1.0
이미지의 용량 확인
포트 확인 -> EXPOSE [port번호]
yji@hostos1:~/LABs$ docker image history mongo:5
IMAGE CREATED CREATED BY SIZE COMMENT
8f7e5d5cbbde 5 days ago /bin/sh -c #(nop) CMD ["mongod"] 0B
<missing> 5 days ago /bin/sh -c #(nop) EXPOSE 27017 0B
yji@hostos1:~/LABs$ docker image history myweb:1.0
IMAGE CREATED CREATED BY SIZE COMMENT
38fe5550c627 4 days ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
adf6d35d5e5e 4 days ago /bin/sh -c #(nop) EXPOSE 80/tcp 0B
e172e436139c 4 days ago /bin/sh -c #(nop) COPY file:c4448fcb64c9b935… 63.6kB
ab998aedd28b 4 days ago /bin/sh -c #(nop) COPY file:f9f59362757a6f6e… 160B
804f9cebfdc5 4 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
<missing> 4 weeks ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B
<missing> 4 weeks ago /bin/sh -c #(nop) EXPOSE 80 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B
<missing> 4 weeks ago /bin/sh -c #(nop) COPY file:09a214a3e07c919a… 4.61kB
<missing> 4 weeks ago /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7… 1.04kB
<missing> 4 weeks ago /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0… 1.96kB
<missing> 4 weeks ago /bin/sh -c #(nop) COPY file:65504f71f5855ca0… 1.2kB
<missing> 4 weeks ago /bin/sh -c set -x && addgroup -g 101 -S … 18MB
<missing> 4 weeks ago /bin/sh -c #(nop) ENV PKG_RELEASE=1 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ENV NJS_VERSION=0.7.6 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.23.1 0B
<missing> 4 weeks ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
<missing> 4 weeks ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ADD file:2a949686d9886ac7c… 5.54MB
해서 docker history 뽑아내기
docker image history httpd:2.4 --no-trunc > httpd_dockerfile.txt
로컬 PC (윈도우) 로 파일 가져오기
notepad+ or vs code 등 이용해서 보기
image는 layer 즉, 계층 구조의 집합 형태이다. layer 단위로 다운로드 > merged > snapshot
⭐ 컨테이너의 실체
1. image의 snapshot이다. -> /var/lib/docker~
그러면 아까 python 실습에서 py_lotto.py을 /var/lib/docker~ 아래서 찾아보자
root@hostos1:/var/lib/docker/overlay2# find / -name py_lotto.py
/home/yji/LABs/python/py_lotto.py
/var/lib/docker/overlay2/ca3582196578631902d16cf692146061cda58d9399bb4ecb54b30f5c8e9bf6b2/diff/py_lotto.py
2. process 이다.
3. image는 container의 infra(H/W -> cgroup, OS)를 제공한다.
-> 라인 수 > Step > layer
-> build 과정은 image -> container -> image -> container의 반복
마지막 컨테이너의 아이디가 `docker image inspect`에 올라온 것이다 ~
# 이미지가 컨테이너가 되면 아파치를 띄우세요
"Cmd": [
"httpd-foreground"
],
# WorkingDir > 컨테이너 접속 시 기본 경로. 보통 핵심 소스파일이 있는 곳으로 설정한다.
## 이거 왜 확인했지
yji@hostos1:~/LABs/python$ docker exec -it httpd-test bash
root@f052091d0469:/usr/local/apache2# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
docker image inspect
로 image의 환경변수 파악 후 부족한 부분은 내가 추가할 수 있어야한다.yji@hostos1:~/LABs$ docker image inspect --format="{{ .ContainerConfig.Env }}" httpd:2.4
[PATH=/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HTTPD_PREFIX=/usr/local/apache2 HTTPD_VERSION=2.4.54 HTTPD_SHA256=eb397feeefccaf254f8d45de3768d9d68e8e73851c49afd5b7176d1ecf80c340 HTTPD_PATCHES=]
docker inspect
: 컨테이너 -> 이걸로 IP 확인함.
: MAC 주소와 IP 주소는 이미지가 가질 수 없다. (이미지 = 정적) MAC주소 IP주소는 docker의 namespace가 할당한다. !
docker inspect
= docker container inspect
docker image inspect
= docker image inspect
밥 먹구 ~ ~
--force
) 하지만 강제는 권고사항아님 # 여러 개 동시에 삭제하고싶으면 옆에 나열하면 된다.
docekr stop [컨테이너 이름 | 컨테이너 id]
docekr rm [컨테이너 이름 | 컨테이너 id]
docker rmi [이미지명]
# 하지만 몇 백개씩 된다면 ?
# 도커 커맨드 활용 !
yji@hostos1:~$ docker stop py-test
py-test
yji@hostos1:~/LABs$ docker rm py-test
py-test
yji@hostos1:~/LABs$ docker rm itemdb
itemdb
yji@hostos1:~/LABs$ docker rmi mariadb:10.2
Untagged: mariadb:10.2
Untagged: mariadb@sha256:df0221d698d67296d78a35bc5687f0cb0df6b3cad6712e8cfafa65c006f5581c
Deleted: sha256:625e5b493bbbb2b4a37825391f7df8e298fc7883bb3e69b65d5e68602c4179f7
Deleted: sha256:853fdc002e931597b2f68dc08ef8594a40497691c6b77403f142b1559bfa48a9
Deleted: sha256:1f4d1ed5236aa5f9d0ba7d876e469b694c8dc0873c812d865c953a6783c0b4e1
Deleted: sha256:3cda0620a4c7885bf3dacd9d719dbc9eca42da150d4469c1cdea64bab0668848
Deleted: sha256:8eb4d73c685d2fb5f66c067d1bc246ffac926bc918222b98aa9d495a9152e2c3
Deleted: sha256:ac3945005adb0113bafbd96fed6e3907c622cc5013764ad287ae8d8620fbc93d
Deleted: sha256:0fdab41f48069dd6283cd812160188294fecb3a6b489b172cf439ff64527c545
Deleted: sha256:4f3335f79fe1e59a189a2bd2665748e0a19f6447023568343724b52332844ca8
Deleted: sha256:dcbf25e998d3ab3eae5cd5791d24c9d4741650cac0ebb42e88cd7f6196ad986b
Deleted: sha256:b4cdde1b80519893f726187be38b613d37ff68ec15f9bf45ec7cb483fd483c7c
Deleted: sha256:197d3735c0d4a631e87485049bf2431765f23756f7843d35efaa0eac160ecc77
Deleted: sha256:ea0f4a05d93cecef3eea552b9147d678ad0fba4056f6f51914122cf7976485fe
Deleted: sha256:e722d396f503c712107acad2a081b07e33e73d6286c43f58234f69345a216918
cexrm
)yji@hostos1:~$ docker ps -a -q
f052091d0469
cbb81845e058
a0c494b0c8ce
cd03d1e2944d
1a671ffb4e91
70dffa1d629f
5436e97f6bcd
1592f89474bc
# 죽은 컨테이너(status가 exited인 컨테이너)만 필터링
yji@hostos1:~$ docker ps -a -q --filter 'status=exited'
70dffa1d629f
5436e97f6bcd
yji@hostos1:~$ docker rm $(docker ps -a -q --filter 'status=exited')
70dffa1d629f
5436e97f6bcd
yji@hostos1:~$ docker ps -a -q --filter 'status=exited'
# alias로 간단하게 사용하자. (전역화 필수 ~)
alias cexrm='docker rm $(docker ps -a -q --filter 'status=exited')'
docker rm $(docker ps -a -q --filter 'status=exited')
yji@hostos1:~$ vim .bashrc
yji@hostos1:~$ source .bashrc
# alias는 hostos2 에도 똑같이 셋팅.
yji@hostos1:~$ alias
alias cexrm='docker rm $(docker ps -a -q --filter 'status=exited')'
# 아무것도 안뜨면 로그인 안되어있는 것임
yji@hostos1:~/LABs$ docker info | grep -i username
yji@hostos1:~/LABs$
yji@hostos1:~/LABs$ 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: ur2e
Password:
WARNING! Your password will be stored unencrypted in /home/yji/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
yji@hostos1:~/LABs$ docker info | grep -i username
Username: ur2e
# auth : 얼핏보면 암호화된 것 같지만 BASE64인코딩 된 것일 뿐이다.
yji@hostos1:~/LABs$ cat /home/yji/.docker/config.json
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "7Jyg7KCA7J2066aEOuu5hOuwgOuyiO2YuAo=
"
}
}
yji@hostos1:~/LABs$ echo 7Jyg7KCA7J2066aEOuu5hOuwgOuyiO2YuAo= | base64 --decode
유저이름:비밀번호
진짜 암호화 알고리즘이 적용될 경우 매우 무거워지기때문에 base64 인코딩만 한 것이다. 따라서, docker logout
을 꼭 해주자.
다른 방법으로는, docker hub 사이트에서 계정 > Account Setting > Security
# docker logout 후에 .access_token에 복사한 토큰 붙여넣기
yji@hostos1:~$ vim .access_token
yji@hostos1:~$ docker logout
Removing login credentials for https://index.docker.io/v1/
yji@hostos1:~$ cat .access_token | docker login --username ur2e --password-stdin
WARNING! Your password will be stored unencrypted in /home/yji/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
yji@hostos1:~$ docker info | grep -i username
Username: ur2e
docker.io/ur2e
ur2e/이미지명:버전
-> 주소)
yji@hostos1:~$ docker images | grep myweb
myweb 2.0 ac0a3ab4ac5b 6 hours ago 28.4MB
myweb 1.0 38fe5550c627 4 days ago 23.6MB
yji@hostos1:~$ docker image tag myweb:1.0 ur2e/myweb:1.0
yji@hostos1:~$ docker images | grep myweb
myweb 2.0 ac0a3ab4ac5b 6 hours ago 28.4MB
ur2e/myweb 1.0 38fe5550c627 4 days ago 23.6MB
myweb 1.0 38fe5550c627 4 days ago 23.6MB
yji@hostos1:~$ docker push ur2e/myweb:1.0
The push refers to repository [docker.io/ur2e/myweb]
f97a5c6c3378: Pushed
90e4850a4894: Pushed
bf4e176a4d9b: Mounted from library/nginx
a1d571e4e83d: Mounted from library/nginx
6d97b4d00719: Mounted from library/nginx
2a7647ca3937: Mounted from library/nginx
549c42eea4a6: Mounted from library/nginx
994393dc58e7: Mounted from library/nginx
1.0: digest: sha256:170650981293f5ba343b4340c250b9d0da72a725fac9339d2b20925558fa15b1 size: 1984
yji@hostos1:~$ docker images | grep myweb
myweb 2.0 ac0a3ab4ac5b 6 hours ago 28.4MB
ur2e/myweb 1.0 38fe5550c627 4 days ago 23.6MB
myweb 1.0 38fe5550c627 4 days ago 23.6MB
yji@hostos1:~$ docker image tag myweb:2.0 ur2e/myweb:2.0
yji@hostos1:~$ docker push ur2e/myweb:2.0
mysql_repo
hub.docker.com
에 pushyji@hostos1:~$ docker create -it --name myubuntu16-1 ubuntu:16.04
d72a40c3ecde08b028ee89903b686b2189f5f50d8e479239081da47023cfb917
yji@hostos1:~$ docker ps -a | grep myubuntu
d72a40c3ecde ubuntu:16.04 "/bin/bash" 21 seconds ago Created myubuntu16-1
yji@hostos1:~$ docker start myubuntu16-1
myubuntu16-1
yji@hostos1:~$ ps -ef | grep myubuntu16-1
yji 21768 8755 0 15:34 pts/3 00:00:00 grep --color=auto myubuntu16-1
yji@hostos1:~$ docker ps | grep myubuntu16-1
d72a40c3ecde ubuntu:16.04 "/bin/bash" About a minute ago Up 17 seconds myubuntu16-1
yji@hostos1:~$ docker attach myubuntu16-1
root@d72a40c3ecde:/#
root@d72a40c3ecde:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
옵션 | 설명 |
---|---|
-i | interactive |
-t | tty(단말) -it : 작업수행 |
-d | detach(백그라운드로 실행 ex. nginx -> -d |
-p | publicsh host_port:container_port |
-e | 환경변수 ex.DB, 다수 환경 변수 사용시 -> -e ~ -e ~ -e ~ |
--restart | =always, default값은 '=no', =always면 사용자 stop이 아닌 예기치 않은 컨테이너 종료 시 자동 재시작 kubenetes에서는 기본값이 restart=Always로 되어있음= auto-healing |
--name | 컨테이너이름지정 |
--rm | container stop과 동시에 자동 rm 수행 -> test용 container에 적합 |
-u | container 기본 유저는 root, 특정 계정에서 application 수행 시 그 계정명을 지정한다. ex. -u=yji |
-w | workdir와 같이 컨테이너 내부 접속 시 연결되는 경로를 지정 |
-v | 볼륨 지정(NFS와 유사, container to host, host to container) |
이미지 컨테이너 네트워크 볼륨
vim env_list
: env_list 파일에 환경변수 저장 --env-file=env_list
옵션으로 파일을 환경 변수로 지정 docker --rm
(스냅샷까지 싹 지움) 이용한 로그 ..체크..yji@hostos1:~$ docker run -d --rm centos /bin/ping localhost
4d53bf9eb57fe822b069e8a0c1b8b5e7ed256cc0a427b09086c77ab0dec71fce
yji@hostos1:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d53bf9eb57f centos "/bin/ping localhost" 15 seconds ago Up 14 seconds reverent_wilbur
1a671ffb4e91 myweb:2.0 "/docker-entrypoint.…" 7 hours ago Up 7 hours 0.0.0.0:8003->80/tcp, :::8003->80/tcp myweb3
1592f89474bc google/cadvisor:latest "/usr/bin/cadvisor -…" 5 days ago Up 7 hours 0.0.0.0:9559->8080/tcp, :::9559->8080/tcp cadvisor
yji@hostos1:~$ docker logs -f 4d53bf9eb57f
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.055 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.058 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.056 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.055 ms
docker --env-file
yji@hostos1:~/LABs$ vim env_list
yji@hostos1:~/LABs$ cat env_list
JAVA_HOME=/java/jre1.0
JAVA_JVM=/java/jvm1.0
yji@hostos1:~/LABs$ docker run -it --env-file=env_list -w /java/jre1.0 centos:7 bash
[root@49e47a5e10dc jre1.0]#
컨테이너가 사용중인 리소스 사용량을 수집한다.
컨테이너가 사용중인 자원 소비량을 측정한 결과 -> metric -> cadvisor를 통해 모니터링 : docker stats
linux에서 top
: 모든 프로세스 보여줌
docker top
: 자신의 프로세스만 보여줌 (?)
# publishing 된 정보만 따로 볼 수 있음
yji@hostos1:~/LABs$ docker port myweb1
80/tcp -> 0.0.0.0:8001
80/tcp -> :::8001
# 이게뭐지
yji@hostos1:~/LABs$ docker top myweb1
UID PID PPID C STIME TTY TIME CMD
root 23983 23964 0 16:17 ? 00:00:00 nginx: master process nginx -g daemon off;
systemd+ 24041 23983 0 16:17 ? 00:00:00 nginx: worker process
docker run -d --name=myweb2 -p 8002:80 myweb:1.0
-> 이거 설명해보세요.
-p: 네트워크 기능 활성화.
내부 이벤트 정보. docker system events
컨테이너 잠깐 멈추기 (일시정지) 왜 가능? 컨테이너 = 프로세스
docker restart / pause / unpause
yji@hostos1:~/LABs$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe6b04776c48 myweb:1.0 "/docker-entrypoint.…" 47 seconds ago Up 46 seconds 0.0.0.0:8002->80/tcp, :::8002->80/tcp myweb2
yji@hostos1:~/LABs$ docker pause myweb2
myweb2
yji@hostos1:~/LABs$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe6b04776c48 myweb:1.0 "/docker-entrypoint.…" About a minute ago Up About a minute (Paused) 0.0.0.0:8002->80/tcp, :::8002->80/tcp myweb2
yji@hostos1:~/LABs$ docker unpause myweb2
myweb2
yji@hostos1:~/LABs$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe6b04776c48 myweb:1.0 "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:8002->80/tcp, :::8002->80/tcp myweb2
docker rename
: 컨테이너 이름 변경 yji@hostos1:~/LABs$ docker rename myweb2 mywebserver2
yji@hostos1:~/LABs$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe6b04776c48 myweb:1.0 "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:8002->80/tcp, :::8002->80/tcp mywebserver2
docker exec
를 사용하자docker cp
: 언제 사용하는지!컨테이너에 들어갔는데 vi가 없어서 파일 수정 불가 -> 이 컨테이너에 vi 설치하면 컨테이너가 무거워진다.
로컬로 수정할 파일 데리고 나와서
docker cp webserver:/etc/nginx/nginx.conf /home/yji/nginx.conf
수정하고
vim nginx.conf
다시 컨테이너 안으로 넣어준다.
docker cp nginx.conf webserver:/etc/nginx/nginx.conf
yji@hostos1:~$ docker run -d -p 7777:80 --name webserver nginx:1.23.1-alpine
0fb501e036c13c8c5f58b4ec5e5a9f1d4278d643d3fd86cdc76df153e1b112f2
yji@hostos1:~$ docker cp webserver:/etc/nginx/nginx.conf /home/yji/nginx.conf
yji@hostos1:~$ ls
Desktop Documents Downloads LABs Music nginx.conf Pictures Public Templates Videos
# 컨테이너에 vi 설치하지말고, 밖에서 수정한 후에 컨테인너 안으로 다시 넣어준다.
yji@hostos1:~$ vim nginx.conf
yji@hostos1:~$ docker cp nginx.conf webserver:/etc/nginx/nginx.conf
# Host의 현재 디렉터리에 있는 local.txt 파일을 text container의 /tmp/local.txt로 복사
docker cp
useradd
명령어는 많은 파일을 건드린다...~
C : (change) update, delete
컨테이너는 Read/Write 환경 > 이걸 이미지로 만들자 .
yji@hostos1:~/LABs/nginx-test$ docker run -it --name webserver4 -d -p 8004:80 2214yj/myweb:3.0
docker image 다운 받을 때 docker pull python
이런 식으로 하지말자. :lastest
버전은 용량이 크다.
따라서, docker hub에서 image 검색 후 경량화된 버전을 다운 받자
python = 모듈화가 잘 되어있다.
1) 일반 프로그래밍
2) 웹 프로그래밍(socket)
컨테이너는 라우터로 도커0 (172.~) 이거 사용 중 ?
IaC ( 코드로서 인프라 ) : Dockerfile
docker run ~~~~ bash
== docker run ~~~ /bin/bash
같은 거다 !
--> echo $PATH 절대 경로 ~~
docker exec : 작업
docker attach : 간단한 로그 조회
# attach는 bash 없어도 접속 가능
yji@hostos1:~$ docker attach mycent