시그마 삽질==six 시그마

docker 명령어 본문

프로그래밍/Docker

docker 명령어

Ethan Matthew Hunt 2020. 5. 5. 18:04

 

 

1. 도커 설치

 

# 도커 설치(Centos 기준..)
yum install docker

# 도커 서비스 실행
service docker start


#맥북은 하단 주소에 가서 install하면됨
https://docs.docker.com/docker-for-mac/install

 

2.  도커 명령어 

 

#도커 hub에 로그인. 엔터 후 아이디 패스워드 입력
docker login

#도커 hub 내 계정에 push
docker image push 내아이디/이미지명:태그

#도커 hub 내 계정 이미지 pull
docker image pull 내아이디/이미지명:태그

# 도커 hub에서 로그아웃
docker logout

#도커 네트워크 목록 표시
docker network ls

#명령어로 해당 네트워크에 있는 컨테이너 확인
docker network inspect {network name} 

# 이미지 검색. official이라고 체크되있는게 공식임
docker search ubuntu

# pull 명령 이미지 get
# docker pull <이미지명>:<태그>  ubuntu:11.10 태그지정가능
docker pull ubuntu:latest

# 이미지 태그 설정
# docker image tag <사용자명>/<현이미지명:현태그>  <사용자명>/<신규이미지명>:<신태그>
# tag 뒤 <사용자명>없으면 생략.공식이미지임
# 현태그 생략시 latest로 인지함
# 태그 설정시 이미지 추가됨. <현이미지명:현태그>와 동일한 image_id로 생성됨
docker image tag ubuntu  myname/myos:0.1  //ubuntu최신버전을 myname/myos 태그 0.1로 하나추가
docker image tag ubuntu  ubuntu:0.2  //ubuntu최신버전 태그를 사용해서 ubuntu 0.2 태그 추가

# 이미지 목록 출력
docker images

# 이미지 상세정보 확인
#docker image inspect 이미지명:태그
docker image inspect ubuntu:latest

# history 명령으로 이미지 히스토리 살펴보기
# docker history <이미지이름>:<태그> 형식 이미지 이름 대신 이미지ID도가능
docker history ubuntu:latest

#이미지 상세정보가 JSON형식인데 거기서 key에 해당하는 값 가져오기( Config key 속의  WorkingDir key의 값을 찾는것)
docker image  inspect -f "{{.Config.WorkingDir }}"  ubuntu:latest

# 컨테이너로 생성 및 시작 후 Bash 쉘 실행
# docker run <옵션> [컨테이너명] <이미지 이름> <실행할 파일>  -i(컨테이너표준입력오픈) -t(단말기 디바이스사용) 두개 사용시 실행된 Bash셀 입출력가능.-v 컨테이너가 호스트 볼륨 사용가능
#  --name 옵션으로 컨테이너 이름 지정, 미지정시컨테이너명은 랜덤자동설정됨
#도커 create / run 명령어 모두 이미지가 없을 경우 자동으로 pull을 먼저 수행하여 이미지를 다운로드 받음
docker run -it --name world ubuntu /bin/bash


# 컨테이너로 생성 및 시작2
# -d 옵션은 컨테이너를 백그라운돌 실행 -p 80:80 호스트의 80포트와 컨테이너의 80포트를 연결해 외부노출
# http://<호스트ip>:80접속시 컨테이너의 80포트로 접속됨
# -v /tmp/data:/data 옵션으로 호스트의 /tmp/data 디렉토리를 컨테이너의 /data 디렉토리에 연결
# /tmp/data 디렉토리에 파일넣으면 컨테이너에서 해당 파일 읽을 수 있음
docker run --name test-nginx -d -p 80:80 -v /tmp:data/data nginx


#컨테이너 생성 및 시작3
#-e 옵션은 컨테이너 환경변수 설정(비번,값 등)
#도커 bash에서 나올때 도커 안꺼지게 하려면  ctrl+p +q  눌러줘라

docker run -p 3306:3306 --name mysql_boot -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_DATABASE=springboot -e MYSQL_USER=hongildong -e  MYSQL_PASSWORD=pass -d mysql
docker exec -i -t mysql_boot bash // bash로 mysql 실행
mysql -u hongildong -p (password: pass)
show databases;
use springboot;
show tables;

#컨테이너 생성 및 시작4
#  --raw  한글깨짐 없이
docker run -p 6379:6379 --name redis_boot -d redis
docker exec -i -t redis_boot redis-cli --raw

#의도적으로 도커 죽이기
docker kill -s=SIGKILL 컨테이너ID


# inspect 명령으로 세부 정보 확인하기
# docker inspect명령은 이미지와 컨테이너의 세부정보를 출력함
# docker inspect <컨테이너 이름 or 컨ID>
docker inspect world

# inspect 명령으로  컨테이너 ip 주소를 확인
docker inspect <컨테이너 이름 or 컨ID> | grep IPAddress

#환경변수 확인
docker inspect Env

#컨테이너 가동 상태 확인(CPU,mem USAGE, mem%, net I/O, blcok I/O, PIDS)
#docker stats <컨테이너이름 or 컨ID>
docker stats world

#도커 실행 환경 확인(컨테니어스,도커버전,OS종류,아키텍처..)
docker system info

#도커가 사용하고 있는 디스크 이용상황 나옴
docker system df

#가동 컨테이너 프로세스 확인
#docker container top <컨테이너이름 or 컨ID>
docker container top world

#가동 컨테이너의 포트 전송 확인
#docker container port <컨테이너이름 or 컨ID>
docker container port world

