UDACIME: SUSE Облако родные основы (10 частей серии)
Это шестая статья в серии, Удобность: SUSE Облако родные основы Отказ Эта статья будет содержать упражнения и лаборатории из предыдущего раздела о Docker.
Этот раздел будет содержать две лаборатории:
- Лаборатория 1 — Ваше первое контейнерное приложение Python
- Лаборатория 2 — Упаковка приложения GO
Лаборатория 1 — Ваше первое контейнерное приложение
В этом упражнении мы будем использовать то же самое приложение
что мы расширили и играли в разделе Соображения архитектуры — Лаборатория Отказ
Если вы пропустили этот раздел, никаких забот! Вы можете просто клонировать репозиторий:
$ git clone https://github.com/udacity/nd064_course_1.git
Перейти к Упражнения/Python-Helloworld
папка. Здесь вы должны увидеть приложение
$ cd nd064_course_1/ $ ls -l total 25 drwxr-xr-x 1 Eden Jose 197610 0 Jun 18 19:41 exercises/ drwxr-xr-x 1 Eden Jose 197610 0 Jun 18 19:41 project/ -rw-r--r-- 1 Eden Jose 197610 12 Jun 18 19:41 README.md drwxr-xr-x 1 Eden Jose 197610 0 Jun 18 19:41 solutions/ $ cd exercises/python-helloworld/ $ ls -l total 6 -rw-r--r-- 1 Eden Jose 197610 167 Jun 18 19:41 app.py -rw-r--r-- 1 Eden Jose 197610 32 Jun 18 19:41 requirements.txt
Обратите внимание, что в соображениях архитектуры — LAB, мы расширили код, поэтому код, который находится в этой папке, является оригинальным. Вы можете просто изменить это:
from flask import Flask from flask import json app = Flask(__name__) @app.route('/status') def status(): response = app.response_class( response=json.dumps({"result":"OK - healthy"}), status=200, mimetype='application/json' ) return response @app.route('/metrics') def metrics(): response = app.response_class( response=json.dumps({"status":"success","code":0,"data":{"UserCount":140,"UserCountActive":23}}), status=200, mimetype='application/json' ) return response @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run(host='0.0.0.0')
Все еще в той же папке, вы также должны увидеть требования. atx
Отказ Это важно, потому что мы укажем это как зависимость в DockerFile.
$ cat requirements.txt Flask==1.1.1 werkzeug==0.16.1
Сейчас мы сначала начнем писать наш Dockerfile с инструкциями.
FROM python:3.9 LABEL maintainer="Eden Jose" COPY . /app WORKDIR /app RUN pip install -r requirements.txt CMD [ "python", "app.py"] # Since we're deploying a python application, we'll be using a python base image # The LABEL is used to add description or metadata # COPY copies any files in the current folder in the host to the container # WORKDIR sets the working directory # RUN runs the install command. Installs all specified in requirements.txt # CMD allows specifying a command. # Command specified is to run the python application
Убедитесь, что Docker установлен на вашем компьютере. Вы можете перейти по этой ссылке на Установить Docker Отказ Следующий шаг — построить изображение. Создание изображения займет время, поскольку он должен установить Python.
# -t tags the image with the name specified. docker build -t udacity-python-helloworld .
После выполнения запустите эту команду, чтобы проверить, было ли создано ваше изображение.
docker images REPOSITORY TAG IMAGE ID CREATED SIZE udacity-suse-python-helloworld latest 8ac51fb8decf About a minute ago 894MB
Чтобы проверить локально, мы можем запустить контейнер на основе изображения
docker run -d -p 5000:5000 udacity-suse-python-helloworld # -d means container will be ran in the background, in detached mode # -p exposes the app to port, maps host's port to contaier's port
Чтобы увидеть беговой контейнер
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dd8a7c1cce37 udacity-suse-python-helloworld "python app.py" 6 seconds ago Exited (1) 4 seconds ago competent_gates
Чтобы проверить это, открыть 127.0.0.1:5000
в вашем браузере.
Здорово! После того, как вы протестировали, что он работает, пришло время поделиться им в мире. Вы можете загрузить изображение на свой Dockerhub учетная запись. На вашем терминале войдите в свой аккаунт
docker login
Тейте свой образ докера. Указанное вами имя будет использоваться в качестве тега, когда он нажимается в ваш репозиторий. Вы должны создать репозиторий в вашем аккаунте Dockerhub.
docker tag udacity-suse-python-helloworld edenjose/udacity-suse-helloworld:v1.0.0 # edenjose is the repository, followed by the # name the image will be saved with.
Чтобы нажать на изображение на свой счет DockerHub, запустите команду ниже. Укажите репозиторий и версию.
docker push edenjose/udacity-suse-helloworld:v1.0.0
Перейдите в свой браузер и войдите в свой аккаунт DockerHub. Теперь вы должны увидеть изображение, которое вы нажали туда.
Потрясающий! Теперь каждый может потянуть и использовать изображение из вашего репозитория! 😺
Лаборатория 2 — Упаковка приложения GO
Используя тот же клонированный репозиторий, мы теперь упаковываем приложение Go. Перейти к Упражнения/Go-Helloworld
папка. Здесь вы должны увидеть Main.go.
ls -la total 8 drwxr-xr-x. 2 root root 38 Jun 21 14:49 . drwxr-xr-x. 5 root root 105 Jun 21 14:49 .. -rw-r--r--. 1 root root 236 Jun 21 14:49 main.go -rw-r--r--. 1 root root 283 Jun 21 14:49 README.md
Проверка кода, вы увидите, что приложение должно вернуть сообщение «Hello World» и будет использовать порт 6111
package main import ( "fmt" "net/http" ) func helloWorld(w http.ResponseWriter, r *http.Request){ fmt.Fprintf(w, "Hello World") } func main() { http.HandleFunc("/", helloWorld) http.ListenAndServe(":6111", nil)
Давайте теперь построим нашу DockerFile.
FROM golang:alpine WORKDIR /go/src/app ADD . . RUN go mod init RUN go build -o helloworld EXPOSE 6111 CMD ["./helloworld"]
Теперь перед созданием изображения. Убедитесь, что Go установлен в вашей машине Отказ После того, как вы установите, вы можете попробовать запустить приложение, выдавая:
go run main.go
После того, как приложение проверено, теперь вы можете построить изображение Docker. Вы можете указать любой тег, который вам нравится.
docker build -t udacity-suse-helloworld-go .
Проверьте, создан ли создание вашего документа
go-helloworld]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE udacity-suse-helloworld-go latest 4fa5b74ed770 About a minute ago 428MB edenjose/udacity-suse-helloworld v1.0.0 8ac51fb8decf About an hour ago 894MB
Запустите контейнер на основе изображения, чтобы сначала проверить локально. Затем откройте 127.0.0.1:61111
в вашем браузере.
docker run -d -p 6111:6111 udacity-suse-helloworld-go
Пометите изображение, прежде чем нажать на репозиторий DockerHub.
docker tag udacity-suse-helloworld-go edenjose/udacity-suse-helloworld-go:v1.0.
Проверьте список изображений Docker снова. Обратите внимание, что когда вы пометиете изображение Docker более одного раза, изображение также появится более одного раза, когда вы запускаете команду ниже. Однако они не дублируется, как вы можете видеть, что оба изображения будут иметь тот же идентификатор изображения.
docker images REPOSITORY TAG IMAGE ID CREATED SIZE edenjose/udacity-suse-helloworld-go v1.0. 4fa5b74ed770 15 minutes ago 428MB udacity-suse-helloworld-go latest 4fa5b74ed770 15 minutes ago 428MB edenjose/udacity-suse-helloworld v1.0.0 8ac51fb8decf About an hour ago 894MB udacity-suse-python-helloworld latest 8ac51fb8decf About an hour ago 894MB
Нажмите на изображение на ваш репозиторий Dockerhub.
docker push edenjose/udacity-suse-helloworld-go:v1.0.
Проверка вашей учетной записи DockerHub:
Прекрасная работа! Мы сейчас контейнерные два приложения и успешно отталкивали их на наш хранилище Dockerhub. Далее мы узнаем, как управлять контейнерами с использованием Kubernetes.
Если вам наслаждаться этой записью и хотели бы узнать больше, убедитесь, что нажмите Следуйте за чуть ниже и заблокирован сериал. Я также буду рад связаться с вами на Twitter Отказ Увидимся там! 😃
Эдем Джозефолл
UDACIME: SUSE Облако родные основы (10 частей серии)
Оригинал: «https://dev.to/jeden/udacity-suse-containers-orchestration-docker-labs-52he»