📌 이 포스팅은 도커 컨테이너를 처음 접하는 분들을 대상으로 작성하였습니다.
도커 컨테이너가 무엇인지 간단하게 나마 이해하고 싶으신 분들은, 도커 컨테이너 살펴보기 포스팅을 참고 바랍니다.

Step 1. run & port forwarding

docker image pull gihyodocker/echo:latest
docker container run -t -p 9000:8080 gihyodocker/echo:latest
curl http://localhost:9000
docker stop $(docker container ls -q)

Step 2. image

FROM 인스트럭션: 도커 이미지의 바탕이 될 베이스 이미지를 지정한다.
RUN 인스트럭션: 도커 이미지를 실행할 때 컨테이너 안에서 실행할 명령을 정의
COPY 인스트럭션: 도커가 동작중인 호스트머신의 파일이나 디렉터리를 도커 컨테이너 안으로 복사하는 인스트럭션
CMD 인스트럭션: 도커 컨테이너를 실행할 때 컨테이너 안에서 실행할 프로세스를 지정한다. RUN은 이미지를 빌드할 떄 실행되고 CMD는 컨테이너를 시작할 떄 한번 실행된다.

실습

Dockerfile과 index.html 생성 후 생성한 위치에서 docker 명령어를 실행해봅니다.

# Dockerfile
FROM nginx

COPY index.html /usr/share/nginx/html
# index.html
<html>
<head>
    <title>인프라공방</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
    <h1> 도커 컨테이너 실행해보기 </h1>
</body>
</html>
docker image build -t example/echo:latest .
docker container run -d -p 9000:80 example/echo:latest
docker stop $(docker container ls --filter "ancestor=example/echo" -q)

도커 이미지 관련 명령어

- docker image build
- docker search 
- docker image pull
- docker image ls
- docker image tag
- docker image push

docker login -u [도커허브 ID] -p
docker image tag example/echo [도커허브 ID]/echo:latest
docker image push [도커허브 ID]/echo:latest

Step 3. Docker Container

docker container run 
docker container run -it alpine:3.7 uname -a
docker container run -t -d --name brainbackdoor example/echo:latest

    -i : 컨테이너쪽 표준입력과의 연결을 그대로 유지
    -t : 유사터미널 기능을 활성화
    --rm : 컨테이너를 종료할 때 컨테이너를 파기하도록 하는 옵션
    -v : 호스트와 컨테이너간 디렉터리 혹은 파일을 공유하기 위한 옵션

docker container ls
# docker ps 와 동일함
# 원하는 이름과 컨테이너명이 일치하는지 여부 --filter "name=echo1"
# 생성한 이미지를 기준으로 --filter "ancestor=example/echo"

docker container stop
# Docker All Container Stop
# docker stop $(docker ps -a -q)

docker container restart

docker container rm
# Docker All Container Remove
# docker rm $(docker ps -a -q)

# Docker All Images Remove
# docker rmi $(docker images -q)

docker container logs -f $(docker container ls --filter "name=brainbackdoor" -q)
docker logs <container id>

docker container exec
# docker exec -it <container id> /bin/bash
# 컨테이너 내부의 상태를 확인하거나 디버깅하는 용도로 사용
# 다만, 컨테이너 안에 든 파일을 수정하는 것은 애플리케이션에 의도하지 않은 부작용을 초래할 수 있으므로 운영환경에서는 절대 해서는 안된다.

docker container cp
# COPY: 이미지를 빌드할 때 호스트에서 복사해온 파일을 정의하기 위한 것
# docker container cp: 실행 중인 컨테이너와 파일을 주고받기 위한 명령

docker container prune
# docker image prune
# docker system prune