
$ docker images
$ docker pull busybox $ docker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.2
$ docker rmi
// name: container name // it: join to the container // rm: remove container after termination // d: run container in dettached process // P: show container’s all ports // p: set container port // p 8888:80 use port 8888 instead of 80 // net: bridge network name that container run on it $ docker run busybox $ docker run busybox echo "hello from busybox" $ docker run -it busybox sh $ docker run --rm prakhar1989/static-site $ docker run -d -P --name static-site prakhar1989/static-site $ docker run -p 8888:80 prakhar1989/static-sit $ docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.3.2 $ docker run -it --rm --net foodtrucks-net prakhar1989/foodtrucks-web bash $ docker container run -d --name myapp mytime-exporter:v1.0.0
// none: get only running containers // a: get all containers // q: return only containers ID // f: set condition $ docker ps $ docker ps -a $ docker ps -a -q -f status=exited $ docker ps -a | grep myapp $ docker container ls
$ docker container logs mycontainername //view last 200 line of myapp container log $ docker container logs –tail 200 -f myapp
$ docker container stop containername $ docker stop containername
$ docker rm 305297d7a235 ff0a5c3750b9 $ docker container rm containername $ docker container rm --force myapp //remove all containers $ docker container prune
$ docker port containername
$ docker network ls NETWORK ID NAME DRIVER SCOPE 5ae2ac433ebf bridge bridge local 65e87bdbf368 host host local ae51ba479b34 none null local
* شبکه bridge، شبکهای است که در آن کانتینرها به صورت پیشفرض اجرا میشوند.
$ docker network inspect netowrkname
$ docker network create foodtrucks-net
$ docker network rm foodtrucks-net
دستورات در یک اسکریپت Bash به صورت زیر گردآوری می شوند:
# ساخت کانتینر فلسک docker build -t prakhar1989/foodtrucks-web . # ایجاد شبکه docker network create foodtrucks-net # راه•اندازی کانتینر ES docker run -d --name es --net foodtrucks-net -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.3.2 # راه•اندازی کانتینر اپلیکیشن فلسک docker run -d --net foodtrucks-net -p 5000:5000 --name foodtrucks-web prakhar1989/foodtrucks-web
اکنون باید تصور کرد که قرار است اپلیکیشن مربوطه برای اشخاص دیگری توزیع یا این اپلیکیشن روی سروری اجرا شود که داکر در آن نصب شده است:
$ git clone https://github.com/prakhar1989/FoodTrucks $ cd FoodTrucks $ ./setup-docker.sh
و به این ترتیب کار به اتمام رسیده است. این یک روش بسیار عالی و قدرتمند برای به اشتراک گذاری و اجرای اپلیکیشنها به حساب میآید.
# شروع کار با ایمیج پایه FROM ubuntu:18.04 # نصب متعلقات سراسری در سیستم برای پایتون و گره RUN apt-get -yqq update RUN apt-get -yqq install python3-pip python3-dev curl gnupg RUN curl -sL https://deb.nodesource.com/setup_10.x | bash RUN apt-get install -yq nodejs # کپی کردن کدهای اپلیکیشن مربوطه ADD flask-app /opt/flask-app # تنظیم یک شاخه برای اپلیکیشن WORKDIR /opt/flask-app # دریافت متعلقات مختص اپلیکیشن RUN npm install RUN npm run build RUN pip3 install -r requirements.txt # در معرض استفاده قرار دادن پورت EXPOSE 5000 # راه•اندازی و استارت زدن اپلیکیشن CMD [ "python3", "./app.py" ]
پرچم «yqq» برای حذف خروجی استفاده میشود و همه اعلانها (Prompt) را «Yes» در نظر میگیرد.
$ docker build . -t yourusername/imagename $ docker image build . -t mytime-exporter:v1.0.0
$ docker push yourusername/imagename
docker image save mytime-exporter:v1.0.0 > mytime.tar
ctr -n k8s.io images import mytime.tar
Compose ابزاری است که برای تعریف و اجرای اپلیکیشنهای چند کانتینری به شکلی ساده مورد استفاده قرار میگیرد. این ابزار یک فایل پیکربندی به نام «docker-compose.yml» فراهم میکند که میتوان از آن تنها با یک دستور برای استقرار یک اپلیکیشن و مجموعه سرویسهایش استفاده کرد که به آنها وابسته است. Compose در تمام محیطها کار میکند. هر یک از این محیطها در ادامه فهرست شدهاند:
تولید (Production)
صحنه پردازی (Staging)
توسعه (Development)
آزمایش (Testing)
به همراه جریانهای کاری CI
اگرچه، باید گفته شود که Compose بیشتر برای محیطهای توسعه و تست ایدهآل است.
محتویات فایل Docker Compose به صورت زیر است:
version: "3" services: es: image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2 container_name: es environment: - discovery.type=single-node ports: - 9200:9200 volumes: - esdata1:/usr/share/elasticsearch/data web: image: prakhar1989/foodtrucks-web build: . # replaced image with build command: python3 app.py depends_on: - es ports: - 5000:5000 environment: - DEBUG=True # set an env var for flask volumes: - ./flask-app:/opt/flask-app volumes: esdata1: driver: local
*Volumeها دایرکتوریهای به اشتراک گذاشته شده بین کانتینرها هستند.
$ docker-compose –version
$ docker-compose up //run docker-compose container detached $ docker-compose up -d
$ docker-compose ps
$ docker-compose down -v
وقتی دستور up اجرا می شود؛ Compose خودش یک شبکه جدید به نام «composename_default» ایجاد و سرویس های جدید را در آن شبکه به گونهای ضمیمه می کند که هر یک از آنها برای دیگری قابل شناسایی باشند. هر کانتینر برای یک سرویس به شبکه پیشفرض میپیوندد و هر یک به وسیله سایر کانتینرها در آن شبکه قابل دسترسی و توسط آنها با نام میزبانی مطابق نام کانتینر قابل شناسایی هستند.