MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
インストール - Docker CEのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
インストール - Docker CE
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Dockerとは、軽量なコンテナ型のアプリケーション実行環境である。dotCloud社(現Docker社)が開発し、2013年にオープンソースのプロジェクトとして公開された。<br> ソフトウェアの高速な配布・実行、容易なイメージのカスタマイズ、導入運用の手軽さ、豊富なプレビルドイメージの提供などの理由により、当初はソフトウェアの開発やテスト段階における利用が多かったが、<br> 現在ではパブリッククラウドからオンプレミスシステムまで、さまざまなシーンで急速に普及しつつある。<br> <br> コンテナは、Linuxの通常のプロセスとほぼ同じものであるが、利用できる名前空間やリソースが他のプロセスやコンテナからは隔離され、それぞれ固有の設定を持てるようになっている。<br> そのため、コンテナ内のアプリケーションから見ると、独立したコンピュータ上で動作しているように振る舞う。<br> コンテナを管理するコストは、プロセスを管理するコストとほぼ変わらず、仮想マシンを管理するコストと比較すると非常に軽い。<br> * 名前空間の隔離機能 *: ファイルシステムやコンピュータ名、ユーザー名(ユーザーID)、グループ名(グループID)、プロセスID、ネットワーク機能などを、コンテナごとに独自に設定できるようにする機能。 * リソースの隔離機能 *: CPUやメモリ、ディスク入出力など、コンテナ内で利用するリソースを他のコンテナから隔離したり、設定に基づいて振り分けたりする機能。 <br> 様々なDockerイメージは下記のWebサイトよりダウンロードできる。<br> https://hub.docker.com<br> <br><br> == Docker公式サイトからバイナリをインストールする == サポート外のプラットフォーム用の手順として、バイナリインストールの手順が以下にある。<br> [https://docs.docker.com/engine/installation/linux/docker-ce/binaries/ Install Docker CE from binaries | Docker Documentation]<br> 最新版をインスールする場合はこの手順が推奨される。<br> <br> バイナリは以下のWebサイトから選択する。<br> https://download.docker.com/linux/static/stable/x86_64/<br> (stable以外のedgeやtestは好みで選択する)<br> wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz tar zxvf docker-18.06.3-ce.tgz sudo cp docker/* /usr/local/bin <br> 正常にインストールできたか確認する。<br> docker version # 結果 Client: Version: 18.06.3-ce API version: **** Go version: ******* Git commit: ******* Built: ************** OS/Arch: linux/amd64 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? <br> 次に、systemdユニットファイルを作成する。<br> パッケージ管理システムを使用せずにバイナリファイルをインストールする場合、Dockerとsystemdを手動で統合する。<br> <br> 以下のGitHubにアクセスして、docker.serviceファイルとdocker.socketファイルを/etc/systemd/systemディレクトリに配置する。<br> https://github.com/moby/moby/tree/master/contrib/init/systemd <br> == リポジトリを追加してインストール == Dockerのリポジトリを追加してインストールする場合は、こちらの手順を用いる。<br> ただし、リポジトリに含まれるDocker CEの更新が遅い場合があるので注意すること。<br> <br> ===== CentOSの場合 ===== まず、Docker CEをインストールするために、依存関係のライブラリをインストールする。<br> sudo yum install yum-utils device-mapper-persistent-data lvm2 <br> 続いて、Docker CEをインストールする。<br> sudo yum install docker-ce <br> <u>'''※注意'''</u><br> <u>'''Docker CEの最新バージョンを使用する場合は、標準設定では無効になっているリポジトリを有効にする必要がある。'''</u><br> sudo yum-config-manager --enable docker-ce-edge sudo yum-config-manager --enable docker-ce-test <br> ===== SUSEの場合 ===== まず、Dockerのリポジトリを追加するため、以下のファイルを任意のエディタで作成する。<br> sudo vi /etc/zypp/repos.d/docker.repo # 追記 [Virtualization_containers] name=Virtualization:containers (SLE and openSUSE 15) type=rpm-md baseurl=http://download.opensuse.org/repositories/Virtualization:/containers/SLE_xx_SPx/ # SLEの場合 baseurl=http://download.opensuse.org/repositories/Virtualization:/containers/openSUSE_Leap_xx.x/ # openSUSEの場合 gpgcheck=1 gpgkey=http://download.opensuse.org/repositories/Virtualization:/containers/SLE_xx_SPx/repodata/repomd.xml.key # SLEの場合 gpgkey=http://download.opensuse.org/repositories/Virtualization:/containers/openSUSE_Leap_xx.x/repodata/repomd.xml.key # openSUSEの場合 enabled=1 <br> ファイル作成後、リポジトリの更新とdockerのインストールを行う。<br> sudo zypper --gpg-auto-import-keys refresh sudo zypper install docker docker-compose <br> または、SLEの場合は、以下の手順を行うこともできる。<br> # YaSTを起動して、[ソフトウェア] - [ソフトウェアリポジトリ]を選択する。 # [ソフトウェアリポジトリ]画面から、[追加]ボタンを押下する。 # [Extensions and Module from Registration Server]を選択して、[次へ]ボタンを押下する。 # [利用可能なextensionsとmodules]から、[Container Module]を選択して、[次へ]ボタンを押下する。<br>この時、containerモジュールとリポジトリがシステムに追加される。 # Subscription Management Toolを使用している場合、SMTサーバのリポジトリリストを更新する。<br>または、以下のコマンドを実行する。 #: <code>sudo SUSEConnect -p sle-module-containers/15/x86_64 -r ''</code> #: または #: <code>sudo SUSEConnect -p sle-module-containers/15/x86_64 ''</code> <br><br> == Docker CEの設定 == 正常にインストールできたか確認する。<br> docker version # 結果 Client: Version: 18.06.3-ce API version: **** Go version: ******* Git commit: ******* Built: ************** OS/Arch: linux/amd64 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? <br> インストールが正常に完了したら、Dockerサービスを開始する。<br> sudo systemctl start docker <br> また、システムの起動後すぐにDockerを実行する場合、以下のコマンドを実行する。<br> sudo systemctl enable docker <br> また、管理者権限不要でDockerを使用する場合は、以下のコマンドを実行する。<br> sudo usermod -aG docker $(whoami) <br><br> == Docker CEの動作確認 == 最後に、Docker CEが正常に動作するか確認する。<br> これを行うには、以下のように、Dockerのテストイメージを使用する。<br> sudo docker run --rm hello-world # 出力 Hello from Docker! <br> 上記のメッセージは、インストールが正常に動作していることを示す。<br> <br> また、上記のメッセージを生成するために、Dockerは以下の手順を実行している。<br> # Dockerクライアントが、Dockerデーモンに接続される。 # Dockerデーモンが、Docker Hubから"hello-world"イメージをプルする。 # Dockerデーモンが、実行可能な"hello-world"イメージから、現在読み込んでいる出力を生成する新しいコンテナを作成する。 # Dockerデーモンは、Dockerクライアントにその出力をストリーミングして、Dockerクライアントは各自のターミナルに送信する。 <br><br> == 設定 == ~/.profileファイルまたは~/.bashrcファイル等に、以下の設定を追記する。<br> vi ~/.profile <br> export DOCKER_HOST='tcp://localhost:2375' <br> Dockerのイメージおよびコンテナの保存先は、/var/lib/dockerディレクトリに保存される。<br> もし、保存先を変更する場合は、以下の手順を実施する。<br> # Dockerデーモンの設定ファイルをバックアップする。 #: <code>sudo cp /usr/lib/systemd/system/docker.service /usr/lib/systemd/system/docker_org.service</code> #: <br> # Dockerデーモンの設定ファイルにある<code>execstart</code>項目を、以下のように編集する。 #: <code>sudo vi /usr/lib/systemd/system/docker.service</code> #: <br> #: # 編集前 #: <code>ExecStart=/usr/bin/dockerd --add-runtime oci=/usr/sbin/docker-runc $DOCKER_NETWORK_OPTIONS $DOCKER_OPTS</code> #: <br> #: # 編集後 #: <code>ExecStart=/usr/bin/dockerd --add-runtime oci=/usr/sbin/docker-runc $DOCKER_NETWORK_OPTIONS $DOCKER_OPTS <span style="color:#C00000;">-g <Dockerの保存先のフルパス></span></code> #: <br> # Dockerデーモンの設定を有効にして起動する。 #: <code>sudo systemctl daemon-reload</code> #: <code>sudo systemctl start docker</code> <br><br> == Dockerコマンド == ==== Dockerイメージの検索 ==== [https://hub.docker.com/ Docker Hub]からイメージを検索およびダウンロードすることもできる。<br> sudo docker search <イメージ名> <br> ==== Dockerイメージのダウンロード ==== sudo docker pull <イメージ名> <br> ==== Dockerイメージの一覧表示 ==== sudo docker image ls または sudo docker image ls -a または sudo docker image ls --all <br> ==== Dockerイメージの削除 ==== <イメージ名>は上述の"イメージの一覧表示"で確認できる。<br> <code>-f</code>オプションを付加することにより、使用中のイメージおよびコンテナであっても削除することができる。<br> sudo docker rmi -f <イメージ名> <br> ==== Dockerイメージの実行 ==== <イメージ名>はイメージの名前であり、<COMMAND>はDockerコンテナ上で実行するコマンドである。<br> sudo docker run <イメージ名> <COMMAND> <br> 実行コマンドが、/bin/bashのような対話型(インタラクティブ)なコマンドの場合は、<code>-it</code>オプションを指定する。<br> <code>-i</code>オプションはコンテナの標準入力を有効化、<code>-t</code>オプションはttyを有効化するためのオプションである。<br> sudo docker run –it <イメージ名> /bin/bash <br> detachedモード(バックグラウンドモード)で実行する場合は、<code>–d</code>オプションを指定する。<br> sudo docker run -d dockersamples/static-site <br> ==== 実行中のDockerコンテナの一覧表示 ==== sudo docker ps または sudo docker container ls <br> ==== 全てのDockerコンテナの一覧表示 ==== sudo docker ps -a または sudo docker ps --all または sudo docker container ls –a または sudo docker container ls –-all <br> ==== Dockerコンテナの削除 ==== <CONTAINER ID>を指定する。<br> <CONTAINER ID>は上述の"コンテナの一覧表示"で確認できる。<br> sudo docker rm <CONTAINER ID> または sudo docker countainer rm <CONTAINER ID> <br> ==== Dockerコンテナの停止 ==== sudo docker stop <CONTAINER ID> sudo docker container stop <CONTAINER ID> <br> コンテナの停止と削除を同時に実施する。<br> sudo docker rm –f <CONTAINER ID> sudo docker container rm -f <CONTAINER ID> <br> ==== Dockerコンテナに任意の名前を付ける ==== これは、<CONTAINER ID>の代わりに指定できる。<br> sudo docker run --name <任意のコンテナ名> <イメージ名> <br> ==== ポートマッピング ==== <code>run</code>コマンドにおいて、<code>-P</code>オプションを指定すると、コンテナが使うポートがランダムにホストのポートにマッピングされる。<br> また、<code>-d</code>オプションを指定すると、コンテナIDを表示して、バックグラウンドでコンテナを実行される。<br> sudo docker run -d -P <イメージ名> <br> <code>-p</code>オプションを使用すると、コンテナのポートをマッピングするホストのポートを指定できる。<br> 以下の例では、ホストPCの12345番ポートをコンテナの80番ポートにマッピングしている。<br> sudo docker run -it –p 12345:80 <イメージ名> /bin/bash <br> どのポートにマッピングされたかは、<code>sudo docker ps</code>コマンドまたは<code>sudo docker port <CONTAINER ID></code>で確認できる。<br> sudo docker port <CONTAINER ID> # 出力例 443/tcp -> 0.0.0.0:32770 80/tcp -> 0.0.0.0:32771 <br> ==== DockerコンテナからDockerイメージを作成する ==== まず、Dockerコンテナを停止する。<br> sudo docker container stop <CONTAINER IDまたはコンテナ名> <br> 次に、停止したDockerコンテナからDockerイメージを作成する。<br> sudo docker commit <CONTAINER IDまたはコンテナ名> <イメージのリポジトリ名>:<イメージのタグ名> <br> 作成したDcockerイメージを確認する。<br> sudo docker images <br> 作成したDockerイメージからDockerコンテナを作成する。<br> sudo docker run -it --name <CONTAINER IDまたはコンテナ名> <イメージのリポジトリ名>:<イメージのタグ名> /bin/bash <br><br> == Dockerイメージの作成 == Dockerイメージを作成するには、まず、Dockerfileを記述する必要がある。(Dockerfileはテキストファイルである)<br> このDockerfileに、インストールするOSやライブラリを指定して、最後に、コンテナで実行したいソフトウェアを指定する。<br> <br> まず、Dockerfileでは、Base Imageを指定する。(例えば、OSのImageはBase Imageの一種である)<br> Base Imageは"FROM"で指定する。以下の例は、CentOS 7を指定する例である。<br> FROM centos:centos7 <br> 次に、コンテナが必要とするソフトウェアのインストール等を行う。(各OSのパッケージ管理システムを使用すると簡単である)<br> CentOSであればyum、Ubuntuならaptを使用する。(yumやapt等のコマンドの実行は、RUNで行う)<br> RUN yum install xxxx <br> 特定のファイルをコンテナに埋め込むには、"COPY"を使用する。コンテナのどこにファイルを埋め込むのかを指定する。<br> COPY <File Name> /home/xxx <br> コンテナが実行するソフトウェアが通信を行う場合、そのソフトウェアは特定のポート番号を使用する。(例えば、Webサーバであれば80番や443番を使用する)<br> そのポート番号を、ホストOSのポート番号とマッピングする必要がある。<br> マッピングは、コンテナを実行する際に使用するが、そのためには、コンテナのポート番号を公開する必要がある。<br> それを行うには、"EXPOSE"を使用する。<br> EXPOSE 80 <br> コンテナが実行するソフトウェアは、"CMD"で指定する。<br> CMDは、Dockerfileに1個だけである。諸々の準備の完了後、最後にCMDを指定する。<br> CMD ["python", "/usr/src/app/app.py"] <br> 以下の例では、pythonがコマンドで、その後は、コマンドに対する引数である。つまり、上記の例は、以下のコマンドをコンテナ上で実行することを意味する。<br> python /usr/src/app/app.py <br> Dockerfileが完成したら、イメージを作成する。<br> -tオプションを使用してイメージの名前を指定する。<br> その後ろの"."は、Dockerfileがあるディレクトリのパスである。Dockerfileと同じディレクトリであれば、"."でoである。<br> Dockerfileの内容が正しければ、イメージが作成される。<br> sudo docker build -t xxxx/yyyy . <br> プロキシ配下でbuildする場合は、プロキシを設定する必要がある。<br> 例えば、コンテナ上でyumやaptを使用する場合は、プロキシの設定が必要である。<br> 環境変数は、"ENV"で指定できる。<br> ENV https_proxy "http://proxy.hoge.server:8080/" ENV http_proxy "http:// proxy.hoge.server:8080/" <br> <u>'''※注意(yum関連のエラー)'''</u><br> yumのリポジトリが見つからないというエラーが表示される場合がある。<br> 標準のリポジトリではなく、特定のレポジトリを指定する場合、そのリポジトリを記載した設定ファイル(CentOS-Base.repoなど)をCOPYするように、<br> Dockerfileに記載しておけばよい。<br> COPY CentOS-Base.repo /etc/yum.repos.d/ <br> yumの処理は、ユーザに対して"yes or no"を訊ねる場合があるので、自動的にyesと答えないと途中でイメージ作成が止まるので、以下のように記述する。<br> CMD yum update –y <br><br> == エラー関連 == ==== openSUSEコンテナ ==== openSUSEコンテナをDockerコンテナとして動作する時、以下のようなエラーが出力されてsystemdが起動できない。<br> Failed to connect to bus: No such file or directory. <br> これは、Dockerコンテナを実行する時、initシステムを実行していないからである。<br> <br> <code>systemctl</code>コマンドは、dbusを介してsystemdと通信するプロセスである。<br> openSUSEコンテナでは、dbusとsysvinitがインストールされていないため(dbusやsystemdが動作していない)、<code>systemctl</code>コマンドは失敗する。<br> <br> Dockerコンテナで<code>systemctl</code>を実行するには、その依存関係をインストールして、特殊なコマンドを実行する必要がある。<br> <br> dockerfileを作成および使用して解決する手順を、以下に記載する。<br> まず、以下のようなdockerfileを作成する。<br> FROM opensuse/leap:15.3 MAINTAINER Annonymas RUN zypper update -y RUN zypper install -y dbus-1 systemd-sysvinit RUN cp /usr/lib/systemd/system/dbus.service /etc/systemd/system/; \ sed -i 's/OOMScoreAdjust=-900//' /etc/systemd/system/dbus.service VOLUME ["/sys/fs/cgroup", "/run"] CMD ["/sbin/init"] <br> 次に、作成したdockerfileからDockerイメージを作成する。<br> docker build -t suse153i . <br> Dockerコンテナを実行する。<br> sudo docker run -d --name=suse153c --hostname suse153 --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro suse153i sudo docker exec -it suse153c /bin/bash <br> openSUSEコンテナにおいて、systemctlコマンドが実行できるかどうかを確認するには、以下のコマンドを実行する。<br> systemctl list-units <br><br> __FORCETOC__ [[カテゴリ:CentOS]][[カテゴリ:SUSE]]
インストール - Docker CE
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse