שלום 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.