
Dockerイメージ取得
$ docker image pull gihyodocker/echo:latest latest: Pulling from gihyodocker/echo 723254a2c089: Pull complete . |
Dockerコンテナの実行
$ docker container run -t -p 9000:8080 gihyodocker/echo:latest 2019/01/17 02:58:41 start server |
動作確認
Dockerコンテナの停止
動作中のコンテナを確認する。 $ docker container ls -q62ee8eafa590 $ docker stop 62ee8eafa590 以下のコマンドでもOK $ docker stop $(docker container ls -q) |
Dockerの操作、いろいろ
動いているコンテナの確認 $ docker ps 起動しているものを全て停止$ docker stop $(docker ps -q) 停止しているコンテナの確認$ docker ps -a コンテナの削除docker rm [コンテナID] イメージの削除docker rmi [イメージID] 全てのイメージを削除docker rmi $(docker images -q) -f 停止とイメージ削除を1コマンドで実行する$ cat ~/.bash_profilealias docker-purge='docker stop $(docker ps -q) && docker rmi $(docker images -q) -f' |
簡単なアプリケーションとDockerイメージの作成
仕様:
どんなHTTPリクエストに対しても「Hello Docker!!」としてレスポンスをする 8080ポートでサーバーアプリケーションとして動作する。 クライアントからリクエストを受け付けた際は、received requestのログを標準出力に表示する。
コード:main.go
package main import { “fmt” “log” “net/http” } func main() { http.HandleFunc(“/”, func(w http, ResponseWriter, r *http.Request) { log.Println(“received request”) fmt.Fprintf(w, “Hello Docker!!”) }) log.Prntln(“start server”) server := &http.Server{Addr: “:8080”} if err := server.ListenAndServe(); err != nil { log.Println(err) } } |
Dockerfile
FROM golang:1.9 RUN mkdir /echoCOPY main.go /echo CMD [“go”, “run”, “echo/main.go”] |
FROM: Dockerイメージのベースとなるイメージを指定する DockerHubに公開されている
RUN: Dockerコンテナ内で実行するコマンド
COPY: Dockerを実行しているマシンにファイルやディレクトリをコピーするインストラクション
CMD: コンテナ起動時、1回実行する。
Dockerイメージをビルドする。
$ docker image build -t example/echo:latest . Sending build context to Docker daemon 3.072kB |
Dockerイメージの確認
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE example/echo latest d8f65c5be4e7 9 minutes ago 750MB golang 1.9 ef89ef5c42a9 6 months ago 750MB gihyodocker/echo latest 3dbbae6eb30d 12 months ago 733MB |
Dockerコンテナの実行
$ docker container run example/echo:latest 2019/01/17 06:38:58 start server |
対象となるコンテナを停止
$ docker container stop $(docker container ls –filter “ancestor=example/echo” -q) 66a8884cdc16 |
コンテナ外からのリクエストに対応する実行
ポートフォワーディングを利用する
内部8080ポートをコンテナ外9000番で公開する。$ docker container run -d -p 9000:8080 example/echo:latest |
Dockerのイメージ操作
コマンド参照
docker image –help
- -f {Dockerfile名} ※デフォルトの”Dockerfile”の名前を変更する。
- –pull=true ※最新のイメージを取得する。通常は既に取得したイメージを利用する。
イメージの検索
docker search –limit 5 ubuntu
$ docker search –limit 5 ubuntu NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating sys… 9089 [OK] rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 197 [OK] ubuntu-upstart Upstart is an event-based replacement for th… 95 [OK] ubuntu-debootstrap debootstrap –variant=minbase –components=m… 40 [OK] pivotaldata/ubuntu-gpdb-dev Ubuntu images for GPDB development 0 |
イメージの取得
docker image pull [option] リポジトリ名[:タグ名]
※タグ名は、多くは、latest
イメージの参照
docker image ls
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE example/echo latest f4af6897ed2a 32 minutes ago 750MB golang 1.9 ef89ef5c42a9 6 months ago 750MB gihyodocker/echo latest 3dbbae6eb30d 12 months ago 733MB |
イメージIDののタグ付け
docker image tag 元のイメージ名[:タグ] 新のイメージ名[:タグ]
作成したイメージは、デフォルトで「latest」が付くが、更に更新した場合、以前バージョンとなった場合、レポジトリとタグが消えてしまう。このため、バージョン管理の意味を含めてタグをつける
$ docker image tag example/echo:latest example/echo:1.0.0 (確認) $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE example/echo 1.0.0 f4af6897ed2a 37 minutes ago 750MB example/echo latest f4af6897ed2a 37 minutes ago 750MB golang 1.9 ef89ef5c42a9 6 months ago 750MB gihyodocker/echo latest 3dbbae6eb30d 12 months ago 733MB |
2つあるようにみえるが、実態は同じ
Dockerコンテナの操作
- Dockerコンテナは、外から見ると仮想環境となる
- 実行中・停止・破棄 という3つの状態に分類される。 一度実行されたコンテナは、同じイメージを利用したとしても、それぞれ個別の状態を持っている。停止しても、仮想サーバーが停止した状態と同じで実行もできる。
コンテナの作成と実行
docker container run [options] イメージ名[:タグ] [コマンド] [コマンドの引数]
代表的なオプション ※基本、以下オプションを付けて実行すること。
- -d バックグランドで実行する。
- -p 9000:8080 ポートフォワードを行う。
- -it コンテナのshellに接続
(alpinelinuxのイメージ取得) $ docker container run -it alpine:3.7 / $ docker container run -it alpine:3.7 uname -a Linux e36b6c40aa37 4.15.0-29-generic |
- –name [コンテナ名]
$ docker container run -d -p 9001:8080 –name echo1 example/echo:latest ca4cfefdf2c9bd4a1db6acbe8ead6c8152375f63a2215adb581f1c2e162b1cfc $ docker container run -d -p 9002:8080 –name echo2 example/echo:latest 72ecbd862402db9c632b681c6623ec96dd445c9489dd5673426d6505f69350c0 $ docker container ls |
コンテナの停止と再起動、破棄
docker container stop/restart/rm [コンテナID又はコンテナ名]
$ docker container stop echo1 echo1 $ docker container restart echo1 echo1 (破棄は、コンテナを止めてから、実行する) $ docker container rm echo1echo1 |
コンテナの(停止を含めた)一覧
docker container ps -a
$ docker container ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e36b6c40aa37 alpine:3.7 “uname -a” 21 minutes ago Exited (0) 21 minutes ago brave_hugle cf7d2a393761 alpine:3.7 “/bin/sh” 22 minutes ago Exited (0) 21 minutes ago confident_dubinsky $ docker container rm e36b6c40aa37 cf7d2a393761 $ docker container ps -a |
コンテナの標準出力の取得
docker container logs [options] [コンテナID又はコンテナ名]
※-f オプションを付けると、標準出力に出し続ける。
実行中のコンテナでのコマンド実行
docker container exec [options] [コンテナID又はコンテナ名]
$ docker container run -t -d -p 9002:8080 –name echo –rm example/echo:latest a2038a1a36476ddbfda4667386be52b2041a4710a1188fac6a1f03ec74d96874 (実行中のコンテナechoに、pwdを実行し標準出力に出す) (実行中のコンテナをsshログインしたようにする) |
運用管理コマンド
- 不要な(停止した)コンテナを一括削除 docker container prune
- 不要な(停止した)イメージを一括削除 docker image prune
- 不要な(停止した)コンテナ、イメージ、ネットワークを一括削除 docker system prune
- 利用状況の取得 docker container stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS ba59bb412c81 echo 0.00% 9.953MiB / 1.941GiB 0.50% 836B / 0B 111kB / 8.19kB 10 |
マルチコンテナ(Docker Compose)
サーバー作業環境の設定/確認
(ソフトの導入) (バージョン確認) |
基本的なDockerComposeの利用方法(1)
以下のコマンドと同様の内容をdocker-compose.ymlに記載する。
$ docker container run -d -p 9000:8080 –name echo example/echo:latest
version: “3” services: echo: image: example/echo:latest ports: – 9000:8080 |
(DockerComposeの実行)$ docker-compose up -d (DockerComposeの停止)$ docker-compose down Stopping composep72_echo_1 … doneRemoving composep72_echo_1 … doneRemoving network composep72_default |
基本的なDockerComposeの利用方法(2)Buildも含む
main.go Dockerfile docker-compose.yml をセットにして実行する。
version: “3” services: echo: build: . ports: – 9000:8080 |
(DockerComposeの実行)
|