Docker 기본 명령어

2018.04.24 13:28Auto Build(CI SCM GIT)

Docker 실행 


sudo service docker start




redis 설치 


docker run -p 6379:6379 --name skan-redis -d  redis:latest 




aerospike-service 설치


docker run -tid --name aerospike -p 3000:3000 -p 3001:3001 -p 3002:3002 -p 3003:3003 aerospike/aerospike-server


mysql 설치 


docker run --name adteck-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=skan2018 -e MYSQL_ROOT_HOST=% -d mysql:5.7.21 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci




--------------------------------------------------------------------------


docker 컨테이너 삭제 


> docker rm {컨테이너ID}




docker 컨테이너 모두 삭제 


> docker rm 'docker ps -a -q'




docker 이미지  삭제 


> docker rmi  {이미지ID}




docker 컨테이너 모두 삭제 


> docker rm 'docker ps -a -q'


> docker ps -q -a | xargs docker rm




none image  삭제 


    > docker rmi $(docker images | grep “^<none>” | awk ‘{print $3}’)




docker logs [option] {containerid}




------------------------------------------------------------------


docker 실행 


docker start




docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]



옵션 설명


-d detached mode 흔히 말하는 백그라운드 모드


-p 호스트와 컨테이너의 포트를 연결 (포워딩)


-v 호스트와 컨테이너의 디렉토리를 연결 (마운트)


-e 컨테이너 내에서 사용할 환경변수 설정


–name 컨테이너 이름 설정


–rm 프로세스 종료시 컨테이너 자동 제거


-it -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션


–link 컨테이너 연결 [컨테이너명:별칭]




docker run -p 8080:8080 -t springio/gs-spring-boot-docker






컨테이너 생성 실행 후 bash 접속 


docker run -i -t --name skan_jenkins skan/jenkins:basic /bin/bash



80 : port


docker run --name skan_jenkins -d  -p 8080:8080 -p 50000:50000 skan/jenkins:basic





docker container 접속 방법 [exec]




실행 중인 docker 정보 확인 


docker ps -a 




docker exec 로 컨테이너 접속 


docker exec -it [CONTAINER ID] /bin/bash






shh 쉘 접속후 필요한 파일 및 설정




mysql 접속 


docker exec -it adteck-mysql mysql -uroot -p




--------------------------------------------------------------------------------------------


docker image 생성 






docker commit <옵션> <컨테이너 이름> <이미지 이름>:<태그>





$ docker commit -m "{commit message}" -a "{master_user}" {container_id} {image_name}:{tag}


$ docker commit -m "initial commit" -a "sangkil.an@cj.net" dc7cf848887a skan/jenkins:0.1


$ docker commit -a "Foo Bar <foo@bar.com>"  m "add hello.txt" hello-nginx hello:0.2




-a "Foo Bar <foo@bar.com>"과 -m "add hello.txt" 옵션으로 커밋한 사용자와 로그 메시지를 설정합니다. 


hello-nginx 컨테이너를 hello:0.2 이미지로 생성합니다.






---------------------------------------------------------------------------------------------


docker tag/push



docker tag skanmedia/adserver:latest adverserver:0.1




docker tag <이미지 이름>:<태그> <Docker 레지스트리 URL>/<이미지 이름>:<태그> 형식입니다.


docker push <Docker 레지스트리 URL>/<이미지 이름>:<태그> 형식입니다.




* Linux 개인 저장소 생성 


1.환경 설정 변경


sudo docker -d --insecure-registry localhost:5000


vim /etc/init.d/docker


DOCKER_OPTS=--insecure-registry localhost:5000



sudo service docker restart




* window Docker 개인 저장소 생성 (localhost) 


기본 HTTPS로 통신 하기 때문에 안전한 내트워크 상에 있는 곳 에서는 HTTP를 이용할수 있다. 


이를 사용하기 위해 설정을 추가 한다. 




1. Configration 변경 


edit C:/Users/Username/.docker/machine/default/config.json


add the registry : "InsecureRegistry": ["x.x.x.x:port"]


restart docker with > docker-machine.exe restart default (didn't work)


restart windows (there must be a better way ;-)


docker login x.x.x.x:port




2. docker registry 실행 


docker run -d -p 5000:5000 --restart=always --name registry registry:2



* push 이미지 확인 


1. 이미지 확인하기


$ curl -X GET http://192.168.99.100:5000/v2/_catalog


#출력 {"repositories":["hello-world"]}


2. 태그 정보 확인하기


$ curl -X GET http://192.168.99.100:5000/v2/hello-world/tags/list


# 출력 {"name":"hello-world","tags":["latest"]}




* 외부에서 pull 받기 


외부에서 pull 받기 위해서는 docker Image tag 를 가지고 있는 서버의 IP를 configuration 에 등록 한다. 





---------------------------------------------------------------------------------------------


######################################


# Spring Boot Docker 


######################################


# Docker build/deploy/run 실행  




## docker file Sample


Spring boot [.Dockerfile]  Smapme URL : https://spring.io/guides/gs/spring-boot-docker/




### 1. Docker Console 접속 


cd {PROJECT_HOME_PATH}


mvn clean package


mvn dockerfile:build  




> docker repository 명은 maven plug in 파일에 정의 되어 있다. (pom.xml)




### 2. docker run 방법 


docker run -d --name "nettyApiServer" -p 80:8080 -t skanmedia/adserver




case.1 백그라운드 모드 


docker run -e "SPRING_PROFILES_ACTIVE=prod" -d --name "nettyApiServer" -p 80:8080 -t skanmedia/adserver


case.2 일반 실행 


docker run -e "SPRING_PROFILES_ACTIVE=prod" --name "nettyApiServer" -p 80:8080 -t skanmedia/adserver




### 3. docker Start




docker start nettyApiServer




### 4. docker upload


docker login


docker tag skanmedia/adserver:latest localhost:5000/adverserver:0.1


docker push {IP/HOSTS}:{PORT}/adverserver:0.1




### 5. docker pull 


docker pull {IP/HOSTS}:{PORT}/adverserver:0.1





---------------------------------------------------------------------------------------------




https://docs.microsoft.com/ko-kr/dotnet/standard/microservices-architecture/multi-container-microservice-net-applications/multi-container-applications-docker-compose




Docker Compose 




 다중 컨테이너 응용 프로그램 배포 , 필요에 따라 사용자 지정 Docker 이미지를 사용 할수도 있다. 


 기본적으로 배포하려는 각 컨테이너와 컨터이너에 대한 특정 특성을 정의 한다. 




#볼륨 리스트 확인


> docker volume ls


#볼륨 상세 정보 확인 


> docker volume inspect {volume_id or volume_name}


#볼륨 삭제


docker volume rm {volume_id or volume_name}




#도커 머신 내부 접속 


> docker-machine ssh 




# 도커컴포저 컨네이너 시작 중지 


docker-compose start/stop




# 도커컴포저 컨네이너 빌드 


> docker-compose build 


(yml 값이 변경되면 build 명령으로 rebuild 한다)






# 도커컴포저  컨네이너 삭제후 재빌드 


> docker-compose up -d --force-recreate --build






#기타 


> docker-compose ps # lists all services (id, name)


> docker-compose stop <id/name> #this will stop only the selected container


> docker-compose rm <id/name> # this will remove the docker container permanently 


> docker-compose up # builds/rebuilds all not already built container 






# 컨테이너 아이피 확인 방법 




> docker inspect -f "{{.NetworkSettings.IPAddress}}" CONTAINER_ID


> docker exec CONTAINER_ID ip addr show eth0


> docker exec -it CONTAINER_ID /bin/bash