Docker Command

Hoju·2022년 8월 24일
0

DC

목록 보기
2/3

먼저 ec2-user 권한으로 Docker를 사용하기 위해서는 아래 명령어를 입력합니다.

step(1) 먼저 docker Group이 있는지 확인합니다.
cat /etc/group | grep docker -> 있다면 step(2) 바로 실행 없다면 아래 명령 실행
sudo groupadd docker

step(2) usermod 명령을 통해서 docker Group에 ec2-user 적용
sudo usermod -aG docker ec2-user

step(3) 현재 세션의 사용자 그룹을 변경
newgrp docker

step(4) ec2-user 사용자로 명령 실행
docker build -t test:latest .

Docker 명령 자동완성

curl -s -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/
contrib/completion/bash/docker -o /etc/bash_completion.d/docker

기본 Docker 명령어 꼭 알아야 되는 것

docker help # docker에 대한 여러 명령어 확인
docker search [image name]  # docker image 검색
docker images #image 목록 확인
docker ps #실행중인 Container 확인, -a 옵션 붙으면 정지, 종료, 실행 Container 확인 -p 옵션 붙으면 ID만 출력
docker ps --format 'table{{.Names}}' #현재 실행중인 컨테이너 목록에서 Names만 가져온다
docker inspect [containerName] | grep Id #고유 전체 Id 가져옴
docker port [ContainerName] #호스트와 비인딩된 포트 확인
docker stats #현재 모든 docker 상태 확인
docker exec -it [containerID 또는 Name] bash
docker network ls #Docker 네트워크 목록 나열 -> default 값은 bridge이다.

Docker Image 당기고 밀고!

#Docker Image는 DockerHub에 위치한 레지스트리라는 개념으로 Image를 사용한다.
docker pull [ImageName]:[Tag] #Docker Image가져오기 example) docker pull nginx:latest
docker push [ImageName]:[Tag] #레지스트리에 Docker images 올리기 example) docker push nginx:latest

Dockerfile 사용해서 Image 만들기

cat << EOF > Dockerfile
FROM httpd:2.4
MAINTAINER a[ ]@gmail.com
COPY index.html /var/www/html
EXPOSE 80
EOF

docker build -t [ImageName하고 싶은 거]:[Tag] . #Dockerfile에 대해서 빌드해서 이미지 생성/ .이 의미하는 것은 Dockerfile을 의미한다.
docker images #생성 확인
docker run -d -it -p 80:80 [ImageName하고 싶은 거]:[Tag] #Docker Container 시작

만약 Dockerfile을 한 디렉토리에서 2개이상 사용해야한다면?

docker build -f Dockerfile2 -t worldskills ./ #이런식으로 -f 옵션을 사용합니다.

Container Log 보기

docker container logs -t [Container ID] #세부적으로 log 확인
docker logs [Container ID] #컨테이너에 대한 로그 확인
docker logs [Container ID] -t #timestamp 표시
docker logs [Container ID] -tail [수] # 마지막 줄을 기준으로 수 만큼 로그 출력
docker logs [Container ID] -f #플래그릴 사용하면 tail -f와 같은 개념
docker logs [Container ID] | grep [원하는 특정 로그 내용]
docker logs [Container ID] | grep -i error #error만 출력

Docker run Option

docker run [옵션] [이미지 이름]:[tag]
run option
-i: 표준 입력(stdin)을 활성화하며 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지
-t: TTY 모드(pseudo-TTY)를 사용합니다. Bash를 사용하려면 이 옵션을 설정해야 함
-d: Detached 모드로 컨테이너를 실행한다. 컨테이너를 백그라운드에서 실행하도록 설정
-p: 컨테이너의 포트를 호스트포트와 바인딩해 연결할 수 있게 설정
-e: 컨테이너에 환경 변수를 설정합니다. 보통 설정 값이나 비밀번호를 전달할 때 사용
-e option example -> -e MYSQL_ROOT_PASSWORD=examplepassword

