Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

dockerについてのあれこれ ~導入編~

前回紹介しました、Androidスマホのサーバー化ですが、
カメラより画像が取得できるため、画像処理とか出来たら面白そうだな!?と思い立ち、OpenCVのインストールを試みております。
、、、が、思った以上に難しい!!そして、ビルドに時間がかかる!!
かれこれ3時間待ってますがやっと50%を超えたところです。。。

で、待ち時間がちょっと暇だったのでVirtualBox上にdockerを構築してみました!!
初めての構築だったので調べながら実施したのですが、備忘録として手順を残したいと思います!!


【目次】

参考

※下記手順ですが、下記を参考に記載しております。
qiita.com
http://sagantaf.hatenablog.com/entry/2019/06/05/235649sagantaf.hatenablog.com
www.scriptlife.jp
qiita.com

①dockerインストール

まずdocker構築のために必要となるソフトをあらかじめインストール。

sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

次に、docker公式の公開鍵を取得。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

そして、aptコマンド用のリポジトリを設定しますが、dockerではstable、edge、testが公開されています。
今回はstableに設定かつ64bit環境を用いているため、下記を実行。

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

では、dockerをインストールするためにこちらを実行。

sudo apt-get install -y docker-ce

2013年にdockerが誕生したが、2017年にCE(コミュニティエディション)とEE(エンタープライズエディション)が提供されるようになりました。
CE:無償、EE:有償のイメージで問題なさそうです。
今回は無償版で確認するため、CEを用いました。
DockerとDocker-CEの違いについて - Qiita

問題なくインストールできたか確認するために、

docker version

を実行。
バージョンが表示されれば、インストール完了です。


②docker環境構築

コンテナとイメージを作成するためにこちらを実行する。

sudo docker run -d -it --name=コンテナ名 イメージ名

使用できるイメージ名を確認するにはこちらを実行。

apt-cache madison docker-ce

コンテナにログインするにはこちらを実行。

sudo docker exec -it docker名 /bin/bash

③ネットワーク環境構築

まず、コンテナのプロセスIDを確認。

docker inspect コンテナ名 --format '{{.State.Pid}}'

ipコマンドの支配下である、/var/run/netnsにリンクさせる。

sudo mkdir -p /var/run/netns
sudo ln -s /proc/15329/ns/net /var/run/netns/test1-ns

コンテナ内部のネットワークを確認し、IPアドレスが与えられていることをチェック。

sudo ip netns exec test1-ns ip link show

次にdockerのポートフォワーディングを行います。
まず、IPアドレスの確認。

docker inspect --format '{{ .NetworkSettings.IPAddress }}' コンテナ名

続いてNAT + FOWARD設定です。
これにより、外部からコンテナにアクセスが可能になります。

iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport ポート -j DNAT --to-destination IPアドレス:ポート
iptables -A FORWARD -d IPアドレス ! -i docker0 -o docker0 -p tcp -m tcp --dport ポート -j ACCEPT

またdocker run実行時にこちらのように-pオプションを指定することでポートフォワーディング設定が可能です。

sudo docker run -d --name コンテナ名 -p 12345:8888 /bin/bash

④ファイル共有

コンテナ⇒ホスト

sudo docker ps ←コンテナのプロセスID確認
sudo docker cp コンテナID:/etc/my.cnf my.cnf

ホスト⇒コンテナ

sudo docker ps ←コンテナのプロセスID確認
sudo docker cp my.cnf コンテナID:/etc/my.cnf

最後に

docker初めて使ってみたけど、難しいな。。。
保守性とか考えると使えるの便利そうなので、毛嫌いせず積極的に使っていきたいと思います!!