Dockerfile이란?

  • Container를 만들 수 있도록 하는 명령어들의 집합

ref: docs.docker.com/engine/reference/builder/

 

Dockerfile reference

 

docs.docker.com

 

 

 

Dockerfile 인스트럭션

인스트럭션 설명 형식
FROM 우분투와 같은 운영체제 이름이나 필요한 애플리케이션 이름을 지정 FROM ubuntu:14.04
MAINTANER 이미지를 생성한 사람의 이름 및 정보  
RUN 컨테이너가 빌드될 때 실행할 명령어 RUN ["mv", "1234", "5678"]
EXPOSE 컨테이너 외부에 노출할 포트 지정 EXPOSE 8080
ENV 환경변수 이름지정 ENV abc tmp
echo ${abc}
CMD 컨테이너가 시작될 때 실행할 명령어 CMD ["echo", "1234"]
CMD ["node", "/hello.js"]
ENTRYPOINT 컨테이너가 실행될 때 기본 명령어 지정
(CMD 와 달리 옵션을 넘길 수 있음)
ENTRYPOINT ["python"]
...
$
sudo docker run t 이미지 -c "print('1234')"
WORKDIR 작업할 디렉토리를 세팅 WORKDIR /project
USER 도커 실행 시 사용할 유저 이름 또는 uid 를 지정
설정하지 않으면 기본 root으로 실행
USER user 또는 USER user:group
VOLUME 호스트의 디렉토리를 도커에 연결
커밋 없이 사용 가능하며 주로 로그 수집이나 데이터 저장용도로 사용
VOLUME [/"tmp"]
COPY 컨테이너 빌드시 호스트의 파일이나 디렉토리를 복사할때 사용 COPY file /copy/to/path

ADD 컨터이너 빌드시 호스트의 파일(tar,url포함)을 컨테이너로 복사할때 사용 ADD http://example.com/big.tar.xz /usr/src/things/
ADD rootfs.tar.gz /
ARG    
SHELL 원하는 타입의 쉘을 사용 SHELL ["/ sh ", c"]
SHELL [" cmd ", "/S", "/]
# comment  

 

 

nginx image생성 및 dockerhub push test

  • # docker build -t fastwon1/docker-test .
    • Docker이미지 빌드
  • # docker push fastwon1/docker-test
    • image이름을 [계정/image이름] 형식으로 변경이 필요한경우
      • # docker tag docker-test fastwon1/docker-test
    • Private repository에 push
    • 이미지의 namespace와 자신의 아이디가 일치해야한다
      • # docker tag foo/sample_image:latest username/sample_image:latest
        • namespace가 일치하지 않는다며 태그명 변경으로 해결할 수 있다
    • 에러시 https://hub.docker.com의 id/pass로 docker login이 필요

 

 

Docker history 확인

  • # docker history nginx
    • Docker이미지를 생성하면서 발생한 명령어들을 확인할 수 있다

 

 

Dockerfile 작성 및 apache2 container 생성 테스트

FROM ubuntu:18.04  
LABEL maintainer="jaehwan.jaon <fastwon1@gamil.com>"
RUN apt-get update \
    && apt-get install -y apache2 \
    && apt-get install -y --no-install-recommends apt-utils
RUN echo "apache2 start test" > /var/www/html/index.html
EXPOSE 80
CMD ["/usr/sbin/apache2ctl","-DFOREGROUND"]

 

dockerfile을 이용하여 container 생성

# docker build -t fastwon1/apathc2-test:v1 .

생성한 Docker image로 container 생성
web 접속

 

 

기타

명령어 설명
sudo docker container prune 중지 된 모든 컨테이너를 제거
sudo docker image prune 태그가 없는 모든 이미지 파기
sudo docker system prune 사용하지 않는 모든 데이터 삭제 이미지 , 컨테이너 , 볼륨 , 네트워크등
sudo docker container stats 컨테이너 사용 현황 출력

'클라우드 > Docker' 카테고리의 다른 글

Docker resource 관리  (0) 2021.08.14
Docker registry  (0) 2021.08.11
Docker 명령어 테스트  (0) 2021.08.11
Docker?  (0) 2020.12.27
Docker 설치  (0) 2020.12.27

 

1. local repository에서 docker이미지 검색

  • # docker serach tomcat

 

2. Dockerhub에서 container image pull

 

Docker Hub

Build and Ship any Application Anywhere Docker Hub is the world's easiest way to create, manage, and deliver your teams' container applications.

hub.docker.com

 

3. Container create/start

  • mysql Container create
    • # docker create -p 9876:3306 --name mysql-test -e MYSQL_ROOT_PASSWORD=password mysql
      • 컨테이너 생성
      • -e option: 환경변수 설정
    • # docker start mysql-test
      • Dockerhost에서 mysql 접속
        • docker exec -it db mysql -u root -p

 

4. Container 실행

컨테이너 실행
실행결과(virtualbox에서 실행중이라면,, 네트워크 port-forwarding 설정필요)

  • # docker run -d -p 8080:8080 --name run-test consol/tomcat-7.0
    • run명령어는 컨테이너 create와 start를 동시에 실행
      • 만약 이미지가 pulling이 되어있지 않은 경우 pull을 실행하고 create/start를 진행한다
    • consol/tomcat-7.0 docker 이미지를 데몬으로 portforwarding 8080으로 실행
  • # docker run -d -p 8080:8080 --rm --name run-test2 consol/tomcat-7.0
    • rm옵션을 주면 Container가 중지되면 바로 삭제되는 임시컨테이너를 생성할 수 있다
  • # docker ps -a
    • 컨테이너 확인

 

5. Container 시작/중지/삭제

  • # docker stop a76e5848164a
    •  컨테이너 중지
  • # docker start a76e5848164a
    • 컨테이너 시작
  • # docker rm a76e5848164a
    • 컨테이너 삭제
      • 컨테이너 중지후 삭제가 가능

 

6. Container 전체 중지/시작/삭제

  • # docker stop `docker container ls -a -q`
    • 전체 중지
  • # docker start `docker container ls -a -q`
    • 전체 시작
  • # docker rm `docker container ls -a -q`
    • 전체 삭제

 

7. Docker 이미지 전체삭제

  • # docker rmi `docker images -a -q`

 

8. Container bash 접속

Container bash 접속

  • # docker exec -it [CONTAINER ID or NAMES]  /bin/bash

 

9. Container 로그확인

  • # docker logs run-test 
    • stdout

10. Container내 기타조회

  • Container내의 프로세스 조회
    • # docker top [CONTAINER ID or NANES]
  • Container내의 log 조회
    • docker logs [CONTAINER ID or NANES]
      • ex) docker logs -f nginx_test
        • 실시간 발생로그 확인

 

11. Docker host와 Container간 파일복사

  • Docker host 파일을 Container로 복사
    • docker cp [docker host의 파일 source file path] [container의 dest path]
      • # docker cp ./cpTest.txt 60dbe0c2f189:/home/ 
  • Container의 파일을 Docker host로 복사
    • docker cp [Container내의 파일 source path] [Dcoker dest path] 
      • # docker cp 60dbe0c2f189:/home/cpTest.txt ./

'클라우드 > Docker' 카테고리의 다른 글

Docker resource 관리  (0) 2021.08.14
Docker registry  (0) 2021.08.11
Docker image 생성 및 테스트  (0) 2021.08.11
Docker?  (0) 2020.12.27
Docker 설치  (0) 2020.12.27

+ Recent posts