===[[Mac]]===
----
*====[https://docs.docker.jp/docker-for-mac/install.htmlDocker Desktopインストール]====
===[[Ubuntu]]===
----
$ sudo usermod -aG docker ${USER}
$ su ${USER}
</pre>
====一般的にUbuntuサーバーに入っているツールを一括インストール====
<pre>
root@107d2fc09ce9:# unminimize
</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 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://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
===[[WSL|WSL2でKubernetes/Dockerを動かす]]===
----
*[[WSL|WSL2でKubernetes/Dockerを動かす]]
===nginxを動かす===
----
*https://hub.docker.com/_/nginx
<pre>
===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
===[[MySQL]]を動かす===
----
*https://hub.docker.com/_/mysql
*サーバー立ち上げ
</pre>
[[File:Docker mysql ubuntu.png|600px]]
===[[ASP.Net Core]]===
----
[[ASP.NET Core]]を動かす