การเปลี่ยนผู้ใช้และไดเรกทอรีทำงาน

Docker เบื้องต้น

Tim Sangster

Software Engineer @ DataCamp

การทำงานร่วมกันของคำสั่งใน Dockerfile

FROM, RUN และ COPY ทำงานร่วมกันผ่านระบบไฟล์

COPY /projects/pipeline_v3/start.sh /app/start.sh
RUN /app/start.sh

บางคำสั่งส่งผลต่อคำสั่งที่ตามมาโดยตรง:

  • WORKDIR: เปลี่ยนไดเรกทอรีทำงานสำหรับคำสั่งที่ตามมาทั้งหมด
  • USER: เปลี่ยนผู้ใช้สำหรับคำสั่งที่ตามมาทั้งหมด
Docker เบื้องต้น

WORKDIR - การเปลี่ยนไดเรกทอรีทำงาน

การเริ่มต้นพาธทั้งหมดจาก root ของระบบไฟล์:

COPY /projects/pipeline_v3/ /app/

จะรกรุงรังเมื่อพาธยาว:

COPY /projects/pipeline_v3/ /home/my_user_with_a_long_name/work/projects/app/

ใช้ WORKDIR แทนได้:

WORKDIR /home/my_user_with_a_long_name/work/projects/
COPY /projects/pipeline_v3/ app/
Docker เบื้องต้น

RUN ในไดเรกทอรีทำงานปัจจุบัน

แทนที่จะใช้พาธเต็มทุกครั้ง:

RUN /home/repl/projects/pipeline/init.sh
RUN /home/repl/projects/pipeline/start.sh

กำหนด WORKDIR แทน:

WORKDIR /home/repl/projects/pipeline/
RUN ./init.sh
RUN ./start.sh
Docker เบื้องต้น

การเปลี่ยนพฤติกรรมเริ่มต้นด้วย WORKDIR

แทนที่จะใช้พาธเต็ม:

CMD /home/repl/projects/pipeline/start.sh

กำหนด WORKDIR:

WORKDIR /home/repl/projects/pipeline/
CMD start.sh

คำสั่งที่ override ก็จะรันใน WORKDIR เช่นกัน:

docker run -it pipeline_image start.sh
Docker เบื้องต้น

สิทธิ์ใน Linux

  • สิทธิ์การเข้าถึงถูกกำหนดให้กับผู้ใช้
  • Root คือผู้ใช้พิเศษที่มีสิทธิ์ทั้งหมด

$$

แนวทางที่ดีที่สุด

  • ใช้ root เพื่อสร้างผู้ใช้ใหม่ที่มีสิทธิ์เฉพาะงาน
  • หยุดใช้ root หลังจากนั้น
Docker เบื้องต้น

การเปลี่ยนผู้ใช้ใน image

แนวทางที่ดีที่สุด: อย่ารันทุกอย่างในฐานะ root

Ubuntu -> root โดยค่าเริ่มต้น

FROM ubuntu         --> Root user by default
RUN apt-get update  --> Run as root

คำสั่ง USER ใน Dockerfile:

FROM ubuntu         --> Root user by default
USER repl           --> Changes the user to repl
RUN apt-get update  --> Run as repl
Docker เบื้องต้น

การเปลี่ยนผู้ใช้ใน container

Dockerfile ที่กำหนดผู้ใช้เป็น repl:

FROM ubuntu         --> Root user by default
USER repl           --> Changes the user to repl
RUN apt-get update  --> Run as repl 

จะเริ่มต้น container ด้วยผู้ใช้ repl ด้วย:

docker run -it ubuntu bash
repl@container: whoami
repl
Docker เบื้องต้น

สรุป

การใช้งาน คำสั่งใน Dockerfile
เปลี่ยนไดเรกทอรีทำงานปัจจุบัน WORKDIR <path>
เปลี่ยนผู้ใช้ปัจจุบัน USER <user-name>
Docker เบื้องต้น

มาฝึกกันเถอะ!

Docker เบื้องต้น

Preparing Video For Download...