*사용자 지정 (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:
- 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
컨테이너 실행해서 쉘 스크립트를 실행
- 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 다운로드 / 확인
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
-기존 도커파일에 아래 내용 추가 배너파일을 보내기.
-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