Dockerとはコンテナ型のアプリケーションの実行環境です。
DockerコンテナはDockerイメージから稼働します。
Dockerイメージには、さまざまなアプリケーションやLinux OSが保管されています。
Dockerはミドルウェアのインストールや各種環境設定をコード化して管理できます。
コード化されたファイルを共有することで、どこでも、誰でも同じ環境が作れます。
開発の中で使っていた環境をそのまま本番環境に持っていくことも可能なため、環境の違いによる問題を減らすことができます。
インストール
Windows・MacではDocker Desktopを使用します。
VirtualBox・Vagrantの環境にインストールすることも可能です。
Windows 10 Homeの場合、WSL2の環境があればDocker Desktopを使用することが可能です。
Debian
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce
ユーザーを docker グループに追加
sudo usermod -aG docker $USER
Docker Compose
sudo curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Ubuntu
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get -y install docker-ce
ユーザーを docker グループに追加
sudo usermod -aG docker $USER
Docker Compose
sudo curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
イメージ
Docker Hub(Docker公式のレジストリ)にはさまざまなイメージが公開されています。
DockerのOfficialのイメージと、その他一般ユーザが作った、イメージが上がっています。
イメージの検索
docker search debian
Docker Hubサイトから検索しても大丈夫です。
イメージのダウンロード
docker pull debian:buster
ダウンロードしたイメージの一覧
docker images
debianイメージのサイズは114MB、VagrantのBoxだと400MBくらいになります。
イメージの削除
docker rmi [イメージID]
コンテナ
Debian(buster)のイメージからコンテナを作成・起動してdate
コマンドを実行します。
docker run debian:buster /bin/date
イメージを持っていない場合はこの時点でダウンロードします。
1秒程度でコンテナが起動し、コマンド(dateコマンド)実行後、停止します。
コンテナを作成・起動してbashで動かします。
docker run -it debian:buster /bin/bash
> ls
> exit
exitで終了。コンテナ停止。
-d
オプションで、バックグラウンドで動きます。
docker run -d -it debian:buster
起動中のコンテナ一覧
docker ps
--name
オプションをつけない場合は、自動的にコンテナに名前がつきます。
起動中のコンテナをbashで動かします。
docker exec -it [コンテナ名] /bin/bash
> exit
exitで終了。コンテナは停止しない。
コンテナの停止
docker stop [コンテナ名]
起動中・停止中のコンテナ一覧
docker ps -a
今まで作ったコンテナが表示されるます。
※--name
オプションをつけないとどんどんできる。
コンテナを作るだけであれば容量はほぼ使用しません。
Disk使用量
docker system df
コンテナを削除
docker rm [コンテナ名]
※起動中はrm
では消せません。
名前を付けてコンテナ起動
docker run -d -it --name test_container debian:buster
コンテナ停止
docker stop test_container
コンテナ起動
docker start test_container
構築済みコンテナの例
主要なアプリケーションのイメージはDockerHubオフィシャルとして存在します。
nginx mariadb postgres wordpressなど。
nginx
docker run -d --name nginx_container -p 8000:80 nginx:1.18
- Nginxイメージを使用 (nginx:1.18)
- コンテナ起動 (docker run)
- バックグランド (-d)
- 名前をnginx_container
- ポート番号:8000 コンテナ側ポート番号:80 (-p 8080:80)
Nginxが立ち上がっていることを確認できます。
http://<ホスト名>:8000/
ログインして、test.html
を作成します。
docker exec -it nginx_container /bin/bash
> echo 'test' > /usr/share/nginx/html/test.html
> exit
http://<ホスト名>:8000/test.html
docker stop nginx_container
docker rm nginx_container
コンテナが削除されると中身のデータもなくなります。
WordPress
docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=password -d mysql
docker run --name my-wordpress --link my-mysql:mysql -d -p 9000:80 wordpress
http://<ホスト名>:9000/
wordpressイメージにPHP・Webサーバ(apache or nginx)・WordPressが構築されています。
データベースは構築されていないので別途構築します。
--link
オプションで連携しています。※現在--link
オプションは非推奨
wordpressイメージは、PHPのバージョンやWebサーバなどを選べます。
まとめ
このように、素早くアプリケーションが構築できます。
バージョンなども手軽に変更でき、ホストOSにも依存しません。
イメージの作成
DockerHubにはさまざまDockerイメージが配布されています。
当てはまる環境がなければ、Dockerイメージをカスタマイズしたり、新規に作成することで、オリジナルの環境を構築できます。
イメージ作成例
プロジェクト作成
mkdir myimage
cd myimage
Dockerfileで定義。
FROM debian:buster
RUN apt update
RUN apt install apache2 -y
EXPOSE 80
CMD /usr/sbin/apachectl -D FOREGROUND
FROM
にイメージ元を指定。RUN
にイメージ作成時のコマンド。EXPOSE
に開けるポートを指定。CMD
にコンテナ起動時のコマンド。
Dockerfileを元にイメージの作成。
docker build -t myimage:1.0 .
docker images
でイメージが作成できていることを確認。
起動
docker run -d --name myimage_container -p 8001:80 myimage:1.0
http://<ホスト名>:8001/
まとめ
イメージ元はさまざまなイメージを使用できます。
debian
ubuntu
centos
などメジャーなディストリビューションや、軽量な alpine
、最小限の環境 busybox
などのOSイメージがあります。
php
ruby
などあらかじめ固有のアプリケーションが入ったものでも可能です。
※セキュリティ的にOfficialのイメージを使用したほうが良いでしょう。
コンテナ起動時に-it
オプションを指定することにより、コンテナ内で作業を行えるので、Dockerfileを作成する場合は、コンテナ内でコマンドを試しながら作成を行うと良いです。
docker run -it debian:buster-slim /bin/bash
※すべての環境でbashが使えるとは限りません。 /bin/ash
/bin/sh
ちなみに、debian:buster-slim
は、通常のdebian:buster
よりさらに絞り込んで軽量化されています。(70MB弱)
Dockerイメージは軽量化するため余分なコマンドなどは入っていません。
※vi
などエディタは入っていない場合がほとんどです。
レジストリ
作成したイメージをDocker Hubに登録すれば、誰でもそのイメージを使用できます。
なので、Docker Hubにはさまざまなイメージが存在します。
イメージを保存できる場所をレジストリといい、Docker Hubは、Docker社公式のレジストリになります。
レジストリは個人的に立ち上げることも可能です。その他レジストリサービスも存在します。
イメージを登録しておけば、その他の人に配布することが可能でイメージ作成の手間が省けます。
個人的な使用に関してはDockerfile
でその都度イメージを作成する形も可能です。
※イメージを作成するタイミングでイメージの内容が異なる可能性はある。
データの保持
Dockerのコンテナを破棄するとデータも消えてしまいます。
データを保存する場合は、コンテナ外に保存します。
ホスト同期
mkdir ~/html
docker run -d --name nginx_sync -v ~/html:/usr/share/nginx/html -p 8002:80 nginx:1.18
echo 'test' > ~/html/test.html
http://<ホスト名>:8002/test.html
ホストOSとゲストOSのファイルを同期させます。
Data Volume
docker run -d --name nginx_data -v html:/usr/share/nginx/html -p 8003:80 nginx:1.18
-v
オプションの先頭のパスがフルパスでない場合、Data Volumeが作成されます。
Data Volume一覧
docker volume ls
VOLUME NAMEがhtmlで作成されます。
実体は以下にあります。
sudo ls -la /var/lib/docker/volumes/
Data Volume Container
データ保存専用のコンテナを作成します。
使用例
FTPサーバ
docker run -d --net host -e FTP_LIST="user1:pass1" -v ~/:/home/user1 kibatic/proftpd
FTPサーバ構築されます。
ftp://user1:pass1@<ホスト名>
コメント