# ps 명령으로 컨테이너 목록 확인  -a는  정지된 컨도 출력
# status 가 Up이면 운영중, Exited면 stop된것
sudo docker ps -a

# start명령으로 컨테이너 시작하기.  docker start <컨테이너이름 or 컨ID>
docker start world

#restart 명령으로 컨테이너 재시작
docker restart world

# attach 명령으로 컨테이너 접속하기 . docker attach <컨테이너이름 or 컨ID>
# Bash 쉘에서 exit 또는 ctrl+D 입력시 컨 정지. ctrl+p, ctrl+Q 차례로 입력하면 정지않고 빠져나감
docker attach world

# exec 명령으로 외부에서 컨테이너 안의 명령 실행
docker exec world echo "Hello Hello"

#컨테이너 안에 접속 docker exec -it 컨테이너명 /bin/bash
docker exec -it ecs-TASK /bin/bash

# stop 명령으로 컨테이너 정지하기
docker stop world

#모든 컨테이너 종료
docker stop $(docker ps -a -q)

#중지된 모든 컨테이너 삭제
docker container prune


# rm 명령으로 컨테이너 삭제
docker rm world

# rmi 명령으로 이미지 삭제
docker rmi ubuntu:latest




#컨테이너 안의 파일 복사
# docker cp <컨테이너 이름>:<컨테이너 안의 파일경로> <호스트 경로> 형식
#또는  docker cp <호스트 파일>  <컨테이너 이름>:<컨테이너 안의 파일경로>  형식
docker cp webserver:/etc/nginx/nginx.conf ./
docker cp ./test.txt webserver:/tmp/test.txt


# diff 명령으로 컨테이너에서 변경된 파일 확인하기
# 컨테이너가 실행되면서 변경된 파일 목록을 출력함. 비교 기준은 컨테이너를 생성한 이미지 내용
# docker diff <컨테이너 이름 or 컨ID>
# A는 추가된파일 C는 변경된파일 D는 삭제된 파일
docker diff nginx


# 컨테이너로부터 이미지 생성하기
# docker commit 명령은 컨테이너의 변경 사항을 이미지 파일로 생성함
# docker commit <옵션> <컨테이너 이름> <이미지이름>:<태그> 형식. 컨테이너 이름대신 컨ID 가능
# -a xxx -m xxx 옵션으로 커밋한 사용자와 로그 메세지를 설정. 컨테이너를 world:0.2 이미지로 생성

sudo docker commit -a "Brad Pitt <Brad@pitt.com>" -m "add world.txt" nginx world:0.2


# build 명령으로 이미지 생성하기
# dockerfile이 저장된 디렉토리에서 명령실행
# docker build <옵션><Dockerfile경로>형식  --tag 옵션으로 이미지이름:태그 설정가능
# 이미지 이름만 설정시 태그는 latest로 설정됨
docker build --tag hello:0.1 .


엔트리포인트 (Entrypoint)
도커 컨테이너가 실행할 때 고정적으로 실행되는 스크립트 혹은 명령어
생략할 수 있으며, 생략될 경우 커맨드에 지정된 명령어로 수행 
그래서 도커 이미지 실행 전 엔트리포인트와 커맨드가 어떤게 있는지 미리 확인하는게 중요!!


#도커 네트워크 드라이버
docker network ls


#도커 공식문서 Network drivers 로 검색
#bridge, host, overlay…

#네트워크 none: inspect로 봤을 때 drivers, ipdress, bridge 다 없음!. 네트워크 필요없거나 커스톰 네트워크필요할 때 사용
docker run -i -t --net none ubuntu:focal


#네트워크 host: 직접 호스트 네트워크 붙어서 사용!!!
docker run -d --network=host grafana/grafana
docker ps 봐도 네트워크 공란, inspect 보면 ipadress 지정 x


#네트워크 bridge
docker network create --driver=bridge aaa
docker run -d --network=aaa --net-alias=hello nginx
docker run -d --network=aaa --net-alias=grafana grafana/grafana
 
--net-alias 의 이름으로 컨테이너 ID를 서치할 수 있음. 그래서 그걸로  다른 컨테이너에서 접근 가능.

ifconfig 치면
vethxxxxxx <—컨테이너 개수만큼 가상의  veth 드라이버 생성됨
ens5:  <—호스트의 eth0임
docker0 라는  bridge network 생성됨




 #전체 로그 확인
$ docker logs [container]

# 마지막 로그 10줄 확인
$ docker logs --tail 10 [container]

# 실시간 로그 스트림 확인
$ docker logs -f [container]

# 로그마다 타임스탬프 표시
$ docker logs -f -t [container]



Networking overview
https://docs.docker.com/network/

Use bridge networks
https://docs.docker.com/network/bridge/

Use overlay networks
https://docs.docker.com/network/overlay/

Use host networking
https://docs.docker.com/network/host/

 

도커 환경변수 
docker run  -it -e MY_HOST=aaa ubuntu:focal bash
echo $MY_HOST
aaa 출력됨
docker inspect Env에 환경변수 주입되있다.

도커 환경변수 파일 주입
cat sample.env
MY_HOST=aaa
MY_VAR=123
docker run  -it -env-file ./sample.env ubuntu:focal env <—bash대신 바로 env 출력되게..

'프로그래밍 > Docker' 카테고리의 다른 글

docker-compose(docker compose)  (0) 2020.08.06
Dockerfile  (0) 2020.05.06
도커란 무엇인가?  (0) 2020.05.05
Comments