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