目次
Docker
Docker Desktop v4.15 + compose.yml
since 2022-12-25
とにかく触ってみる。Dockerfile を書かないで何がやれるか?
以下 docker-compose.yml を作っているが compose.yml でもいいらしい。
$ cd $ mkdir hello-docker-compose $ cd hello-docker-compose > notepad docker-compose.yml $ touch docker-compose.yml $ open /System/Applications/TextEdit.app -e docker-compose.yml # もちろん code docker-compose.yml でもよい # アプリを起動して GUI でファイルの作成・編集をしてもよい $ which docker /usr/bin/docker $ cat docker-compose.yml
services: python: image: python tty: true
Docker Desktop
- v4.15.0
- General
- Choose container terminal: System default
- Use Docker Compose V2
- 左下のマークが緑色で Engine running であること
ターミナルで irb も python3 も実行できる例
$ docker compose up
実行すると python-1 の右の show container actions から Open in terminal できる。
services: python: image: python tty: true ruby: image: rubylang/ruby tty: true
ターミナルで cd /app するとホストのファイルを参照して実行できる:
services: python: image: python tty: true volumes: - ./app:/app ruby: image: rubylang/ruby tty: true volumes: - ./app:/app
$ mkdir app $ cat app/hello.txt hello python and ruby $ cat app/hello.py print(open("hello.txt").read()) $ cat app/hello.rb puts File.read("hello.txt")
さらに続けて python の http.server を使ってみる。
command で何かを動かし続ける場合は tty が不要になる。
services: python: image: python volumes: - ./app:/app working_dir: /app command: python3 -m http.server ports: - 8000:8000
ホストの Web ブラウザで
http://localhost:8000/hello.txt
ruby は現在は http.server に相当するものがないので、書いてみる
services: ruby: image: rubylang/ruby volumes: - ./app:/app working_dir: /app command: ruby server.rb ports: - 8001:8001
$ cat app/server.rb
require "socket" server = TCPServer.new 8001 loop do client = server.accept path = "." + client.gets.split(" ")[1] while header = client.gets break if header.chomp.empty? end if File.file? path client.puts "HTTP/1.0 200 OK" client.puts "Content-Type: text/plain" client.puts client.puts File.read path else client.puts "HTTP/1.0 404 Not Found" end client.close end
ホストの Web ブラウザで
http://localhost:8001/hello.txt
これらを同時に動かすことができる
services: python: image: python volumes: - ./app:/app working_dir: /app command: python3 -m http.server ports: - 8000:8000 ruby: image: rubylang/ruby volumes: - ./app:/app working_dir: /app command: ruby server.rb ports: - 8001:8001
Charty
since 2022-12-25
題材として使うかも
https://github.com/red-data-tools/charty
WSL2
$ cd work/gh/ $ git clone https://github.com/red-data-tools/charty.git $ cd charty/
PHP + Apache
since 2022-01-02
services: apache: image: "php:apache" tty: true ports: - "8080:80" volumes: - "./html:/var/www/html"
https://zenn.dev/ikuraikura/articles/d166724f2c123d1db312
ここでは MySQL なしで、単に html/index.php を動かす。
<h1><?php echo "Hello" . " world" ?></h1>
ブラウザで localhost : 8080 を開く。
Hello world
が表示される。
MySQL
Docker Desktop + Windows 11 + WSL2
since 2022-10-21
https://docs.docker.jp/desktop/windows/wsl.html
Docker Desktop is free for small businesses (fewer than 250 employees AND less than $10 million in annual revenue), personal use, education, and non-commercial open source projects.
>wsl -l -v NAME STATE VERSION * Ubuntu Running 2 docker-desktop-data Running 2 docker-desktop Running 2 Ubuntu-18.04 Stopped 2
Docker on WSL2
since 2020-08-22
WSL2 を Windows 10 version 1909 で有効化した。
Docker Desktop
Docker Desktop 2.3.0.4 をインストールしようとしたが、
Docker Desktop requires Windows 10 Pro/Enterprise (15063+) or Windows 10 Home (19018+).
とのことだった。残念。
apt
Ubuntu-18.04 だと思って素直に入れようとしてみる
前半は省略するが、できた。
$ sudo apt-get install docker-ce docker-ce-cli containerd.io $ docker --version Docker version 19.03.12, build 48a66213fe $ sudo service docker start * Starting Docker: docker
certbot を動かす例
$ sudo docker run -it --rm --entrypoint /bin/sh certbot/certbot Unable to find image 'certbot/certbot:latest' locally latest: Pulling from certbot/certbot Status: Downloaded newer image for certbot/certbot:latest /opt/certbot # certbot --help - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ... 中略 More detailed help: -h, --help [TOPIC] print this message, or detailed help on a topic; the available TOPICS are: all, automation, commands, paths, security, testing, or any of the subcommands or plugins (certonly, renew, install, register, nginx, apache, standalone, webroot, etc.) -h all print a detailed help page including all topics --version print the version number - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /opt/certbot # certbot --version certbot 1.7.0 /opt/certbot # exit $
$ sudo docker run -it --rm certbot/certbot --version certbot 1.7.0
docker compose
1.xx 系をインストールする手順
一般ユーザで動かす
since 2021-09-29
VS Code
"Error: connect EACCES /var/run/docker.sock" が出る場合
- 一般ユーザで動くように設定
Docker on WSL1
since 2018-07-10
以下、あまり実用的でなかった環境
setup
- Windows 10 version 1803 (x64) Home
- WSL Ubuntu 16.04
https://www.reddit.com/r/bashonubuntuonwindows/comments/8cvr27/docker_is_running_natively_on_wsl/
http://www.nuits.jp/entry/docker-on-wsl
書かれているとおりで環境構築、動作を確認
.bashrc の最後に cgroupfs-mount を追加
sudo systemctl enable docker を実行してサービスを自動起動
試せたこと
$ sudo docker run --rm hello-world $ sudo docker run -it ubuntu bash $ sudo docker run -it --rm -p 8080:80 nginx:latest
Python イメージという話
https://qiita.com/RyoMa_0923/items/7c0b22dd3f284472e18d
$ sudo docker pull python:3.6 $ sudo docker run -d --name hoge python:3.6 /bin/bash -c 'tail -f /dev/null' $ sudo docker exec -it hoge /bin/bash rpc error: code = 13 desc = invalid header field value "oci runtime error: exec failed: container_linux.go:247: starting container process caused \"could not create session key: function not implemented\"\n"
動いているようだが?
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f207175bc4bb python:3.6 "/bin/bash -c 'tai..." 2 minutes ago Up About a minute hoge
もっと単純なことからやり直すか
$ sudo docker run -d --name hoge2 ubuntu /bin/bash -c 'tail -f /dev/null' $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 64a1e42b1617 ubuntu "/bin/bash -c 'tai..." 13 seconds ago Up 5 seconds hoge2 f207175bc4bb python:3.6 "/bin/bash -c 'tai..." 5 minutes ago Up 5 minutes hoge $ sudo docker exec -it hoge2 /bin/bash rpc error: code = 13 desc = invalid header field value "oci runtime error: exec failed: container_linux.go:247: starting container process caused \"could not create session key: function not implemented\"\n"
そもそも docker run -d した環境に接続できない?
docker kill はできる
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 64a1e42b1617 ubuntu "/bin/bash -c 'tai..." 13 minutes ago Up 13 minutes hoge2 f207175bc4bb python:3.6 "/bin/bash -c 'tai..." 19 minutes ago Up 19 minutes hoge $ sudo docker kill hoge hoge $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 64a1e42b1617 ubuntu "/bin/bash -c 'tai..." 13 minutes ago Up 13 minutes hoge2 $ sudo docker kill hoge2 hoge2 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Windows 再起動後
2018-07-11
再起動したらもういちど下記が必要らしい
(1) Ubuntu (16.04) を管理者で実行
sudo service docker start
(2) いったん閉じて、もう一度 Ubuntu (16.04) を管理者で実行
sudo cgroupfs-mount && sudo service docker start
確認
sudo docker run –rm hello-world