tag:crieit.net,2005:https://crieit.net/tags/Docker%E8%87%AA%E5%B7%B1%E5%AD%A6%E7%BF%92/feed
「Docker自己学習」の記事 - Crieit
Crieitでタグ「Docker自己学習」に投稿された最近の記事
2020-12-26T12:48:40+09:00
https://crieit.net/tags/Docker%E8%87%AA%E5%B7%B1%E5%AD%A6%E7%BF%92/feed
tag:crieit.net,2005:PublicArticle/16431
2020-12-26T12:48:40+09:00
2020-12-26T12:48:40+09:00
https://crieit.net/posts/Docker-5-Wordpress-Wordpress
Dockerの学習 #5 (Wordpressを使おう その2:Wordpressセットアップ)
<p>Qrunchからお引越しした記事です : created_at: 2019-05-19 15:22:58 +0900</p>
<p>前回MySQLをセットアップしたので、今回はWordpress本体の設定をしていく。<br />
Web公開するのであればApacheも必要だが、今回は割愛。</p>
<p>成功するまでだいぶ試行錯誤したので、その流れを記載。</p>
<h1 id="Wordpressセットアップ"><a href="#Wordpress%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97">Wordpressセットアップ</a></h1>
<h2 id="1回目の失敗:ポートフォワーディング設定漏れ"><a href="#%EF%BC%91%E5%9B%9E%E7%9B%AE%E3%81%AE%E5%A4%B1%E6%95%97%EF%BC%9A%E3%83%9D%E3%83%BC%E3%83%88%E3%83%95%E3%82%A9%E3%83%AF%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E8%A8%AD%E5%AE%9A%E6%BC%8F%E3%82%8C">1回目の失敗:ポートフォワーディング設定漏れ</a></h2>
<p>コマンド実行してコンテナ作成。(最初はこれだけで終わると思っていた)<br />
<code>docker run --name wp_con01 wordpress</code></p>
<p>作成自体は正常に終了。psコマンドで確認するとポートは80番。<br />
http://192.168.99.100(DockerのIP)へブラウザから接続。<br />
⇒接続できない。</p>
<p>色々調べてみると、ホスト側とコンテナ側でポートフォワーディングの設定を実施しないと接続できない様子。</p>
<p>というわけで、stopでコンテナ停止、rmでコンテナ削除を実施した後に、再度コンテナ作成。<br />
<code>docker run --name -p 8080:80 wp_con01 wordpress</code></p>
<p>これでホスト側の8080番ポートとコンテナ側の80番ポートのフォワーディング設定が実施された。<br />
psで参照するとこんな感じ。</p>
<pre><code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eb276daaee38 wordpress "docker-entrypoint.s" 3 hours ago Up 3 hours 0.0.0.0:8080->80/tcp wp_con01
</code></pre>
<p>この状態でhttp://192.168.99.100(Docker VMのIP):8080へブラウザから接続。<br />
⇒無事接続完了!</p>
<h2 id="2回目の失敗:コンテナ間のネットワーク設定"><a href="#2%E5%9B%9E%E7%9B%AE%E3%81%AE%E5%A4%B1%E6%95%97%EF%BC%9A%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E9%96%93%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E8%A8%AD%E5%AE%9A">2回目の失敗:コンテナ間のネットワーク設定</a></h2>
<p>無事Wordpressの設定も完了したので、ブラウザから設定を進める。<br />
が、MySQLの設定内容を埋めて先に進もうとするとDB接続エラーが発生する。</p>
<p>「そもそもコンテナとコンテナってNW接続って許可されているんだろうか?」<br />
と、思い色々調査すると、接続させるには設定が必要なことが判明。</p>
<p>方法としては--linkでつなげるか、ネットワークを作成しそのネットワークにコンテナを所属させるか、の2通り。<br />
--linkは今後使われなくなる非推奨オプションらしいので、ネットワーク参加の方で設定を実施。</p>
<p>まず、ネットワークを作成。<br />
<code>docker network create my_network</code><br />
作成後、確認。</p>
<pre><code>$ docker network ls
NETWORK ID NAME DRIVER SCOPE
83102481c8be bridge bridge local
0568528ca361 host host local
ef68ec9b2ee9 my_network bridge local
d00080a53d5d none null local
$
</code></pre>
<p>基本、何も指定していないとデフォルトの「bridge」ネットワークに所属するらしいのだが、<br />
このネットワークはDNSの設定がなく、コンテナ名で名前解決ができないらしい。</p>
<p>ネットワークを作成したので、そのネットワークに所属させる形でコンテナ再作成。<br />
前回作成したMySQLのコンテナも作り直す。</p>
<p>また、接続に必要な情報を全部環境変数指定してやる方向に変更した。<br />
<code>docker run --name mysql -p 3306:3306 --network my_network -e MYSQL_ROOT_PASSWORD=password -e MYSQL_USER=wp_user -e MYSQL_PASSWORD=password -e MYSQL_DATABASE=wordpress mysql</code></p>
<p>--networkで所属ネットワークを作成したmy_networkに指定。</p>
<p>(環境変数の補足)<br />
・MYSQL_ROOT_PASSWORD:管理者パスワード<br />
・MYSQL_USER:ユーザ名<br />
・MYSQL_PASSWORD:ユーザのパスワード<br />
・MYSQL_DATABASE:データベース名</p>
<p>続けてWordpressのコンテナ。こちらも接続に必要な情報を環境変数で指定。<br />
<code>docker run --name wp_con01 --link mysql_con01:mysql -p 8080:80 -e WORDPRESS_DB_USER=wp_user -e WORDPRESS_DB_PASSWORD=password wordpress</code></p>
<p>こちらも所属ネットワークをmy_networkに指定。</p>
<p>(環境変数の補足)<br />
・WORDPRESS_DB_USER:接続ユーザ<br />
・WORDPRESS_DB_PASSWORD:接続ユーザのパスワード</p>
<p>これでうまくいくはず、と思いきや、再度エラー。</p>
<h2 id="3回目の失敗:MySQLのコンテナ名"><a href="#3%E5%9B%9E%E7%9B%AE%E3%81%AE%E5%A4%B1%E6%95%97%EF%BC%9AMySQL%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%90%8D">3回目の失敗:MySQLのコンテナ名</a></h2>
<p>Wordpress側で次のエラーが発生。mysqlのサービスがない旨のメッセージ。<br />
<code>MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known</code></p>
<p>ネットで調査してみると「コンテナ名をmysqlにしないとエラーになる」旨の情報あり。</p>
<p>※--linkで(--link test-mysql:mysql)と指定すれば問題なさそうだった。<br />
ただし、今回は--linkを利用しない方向にしたので、コンテナ名を泣く泣くmysqlに変更。<br />
また、docker-composeでの構築であればコンテナ名はmysqlでなくとも問題なさそう?<br />
ほかに何かよい方法があるのかもしれない。</p>
<p>この状態で再度Wordpressのコンテナを作成したところ、再度エラー。(orz)</p>
<h2 id="4回目の失敗:MySQLの認証設定"><a href="#4%E5%9B%9E%E7%9B%AE%E3%81%AE%E5%A4%B1%E6%95%97%EF%BC%9AMySQL%E3%81%AE%E8%AA%8D%E8%A8%BC%E8%A8%AD%E5%AE%9A">4回目の失敗:MySQLの認証設定</a></h2>
<p>Wordpress側で次のエラーが発生。どうも認証周りで失敗している模様。<br />
<code>MySQL Connection Error: (2054) The server requested authentication method unknown to the client</code></p>
<p>エラーメッセージで調べてみると、MySQL内ユーザの認証方式を弄ってやらないといけなそうなことが判明。<br />
EXECでMySQLのコンテナに接近し、ALTER文を発行。</p>
<pre><code>$ docker exec -it mysql mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.0.16 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> alter user wp_user identified WITH mysql_native_password by 'password';
Query OK, 0 rows affected (0.13 sec)
</code></pre>
<p>※ALTER文:<code>alter user [wordpress接続ユーザ] identified WITH mysql_native_password by '[wordpress接続ユーザのパスワード]';</code></p>
<p>実行後、再度Wordpressコンテナ作成。<br />
⇒今度はエラーなし!!!!!!</p>
<p>http://192.168.99.100:8080から、ようやく初期設定画面に遷移できた。(つかれた・・・)</p>
<h1 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h1>
<p>まとめると、次の流れが必要だった。<br />
- 1.ネットワークの作成<br />
<code>docker network create my_network</code><br />
・コンテナを所属させるネットワークの作成。</p>
<ul>
<li><p>2.MySQLコンテナの作成<br />
<code>docker run --name mysql -p 3306:3306 --network my_network -e MYSQL_ROOT_PASSWORD=password -e MYSQL_USER=wp_user -e MYSQL_PASSWORD=password -e MYSQL_DATABASE=wordpress mysql</code><br />
・名前は「mysql」で作成。<br />
・作成したネットワークに所属させる。<br />
・環境変数にてユーザやデータベース情報の設定もしてしまう。</p></li>
<li><p>3.MySQLの設定変更<br />
<code>docker exec -it mysql mysql -u root -p</code><br />
<code>mysql> alter user wp_user identified WITH mysql_native_password by 'password';</code><br />
・MySQLにて、Wordpress用のユーザの認証方式をNativeに変更してやる。</p></li>
<li><p>4.Wordpressコンテナの作成<br />
<code>docker run --name wp --network my_network -p 8080:80 -e WORDPRESS_DB_USER=wp_user -e WORDPRESS_DB_PASSWORD=password wordpress</code><br />
・ホストからアクセスするにはポートフォワーディングの設定が必要。<br />
・作成したネットワークに所属させる。<br />
・環境変数にて接続情報の設定もしてしまう。</p></li>
</ul>
<h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1>
<p>・すごい苦労したが、ネットワーク等含めてコンテナの考え方を学べてよかった。<br />
・実際に手を動かすのがやっぱり大事。<br />
・途中で心が折れそうだったけど、無事作成できてよかった。<br />
・ネット上はだいたい「--link」でつなげてる情報ばっかりだった。<br />
・Dockerに限らずそうだけど、問題が基盤(コンテナ)、ミドルウェア、アプリのどれにあるのかの切り分けが大事、かつ難しい。</p>
ANA
tag:crieit.net,2005:PublicArticle/16430
2020-12-26T12:46:08+09:00
2020-12-26T12:46:08+09:00
https://crieit.net/posts/Docker-4-Wordpress-Mysql
Dockerの学習 #4 (Wordpressを使おう その1:Mysqlセットアップ)
<p>Qrunchからお引越しした記事です : created_at: 2019-05-19 15:15:39 +0900</p>
<p>今回から実際に手を動かして行こうと思う。<br />
とりあえず小さな目標として、ローカル環境でWordpressの利用ができるところまでをやってみる。</p>
<h1 id="参考URL"><a href="#%E5%8F%82%E8%80%83URL">参考URL</a></h1>
<p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/ymstshinichiro/items/01f6a4c299fdb4b832a2">https://qiita.com/ymstshinichiro/items/01f6a4c299fdb4b832a2</a><br />
MYSQLへのログイン。</p>
<h1 id="MySqlのセットアップ"><a href="#MySql%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97">MySqlのセットアップ</a></h1>
<p>Wordpress自体あまり詳しくないが、どうやらMySQLが必要みたいとの情報をどこかでみた。<br />
MySQLのセットアップをやっていく。</p>
<p>まずイメージファイルの有無を確認。</p>
<pre><code>$ docker images
REPOSITORY TAG IMAGE ID CREATED
SIZE
mysql 5.7 2f52e94d8acb 3 weeks ago
373MB
mysql latest d72169616e20 3 weeks ago
443MB
wordpress latest 837092bc87de 5 weeks ago
421MB
php latest 750fb3e3d6ef 6 weeks ago
367MB
httpd latest d4a07e6ce470 6 weeks ago
132MB
hello-world latest fce289e99eb9 4 months ago
1.84kB
php 7.0-apache aa67a9c9814f 4 months ago
368MB
docker/whalesay latest 6b362a9f73eb 3 years ago
247MB
</code></pre>
<p>以前落としていたのがあるっぽい。<br />
なければそのまま次でRUNを実行すれば自動でイメージも取得してくるはず。</p>
<p>ではrunを実行。コンテナに「--name」オプションで名前をつけて実行。</p>
<pre><code>$ docker run --name mysql_con01 mysql
error: database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and
MYSQL_RANDOM_ROOT_PASSWORD
</code></pre>
<p>「MYSQL_ROOT_PASSWORD」、「MYSQL_ALLOW_EMPTY_PASSWORD 」、「MYSQL_RANDOM_ROOT_PASSWORD」<br />
のどれかを指定しろとのこと。環境変数を「-e」で指定。</p>
<pre><code>$ docker run --name mysql_con01 -e MYSQL_ROOT_PASSWORD=password mysql
F:\Docker Toolbox\docker.exe: Error response from daemon: Conflict. The containe
r name "/mysql_con01" is already in use by container "a72e4d4a02636be1f3c73722e8
9b0a1d2ab66a55abffb31b3c18a87de5586b4f". You have to remove (or rename) that con
tainer to be able to reuse that name.
See 'F:\Docker Toolbox\docker.exe run --help'.
</code></pre>
<p>・・・どうやらERRORが発生していてもコンテナ自体は作成されているようで、<br />
同一名称が存在する旨のエラーが表示された。削除していく。</p>
<pre><code>$ docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
</code></pre>
<p>psコマンドで見てもコンテナは出てこないな・・・。<br />
あ、オプションは無しだと実行中のコンテナしか出ないからか。</p>
<pre><code>$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
a72e4d4a0263 mysql "docker-entrypoint.s" 3 minutes ago
Exited (1) 3 minutes ago mysql_con01
8adaae58b85c docker/whalesay "cowsay Hello World!" 2 weeks ago
Exited (0) 2 weeks ago heuristic_torvalds
e2d544b0e813 docker/whalesay "Hello-World!" 2 weeks ago
Created hardcore_pasteur
64cc887485f4 docker/whalesay "Hello World!" 2 weeks ago
Created gifted_robinson
223951c34db3 hello-world "/hello" 2 weeks ago
Exited (0) 2 weeks ago laughing_antonelli
</code></pre>
<p>やはりあるみたいね。消します。</p>
<pre><code>$ docker rm mysql_con01
mysql_con01
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
8adaae58b85c docker/whalesay "cowsay Hello World!" 2 weeks ago
Exited (0) 2 weeks ago heuristic_torvalds
e2d544b0e813 docker/whalesay "Hello-World!" 2 weeks ago
Created hardcore_pasteur
64cc887485f4 docker/whalesay "Hello World!" 2 weeks ago
Created gifted_robinson
223951c34db3 hello-world "/hello" 2 weeks ago
Exited (0) 2 weeks ago laughing_antonelli
</code></pre>
<p>無事消えました。気を取り直して再実行。</p>
<pre><code>$ docker run --name mysql_con01 -e MYSQL_ROOT_PASSWORD=password mysql
Initializing database
2019-05-19T05:39:10.121840Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic
links using --skip-symbolic-links (or equivalent) is the default. Consider not
using this option as it' is deprecated and will be removed in a future release.
2019-05-19T05:39:10.122801Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (my
sqld 8.0.16) initializing of server in progress as process 27
2019-05-19T05:39:59.746085Z 5 [Warning] [MY-010453] [Server] root@localhost is c
reated with an empty password ! Please consider switching off the --initialize-i
nsecure option.
2019-05-19T05:40:25.020508Z 0 [System] [MY-013170] [Server] /usr/sbin/mysqld (my
sqld 8.0.16) initializing of server has completed
Database initialized
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
2019-05-19T05:40:29.693459Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic
links using --skip-symbolic-links (or equivalent) is the default. Consider not
using this option as it' is deprecated and will be removed in a future release.
2019-05-19T05:40:29.693540Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (my
sqld 8.0.16) starting as process 78
2019-05-19T05:40:32.312165Z 0 [Warning] [MY-010068] [Server] CA certificate ca.p
em is self signed.
2019-05-19T05:40:32.389363Z 0 [Warning] [MY-011810] [Server] Insecure configurat
ion for --pid-file: Location '/var/run/mysqld' in the path is accessible to all
OS users. Consider choosing a different directory.
2019-05-19T05:40:32.432437Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: re
ady for connections. Version: '8.0.16' socket: '/var/run/mysqld/mysqld.sock' p
ort: 0 MySQL Community Server - GPL.
2019-05-19T05:40:32.713605Z 0 [System] [MY-011323] [Server] X Plugin ready for c
onnections. Socket: '/var/run/mysqld/mysqlx.sock'
Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping
it.
Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Sk
ipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it
.
Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skippin
g it.
2019-05-19T05:40:49.327025Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Sh
utdown complete (mysqld 8.0.16) MySQL Community Server - GPL.
MySQL init process done. Ready for start up.
2019-05-19T05:40:49.617494Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic
links using --skip-symbolic-links (or equivalent) is the default. Consider not
using this option as it' is deprecated and will be removed in a future release.
2019-05-19T05:40:49.617603Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (my
sqld 8.0.16) starting as process 1
2019-05-19T05:40:52.265763Z 0 [Warning] [MY-010068] [Server] CA certificate ca.p
em is self signed.
2019-05-19T05:40:53.604994Z 0 [Warning] [MY-011810] [Server] Insecure configurat
ion for --pid-file: Location '/var/run/mysqld' in the path is accessible to all
OS users. Consider choosing a different directory.
2019-05-19T05:40:53.648528Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: re
ady for connections. Version: '8.0.16' socket: '/var/run/mysqld/mysqld.sock' p
ort: 3306 MySQL Community Server - GPL.
2019-05-19T05:40:53.921685Z 0 [System] [MY-011323] [Server] X Plugin ready for c
onnections. Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060
</code></pre>
<p>ここで出力がStop。どうやら、この状態で待機し続けるらしい。<br />
<code>Ctrl + C</code>で一度抜ける。</p>
<p>MySQLへの接続を別プロセスで試行する。というわけでEXECコマンドを使用。</p>
<pre><code>$ docker exec -it mysql_con01 mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.16 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
</code></pre>
<p>無事接続できた!せっかくなので適当にSQL発行をして動作確認。</p>
<pre><code>mysql> select Host,User from mysql.user;
+-----------+------------------+
| Host | User |
+-----------+------------------+
| % | root |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
5 rows in set (0.00 sec)
mysql> exit
Bye
</code></pre>
<p>問題なさそう。</p>
<h1 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h1>
<p>長々と記載したが、以下コマンドでコンテナ作っただけである。<br />
<code>docker run --name [コンテナ名] -e MYSQL_ROOT_PASSWORD=[パスワード] mysql</code></p>
ANA
tag:crieit.net,2005:PublicArticle/16429
2020-12-26T12:44:43+09:00
2020-12-26T12:44:43+09:00
https://crieit.net/posts/Docker-3-PS-IMAGES-COMMIT-PUSH-RM-RMI-BUILD
Dockerの学習 #3 (PS、IMAGES、COMMIT、PUSH、RM、RMI、(BUILD))
<p>Qrunchからお引越しした記事です : created_at: 2019-05-14 22:08:42 +0900</p>
<p>ゴールデンウィークが終わり仕事が始まったため、ログを書く習慣が消えてしまった・・・<br />
あわせて学習も止まってしまいそうだった。危ない危ない。<br />
ちょっとずつでも前に進めていきたい。</p>
<p>今回は基本コマンドで学習してないとこの残りをさらっていく。</p>
<h1 id="参考URL"><a href="#%E5%8F%82%E8%80%83URL">参考URL</a></h1>
<p>1.とても分かりやすいサイト<br />
<a target="_blank" rel="nofollow noopener" href="https://morizyun.github.io/docker/about-docker-command.html">https://morizyun.github.io/docker/about-docker-command.html</a><br />
2.ドキュメント日本語化プロジェクト(主にコマンドリファレンスを参照)<br />
<a target="_blank" rel="nofollow noopener" href="http://docs.docker.jp/index.html">http://docs.docker.jp/index.html</a><br />
3.イメージのレイヤ構造について<br />
<a target="_blank" rel="nofollow noopener" href="http://enakai00.hatenablog.com/entry/20140802/1406958412">http://enakai00.hatenablog.com/entry/20140802/1406958412</a></p>
<h1 id="PS"><a href="#PS">PS</a></h1>
<p>コンテナの状況確認。</p>
<ul>
<li>コマンド<br />
<code>docker ps [オプション]</code></li>
<li>表示例</li>
</ul>
<pre><code>$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c01db0b339c ubuntu:12.04 bash 17 seconds ago Up 16 seconds 3300-3310/tcp webapp
d7886598dbe2 crosbymichael/redis:latest /redis-server --dir 33 minutes ago Up 33 minutes 6379/tcp redis,webapp/db
</code></pre>
<ul>
<li>例1:実行中のコンテナのみ表示<br />
<code>docker ps</code><br />
オプション無しで実行中のみ表示。</li>
<li>例2:全コンテナ表示<br />
<code>docker ps -a</code></li>
<li>例3:条件を満たすもののみ表示<br />
<code>docker ps --filter "name=nostalgic"</code><br />
"key=value"の形式で条件指定する。<br />
この例の場合、コンテナ名にnostalgicを含むものを表示する。<br />
keyに指定できるのは次の通り。コマンドリファレンスより引用。<br />
> id(コンテナの ID)<br />
> label( label= か label== )<br />
> name(コンテナの名前)<br />
> exited(整数値 - コンテナの終了コード。実用的なのは --all)<br />
> status(created|restarting|running|paused|exited|dead)<br />
> ancestor( [:] 、 、 ) - 特定のイメージから作られた子コンテナを作成します。<br />
> before(コンテナ ID か名前) - 指定した ID か名前よりも前に作成したコンテナでフィルタ<br />
> since(コンテナ ID か名前) - 指定した ID か名前よりも後に作成したコンテナでフィルタ<br />
> isolation (default|process|hyperv)(Windows デーモンのみ)<br />
> volume(ボリューム名かマウントポイント) - コンテナがマウントしているボリュームでフィルタ<br />
> network(ネットワーク ID か名前)- コンテナが接続しているネットワークでフィルタ</li>
<li>例4:GOテンプレートを利用した整形<br />
<code>docker ps --format "table <span>{</span><span>{</span>.ID<span>}</span><span>}</span>\t<span>{</span><span>{</span>.Labels<span>}</span><span>}</span>"</code><br />
(GO言語のテンプレートのことらしいが、使い道がよく分からない・・・)</li>
</ul>
<h1 id="IMAGES"><a href="#IMAGES">IMAGES</a></h1>
<p>イメージの一覧を表示。<br />
Dockerのイメージファイルは元のイメージから修正箇所を層(レイヤ)として重ねていくようなものらしい。<br />
オプション指定でそのレイヤ構造を把握することもできる模様。<br />
基本的な使い方をする場合はあまり気にしなくてよいところか。<br />
(レイヤの確認は<code>docker history</code>でもできる?)</p>
<ul>
<li>コマンド<br />
<code>docker images [オプション] [リポジトリ[:タグ]]</code></li>
<li>表示例</li>
</ul>
<pre><code>$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 77af4d6b9913 19 hours ago 1.089 GB
committ latest b6fa739cedf5 19 hours ago 1.089 GB
<none> <none> 78a85c484f71 19 hours ago 1.089 GB
docker latest 30557a29d5ab 20 hours ago 1.089 GB
<none> <none> 5ed6274db6ce 24 hours ago 1.089 GB
postgres 9 746b819f315e 4 days ago 213.4 MB
postgres 9.3 746b819f315e 4 days ago 213.4 MB
postgres 9.3.5 746b819f315e 4 days ago 213.4 MB
postgres latest 746b819f315e 4 days ago 213.4 MB
</code></pre>
<ul>
<li>例1:イメージファイルを表示<br />
<code>docker images</code><br />
何も指定しない場合。この場合、中間レイヤと呼ばれる細かいイメージの内容は表示されない。</li>
<li>例2:中間レイヤを含めてイメージ表示<br />
<code>docker images -a</code></li>
<li>例3:ダイジェスト値を表示<br />
<code>docker images -digest</code></li>
<li>例4:javaリポジトリのイメージを表示<br />
<code>docker images java</code><br />
リポジトリ名称は完全一致。javとかでは×。</li>
</ul>
<h1 id="COMMIT"><a href="#COMMIT">COMMIT</a></h1>
<p>停止させたコンテナをイメージファイルにする。<br />
基本、イメージファイルの管理はDockerfileを利用するのが望ましいため、<br />
COMMITはデバッグやサーバ移動などの時に使うものらしい。<br />
- コマンド<br />
<code>docker commit [オプション] コンテナ [リポジトリ[:タグ]]</code><br />
- 例:コンテナ「c3f279d17e0a」をコミット<br />
<code>docker commit c3f279d17e0a svendowideit/testimage:version3</code></p>
<h1 id="PUSH"><a href="#PUSH">PUSH</a></h1>
<p>レジストリへイメージへ送信する。PULLの逆。<br />
- コマンド<br />
<code>docker push [オプション] 名前[:タグ]</code></p>
<h1 id="RM"><a href="#RM">RM</a></h1>
<p>コンテナの削除。<br />
- コマンド<br />
<code>docker rm [オプション] コンテナ [コンテナ...]</code><br />
- 例1:コンテナ「redis」の削除<br />
<code>docker rm redis</code><br />
- 例2:コンテナを強制停止させ削除<br />
<code>docker rm --force redis</code><br />
SIGKILLシグナルを送信し、強制停止させる。</p>
<h1 id="RMI"><a href="#RMI">RMI</a></h1>
<p>イメージの削除。<br />
ショート ID かロング ID、タグ、digest を指定。<br />
- コマンド<br />
<code>docker rmi [オプション] イメージ [イメージ...]</code><br />
- 例1:test1の削除<br />
<code>docker rmi test1</code><br />
- 例2:イメージIDが「fd484f19954f」のものを強制削除<br />
<code>docker rmi -f fd484f19954f</code><br />
削除時にコンフリクトを起こす場合は<code>-f</code>か<code>--force</code>指定で強制削除できる。</p>
<h1 id="BUILD"><a href="#BUILD">BUILD</a></h1>
<p>指定したソースコードからのコンテナ作成。<br />
Dockerfileからの作成などで使う。<br />
DockerfileおよびBUILDについてはその存在のみ確認して、今回は割愛。<br />
(調査していると深みにはまりそうなので)</p>
<ul>
<li>コマンド<br />
<code>docker build [オプション] パス | URL | -</code></li>
</ul>
<h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1>
<p>・これで一通り基本的なものはおさえた(はず)。<br />
・DockerFileとBUILDに関しては後でしっかり時間を割いて理解する必要あり。<br />
ただ、DockerFileからは深い沼の香りがする・・・<br />
・次回こそ色々触ってみるぞ!!!</p>
ANA
tag:crieit.net,2005:PublicArticle/16428
2020-12-26T12:43:06+09:00
2020-12-26T12:43:06+09:00
https://crieit.net/posts/Docker-2-RUN-EXEC-ATTACH-STOP-KILL-START
Dockerの学習 #2 (コンテナの起動・操作コマンド RUN、EXEC、ATTACH、STOP・KILL・START)
<p>Qrunchからお引越しした記事です : created_at: 2019-05-04 19:00:26 +0900</p>
<p>前回イメージファイルの取得まで勉強したので、今回は起動・操作・停止系の基本コマンドを勉強していく。</p>
<h1 id="参考URL"><a href="#%E5%8F%82%E8%80%83URL">参考URL</a></h1>
<p>1.とても分かりやすいサイト<br />
<a target="_blank" rel="nofollow noopener" href="https://morizyun.github.io/docker/about-docker-command.html">https://morizyun.github.io/docker/about-docker-command.html</a><br />
2.ドキュメント日本語化プロジェクト(主にコマンドリファレンスを参照)<br />
<a target="_blank" rel="nofollow noopener" href="http://docs.docker.jp/index.html">http://docs.docker.jp/index.html</a><br />
3.シグナルについて<br />
<a target="_blank" rel="nofollow noopener" href="https://qiita.com/hoto17296/items/07206f25d8cdfad4d358">https://qiita.com/hoto17296/items/07206f25d8cdfad4d358</a></p>
<h1 id="RUN"><a href="#RUN">RUN</a></h1>
<p>イメージファイルを元にコンテナを起動する。<br />
このコマンドでコンテナのディスク作成・メインプロセス(アプリケーションのプロセス)開始が実行される。<br />
(RUNというコマンドなのに起動だけでなくMAKEまでするのか・・・)</p>
<ul>
<li><p>コマンド<br />
<code>docker run [オプション] イメージ[:タグ|@ダイジェスト値] [コマンド] [引数...]</code></p></li>
<li><p>例1:イメージファイル「mysql」を元にコンテナ起動<br />
<code>docker run mysql</code><br />
イメージファイルが無いときはイメージのダウンロードも自動実行される。</p></li>
<li><p>例2:イメージファイル・タグ指定でコンテナ起動<br />
<code>docker run ubuntu:14.04</code><br />
タグの指定、ダイジェスト値の指定も可能な様子。</p></li>
<li><p>例3:コンテナに名前を付ける<br />
<code>docker run --name sql01 mysql</code><br />
「--name」で任意の名前を付与。<br />
付けない場合は自動で命名される。</p></li>
<li><p>例4:ポートのひも付け(ホスト⇔コンテナ)<br />
<code>docker run -p 8080:80 nginx</code><br />
「-p ホストのポート:コンテナのポート」で指定。<br />
上の例の場合、ホストの8080ポートへの通信はコンテナの80ポートへつながっている。<br />
(NAPTみたいな動きをしてくれるってことかな?)</p></li>
<li><p>例5:起動したコンテナでBashを使う(既定のアプリでなくBashを起動する)<br />
<code>docker run -it --entrypoint /bin/bash mysql</code><br />
Bashを使いたい今回のケースでは「--entrypoint」を指定する必要がある。<br />
イメージファイルには「ENTRYPOINT」という「起動後に一番最初に実行するコマンド」が<br />
定義されており、通常はそれが実行される。<br />
⇒メインプロセスの実行コマンド、という解釈でよいはず。<br />
このケースでは、まずBashを使いたいので、ENTRYPOINTをBashの実行(/bin/bash)で上書きしてやる。<br />
⇒メインプロセスをBashにしてやる。<br />
「-i」が「ホストの入力をコンテナの標準出力へつなげる」、<br />
「-t」が「コンテナの標準出力とホストの出力をつなげる」。<br />
大抵の場合IO両方を指定すると思うので「-it」とセットで使う模様。<br />
「アプリケーションのプロセスは起動するけど、それとは別にBashを使いたい」というケースは<br />
後述のEXECコマンドを使う。</p></li>
<li><p>例6:終了時にコンテナ削除<br />
<code>docker run -rm mysql</code><br />
「-rm」でコンテナの終了時にコンテナを自動で削除してくれる。</p></li>
<li><p>補足<br />
リファレンスによると、イメージファイルに定義された次の情報をRUN実行時に上書きできるとのこと。</p>
<blockquote>
<p>・デタッチドあるいはフォアグラウンドで実行<br />
・コンテナの識別<br />
・ネットワーク設定<br />
・実行時の CPU とメモリの制限<br />
・権限と LXC 設定</p>
</blockquote></li>
</ul>
<p> コンテナのリソース設定やネットワーク周りの詳細設定もできる模様。<br />
このあたりまで深く理解しようとすると頭がパンクしそうなので、後回し。<br />
⇒ただ、実運用するとなったら避けては通れなそう。</p>
<h1 id="EXEC"><a href="#EXEC">EXEC</a></h1>
<p>コンテナに追加のプロセス(メインプロセスとは別のプロセス)を実行させる。<br />
ターミナルアクセスなどに使う。</p>
<ul>
<li><p>コマンド<br />
<code>docker exec [オプション] コンテナ名 コマンド [引数...]</code></p></li>
<li><p>例1:メインプロセスとは別にBashプロセスを起動<br />
<code>docker exec -it web01 /bin/bash</code><br />
「web01」というコンテナのBashを起動。<br />
RUNの時と同様に「-it」をオプションにつける。<br />
「-i」は「標準入力(STDIN)を開いたままにする」<br />
「-t」は「擬似デバイス(ディスプレイ)へ接続」みたいな感じ。</p></li>
</ul>
<h1 id="ATTACH"><a href="#ATTACH">ATTACH</a></h1>
<p>実行中のコンテナのメインプロセスの標準入力、標準出力へ接続する。<br />
ちなみに、接続後「exit」でメインプロセスを終了するとコンテナが停止する模様。</p>
<p>なお、コマンドの定義としては<br />
「メインプロセス 」=「PIDが1のプロセス」として扱っているらしい。</p>
<ul>
<li><p>コマンド<br />
<code>docker attach [オプション] コンテナ名</code></p></li>
<li><p>例1:コンテナ「web01」のプロセスへ接近<br />
<code>docker attach web01</code></p></li>
</ul>
<h1 id="STOP・KILL・START"><a href="#STOP%E3%83%BBKILL%E3%83%BBSTART">STOP・KILL・START</a></h1>
<p>コンテナの停止と開始ができる。<br />
「コンテナの停止」⇒「コンテナのメインプロセスの停止」<br />
「コンテナの開始」⇒「コンテナのメインプロセスの開始」<br />
という感じか。</p>
<ul>
<li><p>コマンド<br />
<code>docker stop [オプション] コンテナ名</code><br />
<code>docker kill [オプション] コンテナ名</code><br />
<code>docker start [オプション] コンテナ名</code></p></li>
<li><p>STOPとKILLの違い<br />
STOPは終了信号(SIGTERM)を送信し、一定時間経過後に強制終了信号(SIGKILL)を送信する。<br />
KILLは強制終了信号(SIGKILL)を送信する。<br />
強制停止の要否によって使い分けか。(シャットダウンとパワーオフ(電源オフ)の関係な様なものか)</p></li>
<li><p>例1:コンテナ「web01」を通常停止<br />
<code>docker stop web01</code><br />
オプションなしでstopコマンドを利用した場合、<br />
終了信号を送って10秒(デフォルト値)経過した後に、強制終了信号を送信する。</p></li>
<li><p>例2:コンテナ「web01」を通常停止、ただし強制停止までに1分まつ<br />
<code>docker stop -t 60 web01</code><br />
「-t」または「--time」で強制終了信号送信までの時間を秒単位で指定することも可能。</p></li>
<li><p>例3:コンテナ「web01」を強制停止<br />
<code>docker kill web01</code><br />
メインプロセスの強制終了時はKILL。</p></li>
<li><p>例4:コンテナ「web01」を開始<br />
<code>docker start web01</code><br />
メインプロセスの開始。</p></li>
</ul>
<h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1>
<p>・RUNは奥が深そうだ・・・<br />
イメージファイルに定義されていることと違うことがしたい!って<br />
時は色々指定してやらないといけない、って感じか。<br />
・今回の勉強内容でDockerの概念がだいぶ分かってきた。<br />
参考URL1に記載されているイメージ、コンテナ、プロセスの関係性の図が大分理解できた(気がする)。<br />
・色んなサイトを見たときのコマンド例で、RUN時にポート番号指定している意味が全然分からなかった。<br />
けど、やっとわかった。<br />
・次は残りの基本コマンドをサラッとさらって、その次は色々実践してみよう。</p>
ANA
tag:crieit.net,2005:PublicArticle/16427
2020-12-26T12:39:59+09:00
2020-12-26T12:39:59+09:00
https://crieit.net/posts/Docker-1-PULL
Dockerの学習 #1 (イメージファイルとPULLコマンド)
<p>Qrunchからお引越しした記事です : created_at: 2019-05-01 17:22:36 +0900</p>
<h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1>
<p>Dockerコマンドの考え方がぼんやりしているので、簡単にまとめておく。<br />
今回は「そもそもイメージファイルとは」という点とイメージファイルの取得(PULL)についてまとめる。</p>
<h1 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h1>
<p><a target="_blank" rel="nofollow noopener" href="https://morizyun.github.io/docker/about-docker-command.html">https://morizyun.github.io/docker/about-docker-command.html</a><br />
↑分かりやすい図がついている分かりやすいサイト。<br />
<a target="_blank" rel="nofollow noopener" href="https://hkdnet.hatenablog.com/entry/2017/06/18/190000#fn:1">https://hkdnet.hatenablog.com/entry/2017/06/18/190000#fn:1</a><br />
↑イメージとタグの関係性について。<br />
<a target="_blank" rel="nofollow noopener" href="http://docs.docker.jp/index.html">http://docs.docker.jp/index.html</a><br />
↑ドキュメント日本語化プロジェクト(主にコマンドリファレンスを参照)</p>
<h1 id="イメージファイルについて"><a href="#%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">イメージファイルについて</a></h1>
<p>・イメージファイル⇒コンテナを作るもと(みたいな解釈であってるはず・・・)<br />
・イメージファイルはDocker Hub上で名前とタグで管理する。<br />
・イメージファイル名は次のように管理されることが多い。(参考URLから引用)</p>
<blockquote>
<p>例: nginx → Docker Hub にある nginx という公式イメージ<br />
例: hkdnet/app → Docker Hub にある hkdnet さんの app というイメージ<br />
例: hkdnet.net/nginx → hkdnet.net という Docker registry の nginx# PULL</p>
</blockquote>
<p>・タグはイメージファイル1つにつき複数保持できる。<br />
ただし、イメージ内で一意である必要があり。大体バージョンや作成タイムスタンプなどを保持する様子。<br />
・公開されているイメージファイルの中身は変動することがある。<br />
⇒バージョン値しか書いていないものなどはイメージ内容が変動することがあるらしい。<br />
そのため、当時のイメージ内容がほしい場合はタイムスタンプ指定、細かいリビジョン指定、<br />
または後述のダイジェスト値指定での取得をする必要がある。</p>
<h1 id="PULL"><a href="#PULL">PULL</a></h1>
<p>レポジトリからイメージを持ってくる。<br />
イメージファイルのダウンロードみたいな感じ。</p>
<ul>
<li><p>コマンド<br />
<code>docker pull [オプション] 名前[:タグ] | [レジストリ・ホスト[:レジストリ・ポート]/]名前[:タグ]</code></p></li>
<li><p>例1:mysqlのイメージを取得<br />
<code>docker pull mysql</code><br />
タグ指定がなしで最新版の公式イメージを取得。</p></li>
<li><p>例2:タグによるバージョン指定<br />
<code>docker pull ubuntu:14.04</code><br />
前述の通り、バージョン14.04の最新リビジョンを取得する様子。<br />
リビジョン単位で取得内容を固定したいのであれば、別のタグを使うほうが良さそう。</p></li>
<li><p>例3:関連するタグすべて取得<br />
<code>docker -a pull mysql</code><br />
-a の代わりに --all-tagsでも良いとのこと。</p></li>
<li><p>例4:ダイジェスト値指定<br />
そもそもダイジェスト値とは?<br />
⇒Dockerイメージをリポジトリに登録(PUSH)したときに表示されるキーの様なもの。<br />
PULLした時にも表示されるので、「以前PULLした時とまったく同じイメージがほしい!」というときは、<br />
ダイジェスト値を控えておくとよいのでは。<br />
<code>docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2</code><br />
⇒「sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2」がDigest値</p></li>
<li><p>レポジトリ<br />
何も指定しないとDocker Hubから取得する。<br />
⇒なのでインターネットに接続できるように考慮が必要。プロキシ設定とか。<br />
自分で管理しているレポジトリから取得する場合は、ホスト名やポート番号などを指定。<br />
<code>docker pull myregistry.local:5000/testing/test-image</code><br />
⇒myregistry.localから5000番ポート経由でtest-imageファイルを取得<br />
レポジトリの指定についてはプロトコルの指示(https://)は不要。<br />
なお、認証が必要な場合はDocker Loginコマンドにて指定が必要な様子。</p></li>
</ul>
<h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1>
<p>・PULLの勉強だけで数時間つかってしまった・・・<br />
・イメージファイルの概念が漠然としていたので、良い勉強にはなった。<br />
・ローカルレポジトリも指定できるのは勉強になった。<br />
実際に企業で運用するときはどうしているのかが気になる。GitLab管理とかなのだろうか。</p>
ANA