Docker- 6

박형준·2024년 4월 30일

*사용자 지정 (USER) :

  • 도커파일에서 RUN, CMD 등에 설정된 명령어 실행하기 위한 사용자를 지정하는것.
  • 표시 방법
    • USER [사용자명] ⇒ # RUN [“useradd”, “user01”] ⇒ useradd user01
    • USER [사용자명]:[그룹명]
    • USER [UID] : [GID]
      ⇒ RUN [“whoami”]

*사용자 생성 후 지정

  • #mkdir user && cd user
  • #vi Dockerfile

[root@www user]# docker build --no-cache -t user-test . ⇒ –no-cache는 캐시 메모리 사용안함
[root@www user]# docker history user-test ⇒ history 명령으로 확인 가능.

사용자 지정

  • mkdir user && cd user
  • vi Dockerfile
    • 사용자 추가 하고(RUN ["useradd","testuser01"]),
      이후의 명령을 실행할 때 사용할 사용자 변경 (USER testuser01)
    • docker build --no-cache -t user-test . (--no-cache: 캐쉬 메모리 사용 안함)
    • build 실행 결과와 history로 확인

*파일 및 디렉터리 추가 ( ADD / COPY )

  • ADD와 COPY :
    • 두가지 모두 동일하게 호스트 OS의 파일 또는 디렉터리를 컨테이너 안으로 복사하는것이 가능
  • COPY:
    • 호스트 OS에서 컨테이너 안으로 복사만 가능
  • ADD:
    • 원격 파일 다운로드 및 압축 해제등의 기능도 사용가능
  • 따라서 단순 복사는 COPY, 원격 파일 다운 및 압축 해제등의 보다 다양한 기능 활용시에는 ADD
  • 사용 방법:
    • ADD <호스트 파일경로> <도커이미지의 파일 경로> ,
      ex) ADD /test/index.html /docker/test/
      ex) ADD test.tar.gz /var/www/html
    • ADD [“<호스트 파일경로>”,” <도커이미지의 파일 경로>”]
    • COPY <호스트 파일경로> <도커이미지의 파일 경로>
    • COPY [“<호스트 파일경로>”,” <도커이미지의 파일 경로>”]

add와 copy

  • mkdir acopy && cd acopy
  • tar cvfz website.tar.gz index.html
  • vi Dockerfile
    • COPY와 ADD를 통해 컨테이너 안의 폴더로 파일 복사
    • docker build -t addcopy-test .
    • docker history addcopy-test:latest 를 통해 확인

*포트 지정 (EXPOSE)

  • 도커파일에 입력만 해주면됨 포트가 허용됨..
  • 설정 방법:
    • EXPOSE 80
      EXPOSE 80/tcp (tcp 명시)
      EXPOSE 21 20 ( ftp, 포트 번호 두개를 명시할 때는 연속해서 작성 )
      EXPOSE 53/udp (dns, udp 명시)
    • ( tcp, udp 표기를 반드시 해야 하며, 생략시에는 모두 tcp로 적용됨 )

*이미지 라벨(LABEL) 정보 :

이미지 버전, 정보, 작성자등에 대한설명 작성

작성 방법

  • LABEL title=”webpag”
    LABEL version=”2.0”
    LABEL author=”centos”

확인 방법

  • [root@www onbuild]# docker inspect -f "{{ .Config.Labels }}" [이미지이름]

docker system prune -a (필요없는 볼륨이나 네트워크까지 지우는 명령어)

*이미지 빌드 - 쉘 스크립트를 이용해서 빌드 시키기

  • 기존거 모두 삭제 shellsc 디렉터리 생성 및 이동 후
  • vi Dockerfile

*빌드 hello

  • [root@www shellsc]# docker build -t hello .

*컨테이너 가동 myhello

  • [root@www shellsc]# docker run --name myhello hello
    • (⇒ -d 옵션 생략하면 화면에 출력됨.)
    • Hello, world !!!!!
  • [root@www shellsc]# docker rm myhello
    • myhello

컨테이너 실행해서 쉘 스크립트를 실행

  • mkdir shellsc && cd shellsc
  • vi hello.sh
  • 내용 입력해서 쉘 스크립트 작성
  • cat을 통해 Dockerfile 작성
    • docker build -t hello .
    • 컨테이너 실행 ( -d 옵션 생략, 쉘 스크립트 내용 확인 )
    • docker ps -a 하면 상태가 멈춰있다

