Mac OS에서 docker-compose를 실행하다 다음 에러가 발생했다. 



Credentials store docker-credential-osxkeychain exited with "User interaction is not allowed." 


해결 방법


- 첫 번째 작업

최신 docker로 업그레이드 한다.



- 두 번째 작업


menu bar -> preferences -> "Securely store docker logins in macOS keychain"의 체크박스가 on되어 있는데. off로 변경한다.


- 세 번째 작업

예전 docker 설정 때문에 이슈가 있으니 아래와 같이 변경한다.


cat ~/.docker/config.json

{

  "experimental" : "disabled",

  "stackOrchestrator" : "swarm",

  "auths" : {


  },

  "credsStore" : ""

}



그래도 안되면 재부팅해본다. 

Posted by '김용환'
,



커맨드

 docker-compose -f docker-compose.yml up ${container_name}


예)

 docker-compose -f docker-compose.yml up  rabbitmq



Posted by '김용환'
,



맥북에서 도커 네트워크(brider)를 생성하는 예시이다. 


$ docker network create --driver=bridge mynet

1e322c39b6415e3d6b76bee009e8282d6e9e738e9b35930abc875c1cf20578fa

$ docker network ls | grep mynet

1e322c39b641        mynet                           bridge              local


정상적으로 드라이버가 생겼는지 확인한다.


$ ifconfig

(리눅스에서는 ip addr | grep br-)


bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500

options=63<RXCSUM,TXCSUM,TSO4,TSO6>

ether 4a:00:24:80:b7:01

Configuration:

id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0

maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200

root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0

ipfilter disabled flags 0x2

member: en1 flags=3<LEARNING,DISCOVER>

        ifmaxaddr 0 port 13 priority 0 path cost 0

member: en2 flags=3<LEARNING,DISCOVER>

        ifmaxaddr 0 port 14 priority 0 path cost 0

member: en3 flags=3<LEARNING,DISCOVER>

        ifmaxaddr 0 port 15 priority 0 path cost 0

member: en4 flags=3<LEARNING,DISCOVER>

        ifmaxaddr 0 port 16 priority 0 path cost 0

nd6 options=201<PERFORMNUD,DAD>

media: <unknown type>

status: inactive



생성된 네트워크(bridge)를 사용하는 컨테이너를 실행한다.


$ docker run -it -d --name container1 --net=mynet ubuntu:16.04 bash  



두 번 커맨드를 사용해 생성된 네트워크(bridge)를 사용할 수 있다.


$ docker run -it -d --name container2 ubuntu:16.04 bash           


$ docker network connect mynet container2




내부 ip를 확인해본다.


$  docker exec container1 ip addr

20: eth0@if21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default

    link/ether 02:42:ac:19:00:02 brd ff:ff:ff:ff:ff:ff

    inet 172.25.0.2/16 brd 172.25.255.255 scope global eth0

       valid_lft forever preferred_lft forever

       

$  docker exec container2 ip addr 


(비슷하게 나온다)


Posted by '김용환'
,

[docker] cmd와 entrypoint

docker 2019. 9. 10. 09:44



도커 컨테이너가 시작될 때 사용되는 커맨드로 CMD와 ENTRYPOINT가 있다. 



<CMD >

도커 컨테이너가 시작될 때 실행된다. 

CMD를 사용해야 ARG와 ENV를 쉽게 사용한다.

CMD ["Executable", "매개 변수"...] 
CMD의 매개 변수는 docker run에 사용된 매개변수로 덮어쓰인다




<ENTRYPOINT>

도커 컨테이너가 시작될 때 실행된다. 

CMD의 매개 변수는 docker run에 사용된 매개변수로 덮어쓰지 않는다. 즉 그대로 실행된다.



Posted by '김용환'
,

[docker] ENV와 ARG 비교

docker 2019. 9. 10. 09:40



코딩으로 따지면 컴파일 타임(compile-time), 런타임(run-time)처럼..

도커 파일에는 이에 해당하는 ARG(build-time)와 ENV(run-time)가 존재한다. 




<ARG>


표현식 : ${변수:+값}, ${변수:-값} 

빌드 시점에 사용한다

도커 파일에서 ARG 변수 혹은 ARG 변수=값 형태로 표현할 수 있다. 

docker build 커맨드에 --build-arg 옵션을 사용해 매개 변수를 전달하거나 덮어쓸 수 있다. 




<ENV>

표현식 : ${변수:+값}, ${변수:-값} 

런타임 환경변수이다

docker run 커맨드 --e 옵션을 활용해 매개 변수를 전달하거나 덮어쓸 수 있다.





개인적으로 ARG보다는 ENV를 사용해 docker run을 사용하는 편이다. 






