Docker のメモ

July 18, 2021

DockerHub でイメージを探す

例えば、apache

https://hub.docker.com/_/httpd

Dockerfiile なしで

任意のディレクトリで以下のコマンドを実行する。

$ docker run -dit --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4

index.html を作ってhttp://localhost:8080/ にアクセスするとそれが見れる。

コンテナ一覧

docker container ls

-aオプションで稼働中でないものも表示

docker container ls -a

コンテナ停止

docker container stop my-apache-app
# or
docker container stop cc32354cdbd5

コンテナ開始

docker container stop my-apache-app
# or
docker container stop cc32354cdbd5

コンテナ削除

docker container rm my-apache-app
# or
docker container rm cc32354cdbd5

1 回限りのコンテナ

--rm をつけると実行後にコンテナが削除される。

$ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.16 go run hello.go

2 つのコンテナ

$ docker run -dit --name web01 -p 8080:80 httpd:2.4
$ docker run -dit --name web02 -p 8081:80 httpd:2.4

$ docker cp index02.html web02:/usr/local/apache2/htdocs
$ docker cp index02.html web02:/usr/local/apache2/htdocs/index.html
$ docker run -dit --name web01 -v "$PWD"/web01data:/usr/local/apache2/htdocs -p 8080:80 httpd:2.4
$ docker run -dit --name web02 -p 8081:80 httpd:2.4

マウント

  • バインドマウント
    • -v で指定する方法
    • ホストのディレクトリ
  • ボリュームマウント
    • Docker エンジン上の領域

ボリューム

$ docker volume create mysqlvolume
$ docker run --name db01 -dit -v mysqlvolume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mypassword mysql:5.7
$ docker run --name db01 -dit --mount type=volume,src=mysqlvolume,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mypassword mysql:5.7

-v よりも --mount の方がよい。

バックアップ

$ docker run --rm --mount type=volume,src=mysqlvolume,dst=/src --mount type=bind,src="$PWD",dst=/dest busybox tar czvf /dest/backup.tar.gz -C /src .
# or
$ docker run --rm --volumes-from db01 --mount type=bind,src="$PWD",dst=/dest busybox tar czvf /dest/backup.tar.gz -C /var/lib/mysql .

リストア

$ docker run --rm --mount type=volume,src=mysqlvolume,dst=/dest --mount type=bind,src="$PWD",dst=/src busybox tar xvf /src/backup.tar.gz -C /dest
# or
$ docker run --rm --volumes-from db01 --mount type=bind,src="$PWD",dst=/src busybox tar xvf /src/backup.tar.gz -C /var/lib/mysql

ネットワーク

$ docker network create mydockernet

コンテナ作成時に追加

$ docker run -dit --name web01 -p 8080:80 --net mydockernet httpd:2.4
$ docker run -dit --name web02 -p 8081:80 --net mydockernet httpd:2.4

既存コンテナを追加

$ docker network connect mydockernet web01
$ docker network connect mydockernet web02

docker-compose

docker-compose.yml

version: "3"

services:
  wordpress-db:
    image: mysql:5.7
    volumes:
      - wordpress_db_volume:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: myrootpassword
      MYSQL_DATABASE: wordpressdb
      MYSQL_USER: wordpressuser
      MYSQL_PASSWORD: wordpresspass

  wordpress-app:
    depends_on:
      - wordpress-db
    image: wordpress
    ports:
      - 8080:80
    restart: always
    environment:
      WORDPRESS_DB_HOST: wordpress-db
      WORDPRESS_DB_NAME: wordpressdb
      WORDPRESS_DB_USER: wordpressuser
      WORDPRESS_DB_PASSWORD: wordpresspass

volumes:
  wordpress_db_volume:
$ docker-compose up -d
$ docker-compose down

コンテナから image 作成

$ docker commit webcontent mycustomed_httpd

Dockerfile から image 作成

Dockerfile

FROM httpd
COPY index.html /usr/local/apache2/htdocs/
$ docker build . -t myimage01

DockerHub に登録

  • DockerHub にリポジトリを作る
$ docker build . -t myexample
$ docker tag myexample paleapricot/myexample
$ docker login
$ docker push paleapricot/myexample

Amazon ECR に登録

Amazon Elastic Container Registry

  • ECR にリポジトリを作る
  • push コマンド等は ECR で確認できるのでそれを実行する
    • ログイン
    • イメージ構築
    • タグ付け
    • push

Kubernetes

起動

$ minikube start vm-driver=docker

認証情報作成

$ kubectl create secret docker-registry mysecret --docker-server=server --docker-username=username --docker-password=pass

オブジェクトの作成

# マニフェストファイルを指定する
$ kubectl create -f deploy.yml
$ kubectl create -f service.yml

オブジェクトの確認

$ kubectl get pod
$ kubectl get deployments
$ kubectl get services
$ minikube service my-service

変更を適用

$ kubectl apply -f deploy.yml --record=true

削除

$ kubectl delete -f deploy.yml
$ kubectl delete -f service.yml

Profile picture

あさくち Webエンジニアっぽい仕事をしている Twitter