שלום 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 עם המשמעות שלהן (בקצרה):
-
הפקודה
ADDמעתיקה קבצים ותיקיות למקומות שתבחרו בתוך הקונטיינר -
הפקודה
COPYגם מעתיקה קבצים ותיקיות, אבל יש לה פחות אפשרויות מאשר ל add ולכן מומלץ להשתמש בה כשלא צריך את היכולות המורכבות של ADD. -
הפקודה
ENVמגדירה משתנה סביבה -
הפקודה
EXPOSEמגדירה את הפורט שהקונטיינר מעוניין להקשיב עליו. הפורט הזה עדיין לא חשוף לעולם החיצון אלא רק לרשת הפנימית של דוקר. בשביל לחבר אותו למחשב המארח צריך להשתמש במיפוי פורטים. -
הפקודה
FROMמגדירה אימג' בסיס ממנו נתחיל את הבניה של האימג' הנוכחי. -
הפקודה
USERמאפשרת לכם להריץ פקודות על הקונטיינר ממשתמש אחר. -
הפקודה
WORKDIRקובעת מהי תיקיית העבודה (כלומר התיקיה הנוכחית) על הקונטיינר. -
הפקודה
CMDקובעת איזה תוכנית תרוץ כברירת מחדל בקונטיינר. -
הפקודה
ENTRYPOINTמאפשרת להגדיר קונטיינר שירוץ בתור קובץ הפעלה, כך שכל הפרמטרים שעוברים ל docker run יעברו כפרמטרים לתוכנית שהוגדרה כ ENTRYPOINT.