שלום Docker


לקראת הוובינר היום בואו נסכם את עיקרי הדברים שמתוכננים וגם נשאיר משהו כתוב שיהיה קל להיזכר.

1. יצירה ושליטה על קונטיינרים

יצירת קונטיינר חדש מתוך image:

$ docker run <image>

# For example:

$ docker run hello-world

$ docker run -it --rm ubuntu

$ docker run -it --rm busybox

הצגת רשימת הקונטיינרים הפעילים:

$ docker ps

הצגת רשימת הקונטיינרים (כולל הסגורים):

$ docker ps -a

כיבוי קונטיינר מסוים לפי ID:

$ docker stop <container_id>

הדלקה מחדש של קונטיינר לפי ID:

$ docker start <container_id>

הפעלת קונטיינר של busybox והשארתו דולק ברקע:

docker run -d busybox top

הפעלת קונטיינר עם מיפוי נתיבים - לדוגמא נפעיל את הקונטיינר Ubuntu עם אפשרות לראות את תיקיית הבית מהמחשב המארח:

$ docker run -it --rm -v /Users/ynonperek:/home/ynon ubuntu

הפעלת קונטיינר עם מיפוי פורטים - לדוגמא נפעיל את רדיס עם מיפוי פורט למחשב המארח:

$ docker run -d -v $(realpath ./redis-data):/data -p 6379:6379 redis redis-server --appendonly yes

2. אימג'ים

בניית אימג' מקובץ Dockerfile:

$ docker build --tag=friendlyhello .

הצגת רשימת האימג'ים על המכונה:

$ docker image ls

מבנה קובץ Dockerfile לדוגמא:

# Use an official Python runtime as a parent image
FROM python:2.7-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python", "app.py"]

פקודות שאפשר לכתוב ב Dockerfile עם המשמעות שלהן (בקצרה):

  1. הפקודה ADD מעתיקה קבצים ותיקיות למקומות שתבחרו בתוך הקונטיינר

  2. הפקודה COPY גם מעתיקה קבצים ותיקיות, אבל יש לה פחות אפשרויות מאשר ל add ולכן מומלץ להשתמש בה כשלא צריך את היכולות המורכבות של ADD.

  3. הפקודה ENV מגדירה משתנה סביבה

  4. הפקודה EXPOSE מגדירה את הפורט שהקונטיינר מעוניין להקשיב עליו. הפורט הזה עדיין לא חשוף לעולם החיצון אלא רק לרשת הפנימית של דוקר. בשביל לחבר אותו למחשב המארח צריך להשתמש במיפוי פורטים.

  5. הפקודה FROM מגדירה אימג' בסיס ממנו נתחיל את הבניה של האימג' הנוכחי.

  6. הפקודה USER מאפשרת לכם להריץ פקודות על הקונטיינר ממשתמש אחר.

  7. הפקודה WORKDIR קובעת מהי תיקיית העבודה (כלומר התיקיה הנוכחית) על הקונטיינר.

  8. הפקודה CMD קובעת איזה תוכנית תרוץ כברירת מחדל בקונטיינר.

  9. הפקודה ENTRYPOINT מאפשרת להגדיר קונטיינר שירוץ בתור קובץ הפעלה, כך שכל הפרמטרים שעוברים ל docker run יעברו כפרמטרים לתוכנית שהוגדרה כ ENTRYPOINT.