| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
17,782 バイト追加 、 2022年7月22日 (金) 08:09
==| [[Dockerコマンド]]==| [[Docker ネットワーク]] | [[WSL]] | [[Kubernetes]] | [[MicroK8s]] | [[機械学習]] | [[Ubuntu]] |
| [[仮想化]] | [[Kubernetes]] |
==インストール==
===[[CentOS]]===
----
*[http://typea.info/blg/glob/2014/07/docker-docker-ry.html CentOS7にインストール]
===[[Windows]]===
----
*https://docs.docker.jp/docker-for-windows/install.html
===[[Mac]]===
----
====[https://docs.docker.jp/docker-for-mac/install.html Docker Desktopインストール]====
 
===[[Ubuntu]]===
----
*https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-ja
#パッケージのリストを更新
#TTPS経由でパッケージを使用できるように
#公式DockerリポジトリのGPGキーをシステムに追加
#DockerリポジトリをAPTソースに追
#追加されたリポジトリからDockerパッケージでパッケージデータベースを更新
#Dockerリポジトリからインストールしようとしていることを確認
#Dockerをインストール
#実行されていることを確認
<pre>
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
apt-cache policy docker-ce
sudo apt install docker-ce
sudo systemctl status docker
</pre>
*sudoしなくても良いように、docker グループに所属させる
<pre>
$ sudo usermod -aG docker ${USER}
$ su ${USER}
</pre>
====一般的にUbuntuサーバーに入っているツールを一括インストール====
<pre>
root@107d2fc09ce9:# unminimize
</pre>
 
==利用==
===検索、ダウンロード、確認、実行===
----
*検索
**Docker Hubをクロールし、名前が検索文字列と一致するすべてのイメージのリストを返す
**OFFICIAL列のOKは、プロジェクトの背後にある会社によって構築およびサポートされているイメージを示す
<pre>
$ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 12271 [OK]
dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 533 [OK]
websphere-liberty WebSphere Liberty multi-architecture images … 272 [OK]
r
:
</pre>
*ダウンロード
<pre>
$ docker pull ubuntu
</pre>
*確認
<pre>
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 7e0aa2d69a15 4 weeks ago 72.7MB
</pre>
*実行
**-it インタラクティブシェル
**「6779ec318a4a」の部分がコンテナID
<pre>
$ docker run -it ubuntu
root@6779ec318a4a:/#
</pre>
===コンテナ管理===
----
====コンテナ確認====
*アクティブなコンテナを表示
<pre>
$ docker ps
</pre>
*非アクティブなコンテナも含める
<pre>
$ docker ps -a
</pre>
*作成した最新のコンテナを表示
<pre>
$ docker ps -l
</pre>
====コンテナ開始・接続・停止====
*停止したコンテナを開始
<pre>
$ docker start ${コンテナID}
</pre>
*コンテナに接続
<pre>
docker exec -it ${コンテナID} /bin/bash
</pre>
*コンテナを停止
<pre>
$ docker start ${コンテナID or コンテナ名}
</pre>
 
====コンテナ削除====
<pre>
$ docker rm ${コンテナID or コンテナ名}
</pre>
====コンテナ内の変更をDocker イメージへ適用====
*起動と停止はできますが、 docker rm コマンドで破棄すると、変更は永久に失われる
*新しいDockerイメージインスタンスへの変更をコミット
*イメージをコミットすると、新しいイメージはコンピュータのローカルに保存
<pre>
docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name
</pre>
====ログを確認====
* -f でウォッチ
<pre>
$ docker logs ${コンテナID}
</pre>
 
====DockerイメージをDockerリポジトリにプッシュ====
*Docker Hubにログイン
<pre>
$ docker login -u docker-registry-username
</pre>
*独自イメージをプッシュ(ubuntu-nodejs イメージを sammy リポジトリにプッシュ)
<pre>
$ docker push docker-registry-username/docker-image-name
</pre>
====Dockerfile====
*Dockerfileに環境構築手順を設定可能
*Dockerfileは任意のイメージを起点とする
*build コマンドは、カレントディレクトリの "Dockerfile" を実行し環境を構築する
<pre>
$ docker build .
</pre>
*タグ名など付与するので、以下のようになる
<pre>
$ docker build -t myjenkins-blueocean:1.1 .
</pre>
==設計==
===イミュータブルなインフラストラクチャイメージにする===
*コンテナイメージはバージョン管理できるため、コンテナ実行後ではなく、コンテナイメージに実行バイナリやリソースを可能な限り埋め込むようにする
===軽量なDockerイメージにする軽量なDockerイメージにする===
*ノード上に使用するイメージがない場合、外部からダウンロードする必要がある
*キャッシュなどの削除、Alpine Linuxなど軽量なディストリビューションの利用
**後続のレイヤーで削除したファイルはイメージ内には実際には存在したままになる、そのファイルは単にアクセスできなくなるだけ
**各レイヤは、前のレイヤからの差分のため、前のレイヤを作り直すと、イメージをデプロイするために、そのレイヤをビルドし直し、もう一度プッシュしてからプルする必要がある
 
===セキュリティ===
*コンテナにパスワードを入れない
==Dockerfile==
*FROMでベースイメージを指定して、RUNやCOPYなどのコマンドでイメージを作成する*[https://docs.docker.jp/engine/reference/builder.html リファレンス]
*リポジトリ
**https://registry.hub.docker.com/
*Dockerfile
===[https://docs.docker.jp/engine/reference/builder.html#from FROM]===
----
*FROM 命令は、イメージビルドのための処理ステージを初期化し、ベース・イメージ を設定します。後続の命令がこれに続きます。
*1 つの Dockerfile 内に FROM を複数記述することが可能です。
*出現順にマルチレイヤーとして処理される。 これは複数のイメージを生成するため、あるいは 1 つのビルドステージを使って依存イメージをビルドするために行います。
<pre>
FROM ubuntu:latest
</pre>
===[https://docs.docker.jp/engine/reference/builder.html#run RUN]===----*RUN 命令は、現在のイメージの最上位の最新レイヤーにおいて、あらゆるコマンドを実行します。 そして処理結果を確定します。===[https://docs.docker.jp/engine/reference/builder.html#workdir WORKDIR]===----*WORKDIR 命令はワークディレクトリを設定します。 Dockerfile 内にてその後に続く命令において利用することができます。===[https://docs.docker.jp/engine/reference/builder.html#copy COPY]===----*COPY 命令は <src> からファイルやディレクトリを新たにコピーして、コンテナ内のファイルシステムのパス <dest> に追加 ===実行===----*docker build を実行すると、順次コマンドライン命令を自動化した処理が行われて、ビルド結果となるイメージが得られます。
<pre>
$ sudo docker build .
==ネットワーク==
*[[Docker ネットワーク]]
*[[TCP/IP]]
*[[Jenkins]] 参照
 
===HOSTネットワークの使用===
*https://docs.docker.jp/network/host.html
*コンテナに対して host ネットワーク・モードを使うと、コンテナのネットワーク・スタックは Docker ホストから隔離されません
 
===ボリューム===
*https://matsuand.github.io/docs.docker.jp.onthefly/storage/volumes/
*ボリュームとは、Docker コンテナーにおいて生成され利用されるデータを、永続的に保持する目的で利用される仕組み
* バインドマウント はホストマシン OS のディレクトリ構造に依存しますが、ボリュームは完全に Docker によって管理される
*ボリュームがまだ存在していない状態で、そのボリュームを使ったコンテナーを起動すると、Docker はその際にボリュームを生成
<pre>
$ docker volume ls
$ docker volume inspect ${ボリューム名}
$ docker volume rm ${ボリューム名}
</pre>
 
===docker0ブリッジ===
----
*[https://docs.docker.jp/engine/userguide/networking/default_network/custom-docker0.html docker0ブリッジ]
*[https://docs.docker.jp/network/default_network/container-communication.html#communicating-to-the-outside-world 外界との通信]
*https://qiita.com/msi/items/d9cc1a2fd3f0fed3a901
*インターフェースの確認
<pre>
$ nmcli con show
NAME UUID TYPE DEVICE
有線接続 1 2951eca6-87d7-3bfd-b31c-c6d6b0914e1e ethernet enp1s0f1
ctc-g-d17c80 21fe84f8-fefd-4f25-a922-e098b6d49e3d wifi wlp2s0
docker0 fbbd5a7e-7a83-4bfb-9f26-5a5d1ecfa370 bridge docker0
</pre>
*
<pre>
$ sudo brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.02421613dc30 no vethe38ad90
</pre>
*
<pre>
$ ip addr show docker0
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:6e:6b:32:17 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
</pre>
*$ sudo vi /etc/sysctl.conf
<pre>
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
</pre>
*[https://www.softel.co.jp/labs/tools/network/ CIDR計算]
 
*dockerブリッジの確認
<pre>
$ docker network inspect bridge
[
{
"Name": "bridge",
"Id": "090fc50f5cea256b57797287b7bff9b3ad9bcfc7ad0c0d7f0df9a68fd0bb3233",
"Created": "2021-05-23T10:25:41.276772008+09:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
</pre>
*設定ファイル(デフォルトでは存在しないので作成)
*/etc/docker/daemon.json
<pre>
$ sudo vi /etc/docker/daemon.json
{
"bip": "192.168.0.1/29"
}
</pre>
*リスタート
<pre>
$ sudo systemctl restart docker
</pre>
*確認
<pre>
$ ip addr show dev docker0
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:6e:6b:32:17 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.3/29 brd 192.168.0.7 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:6eff:fe6b:3217/64 scope link
valid_lft forever preferred_lft forever
</pre>
*ブリッジと接続
<pre>
piroto@darjeeling:/etc/docker$ sudo nmcli con show
[sudo] piroto のパスワード:
NAME UUID TYPE DEVICE
有線接続 1 2951eca6-87d7-3bfd-b31c-c6d6b0914e1e ethernet enp1s0f1
ctc-g-d17c80 21fe84f8-fefd-4f25-a922-e098b6d49e3d wifi wlp2s0
docker0 04b34379-fa40-4081-912f-5fd6253d7438 bridge docker0
ctc-a-d17c80 46a14c17-83f7-4d08-bf9d-c9e1aeba3b81 wifi --
piroto@darjeeling:/etc/docker$ sudo nmcli con add type bridge-slave ifname enp1s0f1 master docker0
接続 'bridge-slave-enp1s0f1' (bf223bdf-e5d0-4947-97ac-2c5c4f9bdad9) が正常に追加されました。
piroto@darjeeling:/etc/docker$ sudo nmcli con show
NAME UUID TYPE DEVICE
有線接続 1 2951eca6-87d7-3bfd-b31c-c6d6b0914e1e ethernet enp1s0f1
ctc-g-d17c80 21fe84f8-fefd-4f25-a922-e098b6d49e3d wifi wlp2s0
docker0 04b34379-fa40-4081-912f-5fd6253d7438 bridge docker0
bridge-slave-enp1s0f1 bf223bdf-e5d0-4947-97ac-2c5c4f9bdad9 ethernet --
ctc-a-d17c80 46a14c17-83f7-4d08-bf9d-c9e1aeba3b81 wifi --
piroto@darjeeling:/etc/docker$ sudo nmcli con up bridge-slave-enp1s0f1
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/4)
</pre>
 
===docker0ブリッジ2===
----
*https://qiita.com/zen3/items/757f96cbe522a9ad397d
 
[[File:docker_except_ip_router.png|500px]]
# 固定IP
# docker bip のゲートウェイに上記固定IPを指定
# bridge0の構成?
#
<pre>
$ ls /etc/netplan
99-netcfg.yaml bak
</pre>
<pre>
$ sudo vi /etc/netplan/99-netcfg.yaml
network:
version: 2
renderer: NetworkManager
ethernets:
enp1s0f1:
dhcp4: no
addresses: [192.168.0.23/24]
gateway4: 192.168.0.1
nameservers:
addresses: [192.168.0.1, 8.8.8.8, 8.8.4.4]
</pre>
 
<pre>
piroto@darjeeling:~$ nmcli con show
NAME UUID TYPE DEVICE
netplan-enp1s0f1 fb8733d5-5b9d-3c3c-ad52-c077a300b661 ethernet enp1s0f1
ctc-g-d17c80 21fe84f8-fefd-4f25-a922-e098b6d49e3d wifi wlp2s0
bridge-slave-enp1s0f1 9942b6c7-2cc4-4cb7-88d2-8e79bad972ac ethernet --
ctc-a-d17c80 46a14c17-83f7-4d08-bf9d-c9e1aeba3b81 wifi --
</pre>
[[File:docker_netmanater.png|500px]]
<pre>
{
"bip": "192.168.0.23/24"
}
</pre>
 
<pre>
$ sudo systemctl restart docker
</pre>
 
<pre>
$ ip addr show dev docker0
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:c5:9e:3c:a1 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.23/24 brd 192.168.0.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:c5ff:fe9e:3ca1/64 scope link
valid_lft forever preferred_lft forever
</pre>
 
 
<pre>
$ docker run -i -t --rm ubuntu /bin/bash
root@42dcb495617c:/# apt update
root@42dcb495617c:/# apt install iproute2
</pre>
 
*http://docs.docker.jp/compose/compose-file.html#ipv4-ipv6
<pre>
$ docker run -it --ip 192.168.0.22 ubuntu /bin/bash
root@a32360383ebf:/# apt update
oot@a32360383ebf:/# apt install iproute2
 
</pre>
===docker0ブリッジ3===
# 静的IP 23
*https://pj-doaa.hatenablog.com/entry/2019/09/04/144520
 
<pre>
$ docker network create --driver bridge --subnet=192.168.0.0/24 --gateway=192.168.0.23 --opt "com.docker.network.bridge.name"="br0" shared_nw
fcdef22003bdc75011a53a8a0e71ec8a992f17b15ce671b8064753548541f53e
 
$ ip addr show br0
6: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:d5:99:f5:a0 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.23/24 brd 192.168.0.255 scope global br0
valid_lft forever preferred_lft forever
 
$ sudo brctl addif br0 enp1s0f1
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.0242d599f5a0 no enp1s0f1
docker0 8000.0242d7eacdca no
 
docker run -i -t --net shared_nw --ip 192.168.0.22 ubuntu /bin/bash
</pre>
 
 
*不要?
<pre>
$ sudo ip route add default via 192.168.0.23
 
$ ip route
default via 192.168.0.23 dev enp1s0f1
default via 192.168.0.1 dev wlp2s0 proto dhcp metric 600
default via 192.168.0.1 dev enp1s0f1 proto static metric 20100
169.254.0.0/16 dev enp1s0f1 scope link metric 1000
192.168.0.0/24 dev br0 proto kernel scope link src 192.168.0.23
192.168.0.0/24 dev enp1s0f1 proto kernel scope link src 192.168.0.23 metric 100
192.168.0.0/24 dev wlp2s0 proto kernel scope link src 192.168.0.47 metric 600
</pre>
 
 
<pre>
$ docker run -i -t --net shared_nw --ip 192.168.0.21 tensorflow/tensorflow:latest-jupyter
[I 13:56:25.626 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
jupyter_http_over_ws extension initialized. Listening on /http_over_websocket
[I 13:56:26.377 NotebookApp] Serving notebooks from local directory: /tf
[I 13:56:26.377 NotebookApp] Jupyter Notebook 6.3.0 is running at:
[I 13:56:26.378 NotebookApp] http://92ce0f7112eb:8888/?token=deadf022c3f634f84f7efa67b7b37decbfd28a9519e14c75
[I 13:56:26.378 NotebookApp] or http://127.0.0.1:8888/?token=deadf022c3f634f84f7efa67b7b37decbfd28a9519e14c75
[I 13:56:26.378 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 13:56:26.389 NotebookApp]
To access the notebook, open this file in a browser:
file:///root/.local/share/jupyter/runtime/nbserver-1-open.html
Or copy and paste one of these URLs:
http://92ce0f7112eb:8888/?token=deadf022c3f634f84f7efa67b7b37decbfd28a9519e14c75
or http://127.0.0.1:8888/?token=deadf022c3f634f84f7efa67b7b37decbfd28a9519e14c75
</pre>
 
==Tips==
===snapインストール時の起動===
----
<pre>
$ sudo systemctl restart snap.docker.dockerd
</pre>
 
===[[WSL|WSL2でKubernetes/Dockerを動かす]]===
----
*[[WSL|WSL2でKubernetes/Dockerを動かす]]
===nginxを動かす===
----
*https://hub.docker.com/_/nginx
<pre>
$ docker pull nginx
$ docker run --name test-ginx -d -p 8080:80 nginx
</pre>
*[[Ubuntu]]
[[File:Docker nginx ubuntu.png|600px]]
*[[WSL]]2
[[File:Docker nginx wsl2.png|600px]]
===docker: Error response from daemon: cgroups: cannot find cgroup mount destination: unknown.===
----
*https://web.plus-idea.net/2019/07/docke-cgroups-mount-destination/
*https://github.com/boot2docker/boot2docker/issues/1301
$ sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
</pre>
 
===[[MySQL]]を動かす===
----
*https://hub.docker.com/_/mysql
*サーバー立ち上げ
<pre>
$ docker pull mysql
$ docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=my-password -d mysql:latest
</pre>
*接続
**psでコンテナIDを確認
**exec -it で接続
<pre>
$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

cccc85ac63e0 mysql:latest "docker-entrypoint.s..." 10 hours ago Up 8 minutes 3306/tcp, 33060/tcp test-
mysql
$ docker exec -it ccc bash
root@cccc85ac63e0:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.21 MySQL Community Server - GPL
 
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql>
</pre>
[[File:Docker mysql ubuntu.png|600px]]
 
===[[ASP.Net Core]]===
----
[[ASP.NET Core]]を動かす

案内メニュー