겉바속촉

[DOCKER] 도커_이미지 생성 본문

IT 일기 (상반기)/DOCKER

[DOCKER] 도커_이미지 생성

겉바속촉 2020. 12. 31. 14:44
728x90
반응형

 

 

DOCKER에 대해서

 

공부해보도록 하겠습니다

 

!^^!

 

 

 


 

 

우리는 원래

Docker 이미지를 바탕으로 컨테이너를 작성해왔습니다

 

그런데

 

컨테이너를 바탕으로 해서 도커 이미지를 만들어보려고 합니다

 

 

 

1. 컨테이너로부터 이미지 작성

 

 

우선 exec 명령 활용해서 root 밑에 commit.test 파일 만들게요

 

docker exec dns-web touch/commit.test

 

그리고 커밋해주기 --> 이미지 작성

docker commit -a "ljh" -m "add /commit test and index.html" dns-web juhyun9086/web:v1

 

(컨테이너 이름 뒤에는 도커 허브에 올리기 위해 추가 옵션 넣었습니다)

(도커허버 아이디/레퍼지토리:태그)

 

 

 

 

2. 도커 허브에 push

 

docker images 명령으로 이미지 잘 되어있나 확인

그리고 push 해볼게요

 

그전에 login 먼저!!

 

docker login

docker push juhyun9086/web:v1

 

 

 

 

3. 이미지로 컨테이너 올리기

 

docker run -d juhyun9086/web:v1

 

그리고 docker ps로 컨테이너 id 확인해준 후에

그 id로 docker exec b7 cat /etc/hosts

ip주소 확인

 

curl 172.17.0.5

 

 

 

 


 

 

 

tar 파일

활용해보도록 하겠습니다

 

 

 

 

1. 컨테이너를 tar 파일로 출력

 

docker export dns-web > web.tar

dns-web 컨테이너를 web.tar 파일로 묶어서 아카이빙해주는 것입니다

 

mkdir /test

cd /test

test 폴더 하나 만든 후에 거기로 들어가서

타르 파일을 풀어줄게요

 

그전에 tvf로 확인할게요

 

tar tvf /root/web.tar

그럼 굉장히 많은 파일들이 뜹니다

 

tar xf /root/web.tar

해당 디렉토리로 가서 web.tar를 풀어줍니다

 

 

 

이제 cd usr/share/nginx/html/  로 가서 

ls 로 확인해보니

잘 들어가 있습니다:)

 

 

 

2. tar 파일로부터 이미지 작성

 

 

 

우선 home으로 이동해주시고

 

cat web.tar |docker image import - webimport:test

 

파이프의 역할 : cat의 표준 출력을 뒤에 오는 프로세스를 표준 입력으로!!

그리고 import 뒤의  "-" 이 표시가 뒤의 디바이스에 데이터를 넣겠다는 뜻

 

docker images로 확인해보니

webimport가 보이네요?!

 


현재까지 한 과정

 

server1의 컨테이너로 돌고 있는 애를

export를 활용해 tar로 묶어준 후에

 

server2로 넘기고

거기서 이미지를 import 시킵니다

 

다시 이 이미지로 컨테이너 올릴 수가 있죠

그래서 server1에 동작 중이었던 컨테이너를 server2로 이관하는 작업을 진행한 겁니다

 


 

 

 

3. 이미지 저장

 

 

 

docker save -o nginx.tar nginx

 

nginx이미지를 tar로 아카이빙해서 저장할게

컨테이너가 아니라 이미지 자체로!!

즉 이미지 이관

 

컨테이너 이관 --> export

이미지 이관 --> save

(이미지 자체를 넘길 수가 없어서 tar 형태로)

 

 

그리고 현재 저는 우분투에서 작업하고 있기 때문에

centos로 옮기는 것도 가능하겠죠??

 

scp nginx.tar 192.168.137.131:/tmp

 

 

 

 

centos에서 ls /tmp로 확인해보시면

nginx.tar 가 있는 걸 볼 수 있습니다

 

 

 

 

4. 이미지 읽어 들이기

 

 

docker image load -i  /tmp/nginx.tar

 

 

 

5. 불필요한 이미지, 컨테이너 일괄 삭제

 

 

 

사용하지 않는 볼륨들,

stop된 컨테이너들,

사용하지 않는 네트워크들,

컨테이너에서 사용하지않는 이미지들

 

삭제해주는 명령

 

docker system prune -a 

 

 

우선 docker image들이 얼마나 있는 지

docker images 명령

 

 

 

docker ps -a 명령을 내려서

컨테이너들도 얼마나 있는 지 확인

 

그리고 

docker system df 명령으로

이미지와 관련된 정보들을 보며 prune을 했을 때 확보가능한 정보들을 알 수 있다

 

 

 

 

 

 

 

지우고 나서

다시

docker system df로 확인해봤더니

다음과 같이 reclaimable보니 아까와 다르죠??

 

 

 

ps -a 명령으로,

images 명령으로

 

변화된 것 확인 가능합니다:)

 

 

 

 

현재 포스팅에서 한 명령들 정리

  135  docker exec dns-web touch /commit.test
  136  docker diff dns-web
  137  docker commit -a "ljh" -m "add /commit.test and index.html" dns-web juhyun9086/web:v1
  138  docker images
  139  docker push
  140  docker login
  141  docker push juhyun9086/web:v1
  142  docker run -d juhyun9086/web:v1
  143  docker ps
  144  docker exec b7 cat /etc/hosts
  145  curl 172.17.0.5
  146  docker ps
  147* docker run -d roseh00/
  148  docker export jin-web > web.tar
  149  docker export dns-web > web.tar
  150  pwd
  151  ls -;
  152  ls -l
  153  mkdir /test
  154  cd /test
  155  tar tvf /root/web.tar
  156  tar xf /root/web.tar
  157  ls
  158  cd usr/share/nginx/html/
  159  ls
  160  cat index.html
  161  cd
  162  cat web.tar |docker image import - webimport:test
  163  docker images
  164  docker save -o nginx.tar nginx
  165* scp nginx.tar 
  166  cd /var/lib/docker/image
  167  ls
  168  cd
  169  docker images
  170  docker ps -a
  171  docker system df
  172  docker system prune -a
  173  docker system df
  174  ps -a
  175  docker images
728x90
반응형