docker 컨테이너는 기본적으로 외부와 접근할 수 없게 구성되어 있음(바로 밑에 명령어 설명)
즉, 설치된 host에서만 접근 가능하다. 외부에서 접근 가능하게 하려면 -p 옵션을 사용하여 컨테이너 
포트를 호스트 포트와 바인딩해 연결해야한다.
- 바인딩이란 - 프로그램의 어떤 기본 단위가 가질 수 있는 구성요소의 구체적인 값, 성격을 확정하는 
것, 예를 들어 함수를 호출하는 부분에서 실제 함수가 위치한 메모리를 연결하는 것도 바인딩이다

docker run -d -p 80:8080/tcp imageName:tag #여기서 80:8080 왼쪽은 HostPort를 말하고 오른쪽은 ContainerPort를 정의한다.
즉, 설명을 좀 더 하자면, 8080 Container를 80 포트로 접근한다는 의미입니다.

docker run -i -t centos:7 echo hello world! #컨테이너가 실행 될 때마다 "hello world!" 출력

docker run -v /home/worldskills_db:/var/lib/mysql #option은 [호스트의 공유 디렉터리]:[컨테이너의 공유 디렉터리]
                                                   #즉, 호스트 디렉터리와 컨테이너의 디렉터리를 공유한다는 뜻이다
                                                   ##디렉터리가 동기화가 아닌 완전히 같은 디렉터리입니다

docker run --rm -it nginx:latest #--rm 옵션을 사용하면 컨테이너가 종료될 때 컨테이너와 관련된 리소스(파일 시스템, 볼륨)까지 제거해줍니다.

docker 같은 경우는 컨테이너와 local 디렉터리를 동기화 할 수 있다. run 옵션에 -v 를 붙이고 local디렉터리:container 디렉터리 해주면 된다!

Docker Volume 사용하기

docker volume create --name myvolume #Docker volume 생성

docker volume ls #볼륨 리스트 확인

docker run -i -t --name myvolume_1 -v myvolume:/root/ ubuntu:14.04 #volume을 사용한 컨테이너 생성

docker inspect --type volume myvolume #inspect를 통한 volume이 어디에 저장되어있는지 확인

[
    {
        "CreatedAt": "2022-05-03T11:42:10Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/myvolume/_data",
        "Name": "myvolume",
        "Options": {},
        "Scope": "local"
    }
]

출력 형태: /var/lib/docker/volumes/myvolume/_data/ 아래 Docker volume이 있다.

docker container inspect [docker container name]
.........
"Mounts": [
            {
                "Type": "volume",
                "Name": "6ce6475ee93b458a9fd0bdce91f7914b7d074b397cc128680a3a869001f3e28c",
                "Source": "/var/lib/docker/volumes/6ce6475ee93b458a9fd0bdce91f7914b7d074b397cc128680a3a869001f3e28c/_data",
.........
출력 형태: 현재 Source 항목에 정의된 디렉터리인 /var/lib/docker/.....이 컨테이너에 마운트돼 볼륨으로 쓰이고 있다는 것이다.

Docker Container Shell 접근

#exec는 Container에 서브 역할을 해주는 명령입니다.
docker exec [container ID] [command] #특정한 컨테이너가 실행되는 환경에서 또 다른 프로세스를 실행할 수 있도록 해주는 명령어
docker exec -it [ContainerName] /bin/bash #Container Local로 접속
docker attach [ContainerID]

Docker 리소스 삭제

docker rmi [image ID] # docker image 삭제

docker rmi -f $(docker images) # all docker images delete

docker rm -f $(docker ps -a -q) #all docker ps 종류 후 삭제

docker container prune #all docker container delete 대신 종료되어있는 Container만 제거 가능

docker rm -f [container_ID] #running docker 삭제

docker rm [container_ID] # docker 컨테이너 삭제

docker volume prune #볼륨 모두 삭제

docker system prune #컨테이너, 이미지, 네트워크 모두 삭제, 실행중인 컨테이너에는 영향을 주지 않는다.

docker rm $(docker ps --filter status=exited -q) #특정 상태 삭제
```
profile
Devops가 되고 싶은 청소년

0개의 댓글