1. docker tag
- 하드링크와 비슷하다.
- 이미지이름 : hub ID/repo이름:tag
- official image는 hub ID가 생략되어있음.
- 이미지를 만들어서 업로드를 할때 도커 허브에 기본으로 올라가는데 반드시 허브 ID가 포함되어있어야한다.
- tag를 생략할 수 있다 → latest가 붙는다.
- 태그는 버전을 나타내지만 특징을 나타내기도 한다.
- ID값으로 이미지가 같은것인지 아닌지 판단할 수 있다.
2. docker push
- 이미지를 지정하면 도커허브에 업로드한다. → 도커 이미지 저장소에 로그인 해야한다(docker login)
- 도커 로그인 할 때 사용했던 아이디 값과 hub ID 부분이 일치해야한다.
3. commit
- 실행중인 컨테이너 기반으로 이미지를 만든다.
- 이미지는 다수의 layer로 이루어져있다.
4. export / import
- export
- 컨테이너의 시스템을 아카피브로 만든다.
- docker export -o test.tar test
- 컨테이너의 모든 파일이 test.tar에 들어있다.
- import
- 파일 지정 가능. url 지정 가능.
- docker import test.tar sueb/guro:import
- inspect로 살펴보면 대부분의 값들이 비어져있다 → 세세한 설정들을 설정 할 수 있다.
- run 할 때 명령어를 넣어주면 이 이미지로 컨테이너를 실행할 수 있다.
5. dockerfile
- centos 기반의 apache 띄우기.
docker run -it --name c1 centos:8 //컨테이너 실행
-> apache 서비스가 없다.
-> 왜? 필요 없으니까.
-> attach로 들어가서 yum으로 설치는 가능하다.
-> systemctl start, enable을 하면 enable은 되지만 start는 안된다.
-> 왜? systemd가 없어서. enable은 링크만 만들어주면 되니까.
-> systemd가 돌아가고 있어야지 systemctl로 서비스를 실행할 수 있다.
-> multi-user.target => 네트워크만 되는 정도...?
-> /usr/lib/systemd/system/httpd.service -> unit file이 들어있음.
-> /usr/sbin/httpd $OPTIONS -DFOREGROUND & //이렇게 서비스를 시작할 수 있다.
docker commit c1 suebb/guro:commit
docker run --name cw1 -itd suebb/guro:commit
docker inspect cw1 | grep IP
curl IP -> 동작안한다.
docker ps -> cw1의 COMMAND를 보면 /bin/bash
docker top cw1 -> httpd가 없다.
docker exec cw1 /usr/sbin/httpd $OPTION -DFOREGROUND
curl IP -> 동작한다.
docker inspect suebb/guro:commit
-> cmd를 보면 안바뀜.
-> 바꿀수 있는 방법도 존재하긴한다.
→ commit, export,import의 단점으로 인해 dockerfile을 써야하는 이유를 보여주기 위해 위의 것을 설명함.
< 지시어 >
- 지시어들 마다 옵션이 있다.
- 지시어는 찾아보면 더 있다.
- FROM
- 베이스가 되는 이미지가 필요하다.
- 하나만 사용할 수 있다.(FORM, CMD, ENTRYPOINT)
- ex) FROM centos:latest
- MAINTAINER
- 이미지를 만든이
- RUN
- CMD를 실행하기 위해서 필요한 구성요소
- 표현방법이 두가지 있다.(RUN, CMD, ENTRYPOINT)
- shell 방식 ( yum -y install httpd )
- ls나 yum을 사용할 때 절대경로로 사용하지 않아도 되는 이유 → PATH라는 환경변수 때문에
- 이름만 써도 실행되게 하려면 PATH에 등록되어있는 어떤 위치에 링크파일을 만들어준다.
- exec 방식 ( ['/usr/bin/yum', '-y', 'install', 'httpd'] )
- shell 방식이 쉽지만 exec 방식을 권장한다.
- /usr/bin/yum → 이런 경로 → systemctl status로 찾거나 find로 찾거나 googling 해보면 나옴.
- $, > 등의 메타문자 → shell의 기능이기 때문에 exec 방식으로 사용할때 사용하면 안된다.
- shell 방식 ( yum -y install httpd )
- CMD
- 데몬을 지정. 서비스를 지정
- 하나만 지정할 수 있다.
- exec 형식 권장.
- ex) CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] CMD httpd -DFOREGROUND
- ADD
- 해당 파일을 외부 네트워크를 통해서 받아올 수 있다.(인터넷) → COPY는 안됨.
- LABEL
- 이미지에 부가적인 별명을 붙임
- EXPOSE
- 노출할 포트
- ENV
- 환경변수
- VOLUME
- 여러개 사용할 수 있다.
- nfs 공유 스토리지처럼 사용할 수 있다.
FROM centos:latest
MAINTAINER suebb
RUN yum -y install httpd
RUN useradd devops
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
#ENTRYPOINT test.sh
#LABEL
EXPOSE ${PORT}
ENV PORT=80
#ADD
#COPY
VOLUME /var/www/html
VOLUME /etc/httpd/
USER devops
WORKDIR /var/www/html
< 간단한 실습 >
- hub.docker.com에 가입한다.
ID : suebb - centos:8
- httpd service
- port : 80
- vol : /var/www/html
- curl IP → Hello Dockerfile 출력
1. 작업용 디렉토리 만들기
mkdir ./dockerfile_test
2. Dockerfile 파일 만들기
FROM centos:latest
MAINTAINER suebb
RUN yum -y install httpd
CMD httpd -D FOREGROUND
EXPOSE 80
VOLUME /var/www/html
VOLUME /etc/httpd/
COPY index.html /var/www/html/
WORKDIR /var/www/html
3. index.html 파일 편집
vi index.html
Hello Dockerfile ^___^
4. build 명령어로 이미지 제작
docker build -t suebb/guro:centweb .
- Dockerfile이라는 대문자 D로 시작하는 파일이 없으면 옵션을 붙여줘야한다.
5. 만든 이미지로 컨테이너 생성
docker run -d —name test suebb/guro:centweb
6. IP 확인 후 curl
docker inspect test | grep IP
curl IP
- Hello Dockerfile ^___^ 출력.
'Containers > Docker' 카테고리의 다른 글
간단한 Docker 실습 (0) | 2020.07.20 |
---|---|
이미지 다운로드 / 관리 / 삭제 (0) | 2020.07.14 |
Install Docker (Ubuntu) (0) | 2020.07.13 |
Docker란? (0) | 2020.07.13 |
댓글