環境はDocker Desktop Mac版でお送りします。
		インストールがまだならば下記からダウンロードしてインストールを完了してください。
	
Get Started with Docker | Docker
ターミナルで下記を実行してバージョンが表示されることを確認してください。
$ docker version
こんな感じに表示されます。
Client: Docker Engine - Community Cloud integration: 1.0.9 Version: 20.10.5
コンテナの作成
		最初にApacheのコンテナを作成しましょう。
		下記を実行してください。
	
$ docker container run --name test1 -d httpd
		コンテナを起動するにはrunコマンドを実行します。
	
		runの後に続くのはオプションです。
	
| –name test1 | コンテナの名前を指定しています。 test1の部分は好きな名前を入力してください。 | 
|---|---|
| -d | バックグランドで実行 | 
| httpd | イメージ名です。 httpdはApacheがインストールされます。イメージの説明は後述します。 | 
コンテナのコマンドはcontainerを省略して書くこともできます。
$ docker run --name test1 -d httpd
		あるバージョンからコマンドの再編成を行ったようでcontainerを省略した書き方は再編成前の記述方法なようです。
	
実行中のコンテナ確認
コンテナが動いているか確認してみましょう。
$ docker container ps
下記のような感じに表示されます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 15fa5~711edb0 httpd "httpd-foreground" 8 minutes ago Up 8 minutes 80/tcp test1
コンテナの停止
stopコマンドの後にコンテナ名を入力します。
$ docker container stop test1
実行するとコンテナ名が表示されます。
test1
もう一度psコマンドを実行すると。
$ docker container ps
カラム名だけ表示されます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
		停止しているコンテナを確認する方法もあります。
		psコマンドに-aオプションを付与します。
	
$ docker container ps -a
先ほど停止したコンテナが表示されました。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 15fa5711edb0 httpd "httpd-foreground" 15 minutes ago Exited (0) 3 minutes ago test1
停止コンテナの起動
停止したコンテナはstartコマンドで起動することができます。
$ docker container start test1
コンテナの削除
		Dockerはコンテナを作ったり消したりが簡単にできるのが売りらしいです。
		消し方も覚えておきましょう。
	
コンテナが停止した状態でrmコマンドに続きコンテナ名を入力します。
$ docker container rm test1
実行するとコンテナ名が表示されます。
test1
先ほどの停止しているコンテナを表示するコマンドを実行してみましょう。
$ docker container ps -a
test1コンテナがなくなっていますね。
イメージについて
		さらっとイメージをというワードが出てきていますが、イメージはコンテナの設計図のようなものです。
		なのでrunコマンドでコンテナを作成した際、イメージも自動的に作られます。
	
コンテナの操作はcontainerコマンドを使いましたが、イメージはimageコマンドで操作します。
ダウンロードしたイメージを確認してみましょう。
$ docker image ls
		runコマンドを実行したとき指定したhttpdが残っていますね。
		コンテナを削除してもイメージは消えません。
		なので2回目移行コンテナを作成する場合は初回より速くなります。
	
REPOSITORY TAG IMAGE ID CREATED SIZE httpd latest ae15ff2bdcb4 11 days ago 138MB
イメージを消してみましょう。
$ docker image rm httpd
再度一覧を実行するとhttpdが消えていますね。
$ docker image ls
ダウンロードするにはpullコマンドを使用します。
$ docker image pull httpd
イメージの検索
イメージの検索はコマンドラインから実行したり、Docker Hubから探せたりします。
$ docker search httpd
ブラウザでApacheにアクセス
		先ほどはApacheのコンテナを作成しただけでしたが、それだけだと意味ないですよね。
		ApacheはWebサーバープログラムなのでブラウザから見れるようにしたいです。
		それにはコンテナ作成時にアクセスする為のポートを設定する必要があります。
	
$ docker container run --name test2 -d -p 8080:80 httpd
		最初に実行したrunコマンドに-pオプションを追加します。
		ホストのポート:コンテナのポートと指定するので、8080を他で使用している場合は変更してください。
	
ちなみにホストとは操作しているマシーンのことです。
ブラウザで下記にアクセスすると、「It works!」と表示されます。
http://localhost:8080
コンテナにアクセス
		ブラウザからApacheにあるhtmlファイルを見ることができましたが、このhtmlファイルどこにあるのってなりますよね。
		コンテナの中に入って見てみましょう。
	
コンテナが起動している状態で下記を実行します。
$ docker container exec -it test2 /bin/bash
成功するとコマンドラインの最初の部分が変わります。
root@02c5d3f3428e:/usr/local/apache2#
cdでhtdocsに移動して、lsを実行すると。
# cd /usr/local/apache2/htdocs # ls
		「index.html」がありましたね。
		catで見てみると。
	
# cat index.html
ブラウザで表示したファイルっぽいです。
<html><body><h1>It works!</h1></body></html>
コンテナから抜け出すにはexitを実行します。
# exit
コンテナへファイルをコピーする
ファイルのありかがわかったので編集したいところではありますが、Dockerはコンテナを作ったり消したりする性質上、直接ファイルを編集することはあまりよろしくなかったりします。
そこでホストからコンテナにファイルを転送してみましょう。
		最初にコンテナにあったindex.htmlをホストにコピーしてみます。
		先ほどのファイル(/usr/local/apache2/htdocs/index.html)をカレントディレクトリ(./)にコピーするには下記を実行します。
	
$ docker container cp test2:/usr/local/apache2/htdocs/index.html ./
ディレクトリに「index.html」が作成されたと思いますので、開いて編集してみましょう。
index.html
<html><body><h1>Update</h1></body></html>
		今度は編集した「index.html」をコンテナにコピーしてみましょう。
		パスの順番を逆にするだけですね。
	
$ docker container cp ./index.html test2:/usr/local/apache2/htdocs/
ブラウザでアクセスして変わっていることを確認してみてください。
バインドマウントの設定
		ホストで編集して、コンテナにコピーして確認できることはわかったのですが、実際の制作でブラウザで確認するのに毎回コピーするのはしんどいですよね。
		バインドマウントを設定することで、ホストとコンテナのディレクトリを同期させることができます。
	
		コンテナを新しく作りますので、コンテナが起動している状態の場合は停止させておきましょう。
		ホストの/Users/ユーザー名/htdocsと、コンテナの/usr/local/apache2/htdocsディレクトリと同期するには、-vオプションにパスを指定します。
	
$ docker container run --name test3 -d -p 8080:80 -v /Users/ユーザー名/htdocs:/usr/local/apache2/htdocs httpd
		ホストのhtdocsにファイルを作成するだけでブラウザで表示できるようになっていると思います。
	
Dockerの操作がなんとなくわかったということで、本日は以上になります。
この記事の動画(Youtube)版はこちら!