Posted by '김용환'
,


docker run에 환경 변수를 전달할 때 


주의해야 할 사항이 있다.  순서이다.



동작 안하는 예시이다. -it 뒤에 -e을 사용하면 적용이 안된다.

docker run -p 80:80  -it -e PHASE="sandbox" voucher-renderer


-it 플래그와 -e 플래그를 분리해야 한다.

docker run -p 80:80 -e PHASE="sandbox" -it voucher-renderer


Posted by '김용환'
,


여러 라인으로 구성된 내용을 특정 파일로 저장할 때 cat << 커맨드를 자주 사용한다.

 cat > /etc/yum.repos.d/nginx.repo << EOL

[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

gpgcheck=0

enabled=1

EOL




도커 파일에서 아래와 같이 bash에서 사용하듯 여러 라인을 하나의 파일로 저장하려면 에러가 발생한다. 


RUN cat > /etc/yum.repos.d/nginx.repo << EOL

[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

gpgcheck=0

enabled=1

EOL



도커 파일에서는 다음과 같이 echo와 $를 잘 사용해야 비슷한 효과를 얻을 수 있다.


RUN echo $'[nginx] \n\
name=nginx repo \n\
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ \n\
gpgcheck=0 \n\
enabled=1' >> /etc/yum.repos.d/nginx.repo


Posted by '김용환'
,


Dockerfile에서 아래와 같이 nginx 설치 커맨드를 추가했다.


RUN yum install -y nginx


그러나 에러가 발생했다.

Rpmdb checksum is invalid: dCDPT(pkg checksums): policycoreutils.x86_64 0:2.0.83-30.1.el6_8 - u



rpm 체크섬 이슈이니. 아래와 같이 rpm 체크섬을 재구축하는 커맨드를 사용하면 에러가 발생하지 않는다.


RUN rpm --rebuilddb && yum install -y nginx


Posted by '김용환'
,


docker export와 docker import를 먼저 살펴본다.


1. docker export :  container를 tar파일로 저장한다. 


$ docker export (컨테이너명 or 컨테이너 ID) > (컨테이너).tar

 

 

2. docker import : tar 파일을 다시 docker 이미지로 생성한다. export의 반대이다. 


$ docker import (파일 또는 URL)




docker save와 docker load를 살펴본다. 


1. docker save : docker 이미지를 tar 파일로 저장한다


$ docker save -o rabbitmq_managment.tar rabbitmq:managment



2. docker load : tar파일 이미지를 docker 이미지로 저장한다.


$ docker load -i rabbitmq_managment.tar


 





간단히 보면 그냥 간단해 보이는데. 사실은 좀 차이가 있다. 


 커맨드

결과 유형 

사용처 

소스 유형 

 export 

 

TAR 파일

컨테이너 파일 시스템 

 컨테이너

 import

 도커 이미지

 플랫 파일 시스템

 TAR 파일

 save

 TAR 파일

 도커 이미지(히스토리 포함)

 이미지

 load

 도커 이미지

 도커 이미지(히스토리포함)

 TAR 파일



플랫(flat) 파일 시스템 - 하위 디렉토리 없이 파일들을 포함하는 하나의 디렉토리를 의미한다



docker export와 import 커맨드는 플랫 파일 시스템에서 동작한다.


 docker export 커맨드는 컨테이너 상태를 구성하는 TAR 파일을 생성한다. 도커와 마찬가지로 프로세스 실행 상태는 저장되지 않는다. 즉 파일만 저장한다. docker import 커맨드는 TAR 파일에서 히스토리 또는 메타 데이터가 없는 도커 이미지를 생성한다.


docker import 및 docker export 커맨드는 대칭적이지 않다. 


즉 docker import 및 docker export 커맨드만 사용해서는 기존 컨테이너에서 컨테이너를 생성할 수 없다. 비대칭은 유용하다. docker export는 이미지를 TAR 파일로 내보내고 docker import는 모든 계층 히스토리와 메타 데이터를 “삭제”하기에 비대칭이 유용할 수 있다. 




TAR 파일로 내보내거나 저장하고 싶다면 기본적으로 stdout으로 전송되기에 다음처럼 파일로 저장한다.


$ docker save rabbitmq:management > rabbitmq_management.tar



방금 생성 한 것처럼 TAR 파일을 네트워크으로 안전하게 전송할 수 있다. 전송 전에 미리 gzip으로 압축할 수도 있다. 다른 사람들이 TAR 파일을 사용해 이미지를 그대로 가져올 수 있다. 접근 권한이 있으면 이메일이나 scp로 전송할 수 있다.


$ scp rabbitmq_management.tar ex.google.com:/tmp/

rabbitmq_management.tar



그리고 다른 사용자의 도커 데몬에 직접 이미지를 전송할 수 있다


docker save rabbitmq:management | \          


 ssh ex.google.com \                  


 docker load -     





도커 이미지의 기록을 삭제하고 싶다면 load 대신 import를 사용할 수 있다.





docker export $(docker run -d rabbitmq:management true) | \


    ssh ex.google.com docker import



Posted by '김용환'
,


도커 이미지(tar) 크기 확인하는 방법은 다음과 같다. 



1. docker history 


$ docker history rabbitmq:management

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT

df6f26ea3e53        4 months ago        /bin/sh -c #(nop)  EXPOSE 15671 15672           0B

<missing>           4 months ago        /bin/sh -c set -eux;  erl -noinput -eval '  …   29.5MB

<missing>           4 months ago        /bin/sh -c rabbitmq-plugins enable --offline…   23B

<missing>           4 months ago        /bin/sh -c #(nop)  CMD ["rabbitmq-server"]      0B

<missing>           4 months ago        /bin/sh -c #(nop)  EXPOSE 25672 4369 5671 56…   0B

<missing>           4 months ago        /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B

<missing>           4 months ago        /bin/sh -c #(nop) COPY file:379f3802e5612ff1…   12.2kB

<missing>           4 months ago        /bin/sh -c #(nop)  ENV LANG=C.UTF-8 LANGUAGE…   0B

<missing>           4 months ago        /bin/sh -c #(nop)  VOLUME [/var/lib/rabbitmq]   0B

<missing>           4 months ago        /bin/sh -c #(nop)  ENV HOME=/var/lib/rabbitmq   0B

<missing>           4 months ago        |1 PGP_KEYSERVER=ha.pool.sks-keyservers.net …   21B

<missing>           4 months ago        |1 PGP_KEYSERVER=ha.pool.sks-keyservers.net …   12.6MB

<missing>           4 months ago        /bin/sh -c #(nop)  ENV PATH=/opt/rabbitmq/sb…   0B

<missing>           4 months ago        /bin/sh -c #(nop)  ENV RABBITMQ_HOME=/opt/ra…   0B

<missing>           4 months ago        /bin/sh -c #(nop)  ENV RABBITMQ_PGP_KEY_ID=0…   0B

<missing>           4 months ago        /bin/sh -c #(nop)  ENV RABBITMQ_VERSION=3.7.…   0B

<missing>           4 months ago        |1 PGP_KEYSERVER=ha.pool.sks-keyservers.net …   393kB

<missing>           4 months ago        /bin/sh -c #(nop)  ENV RABBITMQ_DATA_DIR=/va…   0B

<missing>           4 months ago        |1 PGP_KEYSERVER=ha.pool.sks-keyservers.net …   79MB

<missing>           4 months ago        /bin/sh -c #(nop)  ENV OTP_SOURCE_SHA256=122…   0B

<missing>           4 months ago        /bin/sh -c #(nop)  ENV OTP_VERSION=21.3.5       0B

<missing>           5 months ago        /bin/sh -c #(nop)  ENV OPENSSL_PGP_KEY_ID=0x…   0B

<missing>           5 months ago        /bin/sh -c #(nop)  ENV OPENSSL_SOURCE_SHA256…   0B

<missing>           5 months ago        /bin/sh -c #(nop)  ENV OPENSSL_VERSION=1.1.1b   0B

<missing>           5 months ago        /bin/sh -c #(nop)  ARG PGP_KEYSERVER=ha.pool…   0B

<missing>           5 months ago        /bin/sh -c set -eux;  apt-get update;  apt-g…   2.51MB

<missing>           5 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B

<missing>           5 months ago        /bin/sh -c mkdir -p /run/systemd && echo 'do…   7B

<missing>           5 months ago        /bin/sh -c rm -rf /var/lib/apt/lists/*          0B

<missing>           5 months ago        /bin/sh -c set -xe   && echo '#!/bin/sh' > /…   745B

<missing>           5 months ago        /bin/sh -c #(nop) ADD file:1d7cb45c4e196a6a8…   88.9MB



2.  docker save 


$ docker save rabbitmq:management | gzip | wc -c

 88612225




실제로 컨테이너(파일 디스크) 크기를 알고 싶다면 다음 커맨드를 사용한다.


1. docker inspect


$ docker image inspect rabbitmq:management --format='{{.Size}}'

212906551



2. docker ps


$  docker ps --size | grep rabbit

f1c3080202f1        rabbitmq:management   "docker-entrypoint.s…"   29 hours ago        Up 29 hours         4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp   docker_rabbit_1      190B (virtual 213MB)



Posted by '김용환'
,