4.4K Views
December 29, 22
スライド概要
2022-12-28
すごい広島 .rb with Python
https://pycon-hiroshima.connpass.com/event/268416/
Shuaruta Inc. ウェブアクセシビリティ基盤委員会 (WAIC) NVDA日本語版 すごい広島 IT初心者の会
Ruby & Python 初心者のための Docker Compose 入門 2022-12-28 西本 卓也 @nishimotz / @24motz Shuaruta Inc. 1
まず Docker Compose • 最近の Udemy 教材 • プログラミング初心者はついてこれるのか? • もっとやさしく説明できないか? 2
Docker Compose • Docker = インフラとアプリを分離するプラットフォーム • 仮想化 • macOS / Windows で Linux 用のソフトウェアを使える • コンテナ • 環境を捨てたり作り直したりしやすい • 環境を保存、共有、再利用、再構築 • Docker Compose = 複数のコンテナを定義し実行するツール • Web の開発環境として普及 • モダンな開発や運用の出発点 • AWS 対応 : Docker Compose for Amazon ECS • Docker で最初に教えるべき機能 3
セキュリティの実習環境 4
開発環境も運用環境も自由になる • https://medium.com/skeb-jp/report-36b5608aa867 5
前提 • Docker Desktop 最新版(v4.15 で確認) • 大企業の商用利用は有償 • 代替手段は初心者に勧めにくい • 大企業で仕事マシンに野良インストール? • なるべくキーボードで操作しない(ハンズオン勉強会向き) • 確認した環境 • • • • Windows 11 Pro + Hyper-V Windows 11 Home + WSL2 macOS 13.1 Apple Silicon macOS 12.6.2 Intel 6
必要なもの • よいマシン • ストレージの容量と性能 • 管理者権限 • Windows Home の場合は WSL2 有効化 • 安定したネット環境 • メモ帳でできることをやる • Git 不要 • Visual Studio Code 不要 7
Docker Desktop のインストール • docs.docker.jp • www.docker.com/products/docker-desktop/ 8
ターミナル (PowerShell/zsh) から > cd > mkdir hello-docker-compose > cd hello-docker-compose > notepad docker-compose.yml # /Users/(ユーザ名)/(プロジェクト名) を作っている # プロジェクト名が hello-docker-compose になる # WSL2バックエンドの場合も PowerShell でよい # ユーザ名に空白やマルチバイト文字はダメかも(未確認) 9
docker-compose.yml (1) services: python: image: python tty: true # 行頭の半角空白の数を 0, 2, 4 と増やしている 10
11
docker compose up ちなみに docker-compose (ハイフンあり) = 古いバージョン 12
python-1 で Open in terminal 13
python3 14
Container terminal : integrated 15
Actions の STOP ボタンで止める 16
ターミナルで Ctrl-C でも止まる 17
docker-compose.yml (2) services: python: image: python tty: true ruby: image: rubylang/ruby tty: true 18
python-1 と ruby-1 が Running 19
irb 20
ファイルを使いたい • プログラムをファイルとして保存して実行する • ファイルを読み込むプログラムを作る • ホストとゲストがファイルを共有する • Docker Desktop マシン(ホスト) • Linux 仮想マシン(ゲスト) • テキストの編集はホスト環境で行いたい • エクスプローラー + メモ帳 • Finder + テキストエディット 21
docker-compose.yml (3) services: python: image: python tty: true volumes: volumes: - .:/app - .:/app ruby: image: rubylang/ruby tty: true volumes: - .:/app 22
同じフォルダにファイルを作成 hello.txt hello python and ruby hello.py print(open("hello.txt").read()) hello.rb puts File.read("hello.txt") 23
ゲストで /app に移動してコードを実行 # cd /app # python3 hello.py # cd /app # ruby hello.rb 24
ネットワークを使いたい • ゲストでWebサーバーを作って動かす • ホストでWebブラウザを動かす • ホストとゲストが通信できるようにする • Python • localhost:8000/hello.txt • Ruby • localhost:8001/hello.txt 25
docker-compose.yml (4) services: python: image: python volumes: - .:/app working_dir: /app command: python3 -m http.server ports: - 8000:8000 26
docker-compose.yml (5) services: ruby: image: rubylang/ruby volumes: - .:/app working_dir: /app command: ruby server.rb ports: - 8001:8001 27
server.rb require "socket" if File.file? path server = TCPServer.new 8001 client.puts "HTTP/1.0 200 OK" loop do client.puts "Content-Type: text/plain" client = server.accept client.puts path = "." + client.gets.split(" ")[1] client.puts File.read path while header = client.gets else break if header.chomp.empty? client.puts "HTTP/1.0 404 Not Found" end end client.close end RubyでシンプルなHTTPサーバを作る https://qiita.com/akiray03/items/3607c60ec8b221b3c2ba 28
プロジェクトのコンテナを削除 • Images もゴミ箱ボタンで削除 • 自分で mkdir したフォルダの中身だけ残る 29
Quit Docker Desktop • タスクトレイ(メニューバー) 30
まとめ • Docker Desktop と docker-compose.yml を活用 • https://github.com/docker/awesome-compose • Visual Studio Code を使うと • 複数のファイルを同時に開く • docker compose の操作 • devcontainer が話題 • いろいろな仮想化 • Dockerコンテナ • ハードウェアの仮想化 • Ruby/Python の環境 31
https://www.ruby-lang.org/ja/ 32
https://www.python.jp/ 33