目的
Docker の学習をしたため、いつでも引き出せるようその備忘録を残す。
内容
構成
Docker
名称 | 内容 |
---|---|
Docker ホスト | Docker Engine をインストールしたアプリ(= Docker コンテナを動かすコンピューター) |
Docker コンテナ | システムの実行環境を隔離した空間 |
Docker イメージ | 必要なファイルを全て固めたアーカイブパッケージ |
コマンド
Docker Engine
// 権限付与
$ chmod 400 ~/docker_ec2.pem
// ssh
$ ssh ubuntu@XX.XX.XX.XXX -i ~/docker_ec2.pem
// パッケージアップデート
$ sudo apt-get update
// 必要なパッケージのインストール
$ sudo apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
// GPG キーダウンロード
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
// Docker ダウンロードサイトを apt リポジトリに追加
$ sudo add-apt-repository \
> "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
> $(lsb_release -cs) \
> stable"
// パッケージアップデート
$ sudo apt-get update
// Docker Engine 他一式ダウンロード
$ sudo apt-get install -y docker-ce docker-ce docker-ce-cli containerd.io
// ubuntu で Docker を利用できるようにする
$ sudo gpasswd -a ubuntu docker
// ログオフ
$ exit
// Docker の確認
$ docker --version
Docker の brew install
$ brew install docker
$ brew install docker-compose
$ brew install docker —cask
基本コマンド
// docker run(docker pull/docker create/docker start をまとめたコマンド)
$ docker run -dit --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
// 実行中のコンテナ一覧
$ docker ps
// 稼働中でないものも含めたコンテナ一覧
$ docker ps -a
// 再開
$ docker start my-apache-app
// ログ
$ docker logs my-apache-app
// 停止
$ docker stop my-apache-app
// 削除
$ docker rm my-apache-app
// docker image 確認
$ docker image ls
// docker image 削除
$ docker image rm httpd:2.4
// pull
$ docker pull httpd:2.4
// create
$ docker create --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
// attach
$ docker attach my-apache-app
// 停止中のコンテナでシェル実行
$ docker run --name my-apache-app -it httpd:2.4 /bin/bash
// 実行中のコンテナでシェル実行
$ docker exec -it my-apache-app /bin/bash
永続化
// 現在のカレントディレクトリの状態を保存した上で、別の場所にカレントディレクトリを移動
$ pushd /tmp
// コピー
$ docker cp /tmp/index.html web01:/usr/local/apache2/htdocs
// 元のディレクトリに戻る
$ popd
// ボリューム作成
$ docker volume create --name mysqlvolume
// ボリューム確認
$ docker volume ls
// ボリュームの場所
$ docker volume inspect mysqlvolume
// 軽量 Linux システム busybox
$ docker run --rm -v mysqlvolume:/src -v "$PWD":/dest busybox tar czvf /dest/backup.tar.gz -C /src .
// tar コマンド確認
$ tar tzvf backup.tar.gz
ネットワーク
// ネットワーク確認
$ docker network ls
// コンテナの詳細情報(IP アドレス検索のため)
$ docker container inspect web01
$ docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' web01
$ docker container inspect --format="{{.NetworkSettings.IPAddress}}" web01
// ネットワーク bridge の詳細情報
$ docker container inspect bridge
$ docker inspect bridge docker network inspect --format='{{range $host, $conf := .Containers}}{{$conf.Name}}->{{$conf.IPv4Address}}{{"\n"}}{{end}}' bridge
// 疎通確認
$ ping -c 4 172.17.0.2
// ネットワークを作成
$ docker network create mydockernet
// 接続
$ docker network connect mydockernet web01
// 切断
$ docker network disconnect bridge web01
docker compose
// python インストール
$ sudo apt install -y python3 python3-pip
// docker-compose インストール
$ sudo pip3 install docker-compose
// バージョン確認
$ docker-compose --version
// 実行
$ docker-compose up -d
// 確認
$ docker-compose ps
// コンテナ・ネットワーク削除
$ docker-compose down
// 停止
$ docker-compose stop
// 起動
$ docker-compose start
Dockerfile
// Dockerfile 起動
$ docker build -t myimage01 .
// 履歴
$ docker history --no-trunc myimage01
save
// ファイル保存
$ docker save -o saved.tar myphpimage
// ファイルサイズ確認
$ ls -al saved.tar
// ロードする
$ docker load -i saved.tar
// export
$ docker export -o exported.tar myphp02
// import
$ docker import exported.tar tmp_httpd
Docker Hub
// タグ付け
$ docker tag myexample fmyuk135/myexample
// push
$ docker push fmyuk135/myexample
// pull
$ docker pull fmyuk135/myexample
// ログアウト
$ docker logout