# docker rmi $(docker images -q)
# docker stop $(docker ps -a -q)
동작중인 컨테이너 확인
$ docker ps
정지된 컨테이너 확인
$ docker ps -a
컨테이너 삭제
$ docker rm [컨테이너id]
삭제된 것 확인
$ docker ps -a
복수개 삭제도 가능
$ docker rm [컨테이너id], [컨테이너id]
컨테이너 모두 삭제
$ docker rm `docker ps -a -q`
3. 이미지 삭제
현재 이미지 확인
$ docker images
이미지 삭제
$ docker rmi [이미지id]
컨테이너를 삭제하기 전에 이미지를 삭제할 경우
-f 옵션을 붙이면 컨테이너도 강제삭제
$ docker rmi -f [이미지id]
docker run -d --privileged --sysctl net.core.somaxconn=4096 --ulimit nofile=512000:512000 --ulimit nproc=512000:512000 --name new_backoffice -p 80:80 49236605475f
docker run --privileged --sysctl net.core.somaxconn=4096
9. docker commit
docker commit 현재컨테이너명 새로운컨테이너명
10. docker-compose 명령
docker-compose 커맨드 예
docker-compose -f docker-compose.yml up -d lp
11. docker container 파일로 백업하기
- docker 추출 (container export)
docker container export [컨테이너명 또는 컨테이너ID] > [백업할 파일명, 보틍 .tar]
ex) # docker container export docker_webapp_1 > test.tar
- docker 삽입 (container import)
https://jybaek.tistory.com/566
12. docker container log 확인 - docker-compose logs -f
13 docker stats
14. docker 파일 공유
[Docker] 파일 복사
- 호스트 -> 컨테이너
docker cp [host 파일경로] [container name]:[container 내부 경로]
anchore라는 name을 가진 컨테이너가 실행중이다.
이 컨테이너에 호스트에 있는 docker-cp-test 라는 파일을 복사해 보자.
- docker cp 명령어로 호스트의 파일 docker-cp-test를 anchore 컨테이너의 test 디렉터리 하위로 복사했다.
anchore 컨테이너에 들어가 test 디렉터리를 확인해 보면 호스트에서 복사한 파일이 복사가 되어 있는 것을 확인할 수 있다.
- 컨테이너 -> 호스트
# docker cp [container name]:[container 내부 경로] [host 파일경로]
도커 컨테이너와 호스트 컴퓨터 간에 파일을 공유해야 할 때는 다음 방법을 사용할 수 있다.
1) 공유 폴더를 이용하는 법
만약 docker container run 명령으로 도커 컨테이너를 시작할 때 -v 옵션으로 컨테이너-호스트 간의 공유 폴더를 만들었다면 공유 폴더에 공유하고자 하는 폴더를 넣은 뒤 리눅스 mv 명령이나 호스트의 파일 복사 명령으로 원하는 위치로 이동하면 된다.
예를 들어 test.txt 이라는 파일을 윈도우즈 호스트에서 도커 컨테이너로 이동하려고 하는 경우를 생각하자. 또 호스트의 사용자 홈 디렉터리가 도커 컨테이너의 ~/hosthome 이라는 폴더 이름으로 공유되고 있다고 가정하자.
- test.txt 파일을 호스트의 사용자 홈 디렉터리로 복사한다.
- 도커 컨테이너의 터미널(콘솔)을 열고 도커 컨테이너 안에서 다음과 같이 명령한다.
dockeruser@306d4d3d002b:~$ mv ~/hosthome/test.txt ~
2) docker container cp 명령을 사용하는 법
이 방법은 공유 폴더를 지정하지 않은 상태에서도 쓸 수 있다. 도커 터미널에서 다음과 같이 명령하면 된다.
$ docker container cp 컨테이너_이름:컨테이너_폴더나_파일_이름 호스트컴퓨터의_폴더
예를 들어 rpython 이란 이름의 컨테이너 내에 있는 /home/dockeruser/notebook 폴더를 통째로 호스트 컴퓨터의 d:/ 라는 폴더 아래로 복사하고 싶으면 다음과 같이 명령한다.
$ docker container cp rpython:/home/dockeruser/notebook d:/
만약 data 폴더 안에 untitled.ipynb 라는 파일만 있었으면 다음과 같이 notebook 폴더가 만들어지고 그 아래에 untitled.ipynb 파일이 있는 것을 볼 수 있다.
$ dir d:/notebook/
untitled.ipynb
만약 datascienceschool/rpython 이미지를 사용하고 있다면 /home/dockeruser 폴더를 통째로 복사하지 않도록 주의한다. 이 폴더 아래에는 Anaconda 설치 파일도 함께 있어서 필요없이 많은 파이썬 실행 파일과 패키지 파일까지 복사된다.
이 방법의 단점은 아직까지 * 등의 와일드 카드(wild card)를 지원하지 않는다는 점이다. 따라서 정확한 파일이름이나 폴더 이름을 지정해야 한다.
반대로 호스트 컴퓨터에 백업해 놓은 파일이나 폴더를 컨테이너 안으로 복사하려면 다음과 같이 파일 인수를 바꾸면 된다.
$ docker container cp d:/notebook rpython:/home/dockeruser/
다만 이 경우에는 호스트 컴퓨터의 사용자와 컨테이너의 사용자가 다르면 권한(permission) 오류가 발생할 수 있으므로 도커 컨테이너 안에서 다음과 같이 폴더 소유자를 변경해 주어야 한다.
$ docker attach rpython
dockeruser@bbbd63bfa054:~$ sudo chown dockeruser:dockeruser -R /home/dockeruser/notebook
3) scp 파일 전송 프로그램을 이용하는 법
만약 도커 컨데이터와 호스트 간에 공유 폴더는 설정되어 있지 않지만 도커 컨테이너 안에서 ssh 서버가 가동 중이라면 scp 파일 전송 프로그램을 이용할 수 있다. datascienceschool/rpython 도커 이미지에는 이미 ssh 서버가 가동되도록 설정되어 있기 때문에 scp를 사용할 수 있다.
호스트 컴퓨터가 맥이라면 이미 scp 프로그램이 있을 것이다. 윈도우라면 putty 프로그램 다운로드 웹 사이트에서 윈도우용 scp 프로그램인 pscp 프로그램을 내려받을 수 있다.
다음으로는 도커 컨데이터에서 가동 중인 ssh 서버의 포트 번호를 알아야 한다. 원래 ssh 서버 포트는 22번이지만 도커 호스트에서도 22번을 사용하기 때문에 보통 다른 포트 번호로 가동한다. 포트 번호는 자동으로 랜덤하게 지정되었을 수도 있고 docker run 명령시에 -p 옵션으로 지정하였을 수도 있다. 만약 이 글을 순서대로 따라왔다면 아마도 8022 포트를 사용할 것이다. 현재 사용하는 포트 번호는 docker container port 명령으로 알 수 있다.
이제 다음과 같이 명령한다. 암호를 입력하라는 프롬프트가 나오면 도커 컨테이너 암호를 넣는다. 이 때 다음과 같은 점에 주의한다.
* 윈도우즈에서는 scp 대신 pscp 명령을 사용한다.
* 포트 번호는 8022이 아닌 경우에는 자신이 사용하는 포트 번호를 사용한다.
* 사용자가 dockeruser가 아니면 자신이 사용하는 사용자 아이디와 디렉터리를 사용한다.
$ scp -P 8022 test.txt dockeruser@192.168.99.100:/home/dockeruser
dockeruser@192.168.99.100's password:
15. docker container name 변경
docker rename [old] [new]
16. docker create image from container
17. 실행중인 docker 컨테이너 환경변수 변경
- container id 알아내기
# docker inspect my_container
- config 파일 변경
# vi /var/lib/docker/containers/{container-id}/config.v2.json
- docker 컨테이너 재시작
# docker restart my_container
18. docker container 백업/복원
id : karas639
pw : zc*********
● 컨테이너 백업
도커 이미지는 OS 를 담고 있으며, 하나 이상의 이미지를 가질수 있다.
도커 컨테이너는 이미지로부터 생성되는 실행중인 인스턴스이다.
도커 컨테이너 백업을 위해서는 commit 을 해야한다.
commit 을 하면 현재 상태가 도커 이미지로 저장된다.
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78727078a04b debian:8 "/bin/bash" 13 seconds ago Up 11 seconds container1
위의 docker ps 명령의 결과로 하나의 컨테이너가 up 상태임을 확인 할 수 있다.
컨테이너 아이디는 78727078a04b 이고, 컨테이너 이름은 container1 이다.
이제, commit 명령을 사용하여 현재 실행 상태를 스냅샷 떠보자.
# docker commit -p 78727078a04b container1
e09f9ac65c8b3095927c14ca0594868f73831bde0800ce66415afeb91aea93cf
-p 옵션은 커밋하기 위해 컨테이너를 일시 중지 시키는 옵션이다.
커밋 명령을 통해 container1 이란 이름의 이미지가 하나 생성되었음을 아래와 같이 확인 할 수 있다.
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
container1 latest e09f9ac65c8b 39 seconds ago 125.1 MB
이제 재배포 할 수 있는 컨테이너 백업 이미지 하나를 얻게 되었다.
다른 도커 호스트 시스템에 우리의 container1 이미지를 재배포(redeploy)하려면
개인 도커 레포지토리에 이미지를 푸쉬해야 한다.
# docker login
# docker push container1
또는 tar 로 묶어서 자유롭게 원하는 도커 호스트 시스템에 배포할 수도 있다.
# docker save -o ~/container1.tar container1
[root@localhost lubos]# ls -l ~/container1.tar
-rw-r--r--. 1 root root 131017216 Jun 14 20:31 /root/container1.tar
● 컨테이너 복원
앞서 도커 컨테이너를 백업하는 방법에 대해 알아보았다.
이번 섹션에서는 백업을 어떻게 복원하는지 알아보기로 한다.
개인 도커 레포지토리에 백업본을 push 한 경우에는 간단히 run 명령을 사용하여
container1 이미지로부터 새로운 인스턴스를 시작하면 된다.
tar 로 묶어서 백업한 경우 load 명령을 사용하여 도커의 로컬 이미지 레포지토리에 넣어주어야 한다.
-i 옵션은 --input 임.
# docker load -i /root/container1.tar
확인을 위해 아래 명령을 입력해보자.
# docker images
이미지 목록에 복원된 container1 이 나오면,
run 명령을 이용하여 container1 이미지로부터 새로운 인스턴스를 시작할 수 있다.
18-1. 컨테이너 작업 및 commit 및 tag 설정 후 docker hub로 공유하여 관리하기
19. [Docker] 한번 생성한 컨테이너 계속사용하기 exit & restart
docker run 및 --name 옵션으로 컨테이너 이름 지정 및 접속 후
#exit 명령어를 실행하여 컨테이너를 Stop 시킴
윈도우 호스트 창에서 docker restart 지정한컨테이너이름
-> 기존에 사용했던 컨테이너로 재접속
완전히 껐다가 다시 접근할 때에는
# docker start 컨테이너이름
# docker attach 컨테이너이름
20. docker tag 달기
docker tag 8516816a424c 376112396982.dkr.ecr.ap-southeast-1.amazonaws.com/exvina-exchange-web:stg_last
# docker image tag cilk-elk-kibana karas639/docker-elk_kibana
# docker image tag docker-elk_kibana karas639/docker-elk_kibana:v1
# docker images | grep v1
# docker image tag docker-elk_elastice karas639/docker-elk_elastic:v1
# docker image tag docker-elk_elastic karas639/docker-elk_elastic:v1
# docker image tag docker-elk_elasticsearch karas639/docker-elk_elasticsearch:v1
# docker image tag docker-elk_logstash karas639/docker-elk_logstash:v1
# docker image push karas639/docker-elk_elasticsearch:v1
# docker image push karas639/docker-elk_logstash:v1
# docker image push karas639/docker-elk_kibana:v1
21. Docker 컨테이너(Container) 커밋(Commit)하기
* 현재까지 작업해 놓은 ubuntu 컨테이너를 그대로 저장하고 싶다.
* 실행중인 컨테이너를 커밋해보자.
# docker commit CONTAINER IMAGE_NAME
--> $ docker commit ubuntu-cpp-driver ubuntu-cpp-driver
sha256:85b8eb5a23e6c850c4f4d298119275ec5a85bc43c78414372aee2859e9ad9e54
* container 이름이 ubuntu-cpp-driver 였고, 이를 이미지로 저장할 때 이미지 이름도 동일하게 했다.
* docker images로 확인해보자.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-cpp-driver latest 85b8eb5a23e6 About a minute ago 582MB
22. Docker 이미지(Image) Push하기
* Docker cloud 에 로그인 하기
# docker login
* docker user id 변수 지정해놓기
# export DOCKER_ID_USER="nicewoong"
* Docker Image 에 태그 달기
# docker tag ubuntu-cpp-driver $DOCKER_ID_USER/ubuntu-cpp-driver
* Tag 가 적용되어 있는 Image 를 Docker Cloud 에 Push
# docker push $DOCKER_ID_USER/ubuntu-cpp-driver
The push refers to a repository [docker.io/nicewoong/ubuntu-cpp-driver]
441a4ecb7164: Pushing [==================================================>] 472.2MB
7f7a065d245a: Mounted from nicewoong/ubuntu-bluecoat
f96e6b25195f: Mounted from nicewoong/ubuntu-bluecoat
c56153825175: Mounted from nicewoong/ubuntu-bluecoat
ae620432889d: Mounted from nicewoong/ubuntu-bluecoat
a2022691bf95: Mounted from nicewoong/ubuntu-bluecoat
docker hub에 올린 내 이미지 다운로드 하기
'Docker' 카테고리의 다른 글
[에러메세지] The repository 'https://download.docker.com/linux/ubuntu buster Release' does not have a Release file (0) | 2020.12.02 |
---|---|
docker nginx & python 3.9 설치 (0) | 2020.11.05 |
Kali linux에 docker 설치하기 (0) | 2020.09.07 |
Docker Kali Linux Install(윈도우에 kali linux docker 설치) (0) | 2020.09.07 |
docker container에서 locale UTF-8로 사용하기 (0) | 2020.08.26 |