今度は客先でコンテナ勉強会
今日すること
こんにちはふるてつです。
最近客先にて勉強会がスタートしまして、ただいまDockerを勉強中です。
まずは入門ということでこちらのサイト「入門Docker」を勉強しております。
https://y-ohgi.com/introduction-docker/
今週は自社の会議で参加できず、自宅にて「コンポーネント」 メニューの 「Dockerfile」ページを自習しました。
1. Dockerfile
Dockerfile
を記述してそのファイルを元にDocker Image
をビルドすることでスナップショットの作成ができます。
試しにDockerfile
を記述してDocker Image
を作成してみます。
1-1. 環境の用意
ローカルに任意のディレクトリを作成しテキストファイルを1つ作ります(hello.txt)
中身はhello docker !
と書いておきます。
1-2. Dockerfile の編集
次に同一のディレクトリに下記内容のDockerfile
を作成します。
FROM ubuntu
COPY hello.txt /tmp/hello.txt
CMD ["cat", "/tmp/hello.txt"]
上記のDockerfileは上から順番に
1. ubuntu というDocker Imageをもとに、
2. ホストの hello.txt をコンテナの /tmp/hello.txt へコピーして、
3. 「cat /tmp/hello.txt コマンドを実行」という意味になります。
1-3. Docker Image のビルド&実行
docker build
コマンドでDockerfile
から Docker Image を作成します。
docker build -t hello .
-t hello オプションは「Docker Imageを hello というタグ名にする」という意味です。
"."はdocker build 実行時のコンテキストの指定です。
COPY コマンドを実行する際にどのディレクトリを起点とするかを指定します。
実行すると下記のメッセージが表示されました。
You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
わたしはWindows環境を使用していますのでその関係で出てくるもようです。
「すべてのディレクトリのpermission
を755にとりあえずしますよ」という旨のようです。
今回はテストなのでそのままにしておきます。
docker images
コマンドで確認します、下のようにhello
イメージができています。
補足ですがFromで指定したubuntu
のイメージもダウンロードされてきています。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello latest b789b8db2e5f 3 seconds ago 64.2MB
ubuntu latest a2a15febcdf3 5 days ago 64.2MB
ではdocker run hello
で、このイメージを実際に動かしてみます。
下記のように CMD で指定した cat /tmp/hello.txt が実行され、"hello docker !"と表示されました。
docker run hello
hello docker !
なるほどDockerfile
はこんな感じで作るわけです。
このコマンドを色々組合わせて自分独自のDocker Image
を作っていくんでしょうね。
2. Docker Hub へアップロード
ローカルで開発したイメージをステージングや本番環境で動かすにはDockerレジストリにアップロードする必要があるようです。
DockerレジストリはDocker Image を保存するための場所で、Docker版のGitHubのようなものだそうです。
Docker公式が提供しているDockerHub
へ先ほど作成した hello イメージをアップロードします。
使用する前にアカウント登録が必要になります、下記サイトです。
https://hub.docker.com/
2-1. Docker Hubへログイン
下記コマンドでDocker Hub
へログインします。
docker login
ユーザ名やパスワードを聞かれるのでコンソールに従って入力していきます。
2-2. Docker Image を命名
Docker Hub
にアップロードするためにはDocker Image
の命名規則に従う必要があるそうです。
ユーザーのオリジナルイメージは<USER NAME>/<IMAGE NAME>:<TAG>
という命名になります。
( :
まずはdocker tag
コマンドで命名します。
<USER NAME> は自分のユーザー名を入力します。
docker tag hello <USER NAME>/hello
命名できたかdocker images
コマンドで確認します。
REPOSITORYが <USER NAME>/hello になっているイメージが新たにできています。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello latest b789b8db2e5f 14 minutes ago 64.2MB
<USER NAME>/hello latest b789b8db2e5f 14 minutes ago 64.2MB
ubuntu latest a2a15febcdf3 5 days ago 64.2MB
2-3. Docker Imageのアップロード
下記のコマンドでDocker Imageをアップロードします。
docker push <USER NAME>/hello
うまくいったようです。下のようなメッセージが表示されました。
bf69b9f7a066: Pushed
122be11ab4a2: Mounted from library/ubuntu
7beb13bce073: Mounted from library/ubuntu
f7eae43028b3: Mounted from library/ubuntu
6cebf3abed5f: Mounted from library/ubuntu
latest: digest: sha256:f4c69205069a08247f3e5403d982b8635b7c74620a9966a4b1105e62c5974a83 size: 1359
Docker Hub
を確認してみます。
登録されていますね✨
2-4. Docker Hub にアップロードしたDocker Imageの実行
現在存在するローカルのイメージを削除します。
同名のイメージが存在するとDockerHub
から取得せず、ローカルに存在するイメージを参照してしまうからだそうです、なるほど。
docker container prune
コマンドを実行します。
container prune
コマンドは停止しているコンテナをすべて消すコマンドです。
参考サイト:https://docs.docker.com/engine/reference/commandline/container_prune/
docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
ca5ffc8299ad46f659ee21aa8b3793d651b3be8f1124d1cd7469cb99ab2dba2f
8f2895514831065050183538213b4f28bb829c823363466801bb63b48ef7fc16
4348253120ae6d8fdb1ad1c479091b446c15b3a56ac42ef9cf012dc8b7cbbbb8
d9dddcfe7a042bf7813ea5308a4a880a9c0d5742c649229c69272a54f8f4dfdd
af14ba183197d11fc16365470d989dad9d28e101ffeba56c8e3c377929235101
次にdocker image prune -a
コマンドを実行します。
image prune
コマンドは停止しているイメージを消すコマンドです。
-a
オプションをつけるとすべてになります(-all
)
参考サイト:https://docs.docker.com/engine/reference/commandline/image_prune/
docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: hello:latest
untagged: tetsufuru1968/hello:latest
untagged: tetsufuru1968/hello@sha256:f4c69205069a08247f3e5403d982b8635b7c74620a9966a4b1105e62c5974a83
deleted: sha256:b789b8db2e5f37ea6eda822a1fcf82334d60bb36f1dc8940518e1238cbb9335f
deleted: sha256:5ebfb5bb22e017b5f43655e7388072f559c9b547148e906101b8be88d4e97a25
deleted: sha256:01af779985d92c769233e7a4f07321dac0e25a5ec198660c9faed0c3590195e7
untagged: ubuntu:latest
untagged: ubuntu@sha256:d1d454df0f579c6be4d8161d227462d69e163a8ff9d20a847533989cf0c94d90
deleted: sha256:a2a15febcdf362f6115e801d37b5e60d6faaeedcb9896155e5fe9d754025be12
deleted: sha256:fdc47e80ad3dbe1767a5c2141442c0c7aa93a14a817357a0d4353cd8ae48ee58
deleted: sha256:2b4ed599a73ad82b15d4e3488d95af4f387037b90401d63ad6cb433374b3e3d3
deleted: sha256:8f06e3a624319de717230f0d766dd8922d048441adb9e0387860a8047d000409
deleted: sha256:6cebf3abed5fac58d2e792ce8461454e92c245d5312c42118f02e231a73b317f
それでは改めてdocker pull <USER NAME>/hello
コマンドでDocker Hub
から自作したイメージを取得します。
docker pull <USER NAME>/hello
Using default tag: latest
latest: Pulling from <USER NAME>/hello
35c102085707: Pull complete
251f5509d51d: Pull complete
8e829fe70a46: Pull complete
6001e1789921: Pull complete
2cf3a5dd5be8: Pull complete
Digest: sha256:f4c69205069a08247f3e5403d982b8635b7c74620a9966a4b1105e62c5974a83
Status: Downloaded newer image for <USER NAME>/hello:latest
docker.io/<USER NAME>/hello:latest
docker run <USER NAME>/hello
コマンドで上記で取得したDocker image
を実行します。
docker run <USER NAME>/hello
hello docker !
3. DSL(Domain Specific Language:ドメイン固有言語)
Dockerfileには17のコマンドが用意されているそうですが、わたしは初心者ですのでいきなり全部は大変そうです。
「入門Docker」のサイトで言われている基本的な7つのコマンドをまずは覚えて、今後試してみようかと思います。
FROM
、COPY
、RUN
、CMD
、WORKDIR
、ENV
、USER
今日の感想
今回も勉強した「入門Docker」の内容をそのまままとめた内容になりました。
申し訳ありませんがDocker初心者ですのでご勘弁ください。
でもこうやってブログに書くのは良いですね、書くことでいい復習になります。
それではまた