-#hello.sh 수정

  • [root@www shellsc]# docker build -t hello .
    • [root@www shellsc]# docker ps -a
    • ⇒ 컨테이너가 동작중인것 확인 ( 반복문 사용으로 ~ )
    • [root@www shellsc]# docker stop myhello
    • [root@www shellsc]# docker rm myhello

쉘 스크립트 수정 해서 컨테이너 실행

  • 반복문을 이용해서 쉘 스크립트 수정
    • docker build -t hello .
    • 반복문이라서 상태가 계속 up되어 있다( docker ps -a )

@ 두대를 이용해서 [main-r 이미지 생성, 컨테이너 동작] / [docker-1 클라이언트 역할]

-21번 포트 사용여부 확인

  • #systemctl disable --now vsftpd
    #netstat -antup | grep :21

-centos7 다운로드 / 확인

  • #docker pull centos:7

main-r: 이미지 생성/컨테이너 동작, docker1: 클라이언트 역할

  • ftp 없는 것 확인 후에
    • docker pull centos:7 ( 이미지 다운로드 )
    • mkdir ftp && cd ftp

-컨테이너 실행 하고 ftp접근 ..

  • [root@www docker]# docker run -it --name ftpserver centos:7 /bin/bash

-update 하고 vsftpd 설치

  • [root@container]# yum -y update ⇒ 시간 많이 걸림
    [root@container]# yum -y install vsftpd
    [root@container]# yum clean all ⇒설치에 사용된 파일 정리

-vsftpd 서버 환경설정 파일(vsftpd.conf) 편집 파일 맨 아래에 내용 추가

  • /etc/vsftpd/vsftpd.conf
    • ⇒cat 으로 파일 확인 후 컨테이너에서 빠져 나오기.

-vsftpd.conf 파일을 견본파일로 복사

  • [root@www docker]# docker cp ftpserver:/etc/vsftpd/vsftpd.conf vsftpd.conf.centos7.template
    • Successfully copied 7.17kB to /root/docker/vsftpd.conf.centos7.template

컨테이너 실행 하고 ftp 접근

  • docker run -it --name ftpserver centos:7 /bin/bash ( 컨테이너 실행 후 접속 )
  • yum -y update, yum -y install vsftpd 실행 후에
  • yum clean all
    • vi /etc/vsftpd/vsftpd.conf ( 수정 후 )
    • vsftpd.conf 파일을 견본파일로 복사

-WelcomeToMyFTPServer.txt 생성 후 작성
#vi WelcomeToMyFTPServer.txt

  • HELLO

-기존 도커파일에 아래 내용 추가 배너파일을 보내기.

-ftpimage 이름으로 빌드 시키고 이미지 확인 하고 기존 컨테이너 있으면 모두 삭제

  • [root@www docker]# docker build --no-cache -t ftpimage .
    [root@www docker]# docker rm -f $(docker ps -aq)
    [root@www docker]# docker network create ftpnet
  • [root@www docker]# docker run -d --name myftp -p 21:21 -v ftpvol:/var/ftp/pub --net ftpnet ftpimage

파일 작성 후

  • vi WelcomeToMyFTPServer.txt
  • 도커 파일 작성 (VOLUME /var/ftp/pub: 내부와 외부 간에 데이터를 공유,
    ENTRYPOINT /usr/sbin/vsftpd: 컨테이너가 시작될 때 실행할 기본 명령을 설정)
    • docker build --no-cache -t ftpimage .
    • docker network create ftpnet (네트워크 생성)
    • 컨테이너를 실행하면서 볼륨 생성과 네트워크 설정
      docker run -d --name myftp -p 21:21 -v ftpvol:/var/ftp/pub --network ftpnet ftpimage
    • 이미지와 상태, 포트 번호 확인

*생성한 컨테이너에 접속해서 ftp 클라이언트 설치

  • #dnf - y install ftp ⇒ 클라이언트 패키지 설치 후 main-r 로 접속 해보기
    • 이름은 ftp , password : ftp 또는 anonymous

컨테이너에서 ftp 설치 (client)

  • dnf -y install ftp (dnf 접속 후)
  • ftp 접속 (ftp -A 10.0.2.15, 이름: ftp, 비밀번호: anonymous or ftp)

삭제 : myftp, ftpimage, ftpnet, ftpvol

0개의 댓글