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

MyMemoWiki

Docker

提供: MyMemoWiki
2021年5月22日 (土) 18:48時点におけるPiroto (トーク | 投稿記録)による版 (→‎設計)
ナビゲーションに移動 検索に移動

Docker

インストール

CentOS


Windows


Mac


Ubuntu


  1. パッケージのリストを更新
  2. TTPS経由でパッケージを使用できるように
  3. 公式DockerリポジトリのGPGキーをシステムに追加
  4. DockerリポジトリをAPTソースに追
  5. 追加されたリポジトリからDockerパッケージでパッケージデータベースを更新
  6. Dockerリポジトリからインストールしようとしていることを確認
  7. Dockerをインストール
  8. 実行されていることを確認
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
  • sudoしなくても良いように、docker グループに所属させる
$ sudo usermod -aG docker ${USER}
$ su ${USER}

利用

検索


  • Docker Hubをクロールし、名前が検索文字列と一致するすべてのイメージのリストを返す
  • OFFICIAL列のOKは、プロジェクトの背後にある会社によって構築およびサポートされているイメージを示す
piroto@darjeeling:~$ 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
   :

設計

1コンテナにつき1プロセス

  • 最も大事な観点。複数プロセスは非推奨

イミュータブルなインフラストラクチャイメージにする

  • コンテナイメージはバージョン管理できるため、コンテナ実行後ではなく、コンテナイメージに実行バイナリやリソースを可能な限り埋め込むようにする

軽量なDockerイメージにする

  • ノード上に使用するイメージがない場合、外部からダウンロードする必要がある
  • キャッシュなどの削除、Alpine Linuxなど軽量なディストリビューションの利用
  • 陥りがちな罠
    • 後続のレイヤーで削除したファイルはイメージ内には実際には存在したままになる、そのファイルは単にアクセスできなくなるだけ
    • 各レイヤは、前のレイヤからの差分のため、前のレイヤを作り直すと、イメージをデプロイするために、そのレイヤをビルドし直し、もう一度プッシュしてからプルする必要がある

セキュリティ

  • コンテナにパスワードを入れない
  • 機密情報をイメージに混ぜない

実行ユーザーをroot以外にする

  • コンテナない実行ユーザーの権限を最小化

コンテナ

  • コンテナは2つのカテゴリに分類
    • システムコンテナ
    • アプリケーションコンテナ

システムコンテナ

  • 仮想マシンとよく似た動きをし完全なブートプロセスを実行
  • 通常の仮想マシンに含まれるのと同様な、ssh,cron,syslogといったシステムサービスが含まれる

アプリケーションコンテナ

  • 通常はアプリケーションを一つだけ動かすと言う点でシステムコンテナとは異なる
  • コンテナ一つに対して一つしかアプリケーションを動かさないのは余計な制約に見えるかもしれないが、スケーラブルなアプリケーションを構築するためには適切な細分化の単位
  • KubernetesのPodによってうまく活用できるデザイン哲学にもなっている

リモートレジストリへのイメージの保存

  • Dockerコミュニティーでは、Dockerイメージをリモートレジストリへ保存しておくのが標準的な方法
  • Dockerレジストリにはたくさんの種類がある
  • 最初に決めるのは、プライベートレジストリを使用するのかパブリックレジストリを使用するのか

Dockerfile

FROMでベースイメージを指定して、RUNやCOPYなどのコマンドでイメージを作成する

  • Dockerfile
FROM ubuntu:latest
  • 実行
$ sudo docker build .
  • 確認
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              4e2eef94cd6b        9 days ago          73.9MB

コマンド

ネットワーク

Tips

snapインストール時の起動

$ sudo systemctl restart snap.docker.dockerd

WSL2でKubernetes/Dockerを動かす

nginxを動かす

$ docker pull nginx
$ docker run --name test-ginx -d -p 8080:80 nginx

 

 

docker: Error response from daemon: cgroups: cannot find cgroup mount destination: unknown.

  • Windowsの場合、ホスト側のVMにcgroups用のディレクトリが無いため
$ sudo mkdir /sys/fs/cgroup/systemd
$ sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd

MySQLを動かす

$ docker pull mysql
$ docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=my-password -d mysql:latest
  • 接続
    • psでコンテナIDを確認
    • exec -it で接続
$ 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>