20
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Dockerコマンド、インストール

書いてあること

  • Dockerインストール、コマンドのメモ

よく使うコマンド

bash
#バージョン確認
$ docker version
$ docker-compose version
$ docker-machine version

#停止中のコンテナ、使っていないイメージやネットワークをまとめて削除
$ docker system prune

#仮想マシンの確認
$ docker-machine ls

#仮想マシンを起動
$ docker-machine start

#仮想マシンを停止
$ docker-machine stop

#イメージの確認
$ docker images

#イメージの検索
$ docker search centos

#DockerHubからイメージをダウンロード
$ docker pull centos:7

#イメージ削除
$ docker rmi centos:7

#不要なイメージをすべて削除
$ docker image prune

#使用していないイメージをすべて削除
# docker image prune -a

#コンテナの確認
$ docker ps

#コンテナの確認(すべて)
$ docker ps -a

#コンテナ作成
#-d:バックグラウンド実行、-p:「ホスト:コンテナ」でポート転送、--name:コンテナ名を設定
$ docker run -d -p 8080:80 --name nginx nginx

#コンテナ作成
#-it:ホストとコンテナの標準入出力をつなげる
$ docker run -it -d -p 8080:80 --name centos centos:7

#コンテナ起動
$ docker start nginx

#コンテナ停止
$ docker stop nginx

#コンテナ削除
$ docker rm centos

#コンテナに接続(ログイン)
#新たにbashプロセスを作成して接続する
$ docker exec -it centos bash

#コンテナの接続(ログイン)
#標準入出力に接続しているため、exitでログアウトするとコンテナ自体が停止する
$ docker attach centos

#コンテナからイメージを新たに作成
$ docker commit centos original-nginx

#コンテナ起動と同時にログインし、ログアウトでコンテナ削除
#Dockerfile作成時など、コマンド実行とDockerfile記載を繰り返す際に便利
$ docker run -it -p 8080:80 --rm --name centos centos:7 bash

#Dockerfileからイメージ作成(ビルド)
#-t:イメージ名、.:Dockerfileのパス
#イメージ名のタグを省略するとlatestとなる
$ docker build -t original-nginx .

#Dockerfileから作成したイメージでコンテナ起動
$ docker run -it -d -p 8080:80 --name build-nginx original-nginx

#ネットワークを確認
$ docker network ls

#ネットワークを作成
$ dockernetwork create test-network

#Docker Composeビルド
$ docker-compose build

#Docker Composeビルド
#--no-cache:キャッシュを使用しない、ビルド対象をappサービスのみとする
$ docker-compose build app --no-cache

#Docker Composeコンテナ作成・起動
#-d:バックグラウンド実行
$ docker-compose up -d

#Docker Compose appサービスからコンテナ作成・起動
$ docker-compose up -d app

#コンテナの起動ログを出力
$ docker-compose logs

#Docker Compose appサービスから新たなコンテナを作成してコマンド実行
#コマンドを実行した回数だけコンテナが増えていく
$ docker-compose run --rm app rails db:create

#Docker Compose 既存のappコンテナを起動してコマンド実行
$ docker-compose exec app bash

#Docker Compose サービス内のコンテナを起動
$ docker-compose start

#Docker Compose サービス内のコンテナを停止
$ docker-compose stop

#Docker Compose サービス内のコンテナを削除
$ docker-compose rm

#Docker Compose appサービスのコンテナのみ削除
$ docker-compose rm app

#Docker Composeサービス内のコンテナを停止し、ネットワークごとコンテナを削除
$ docker-compose down

#Docker Composeサービス内のコンテナを停止し、ネットワークごとコンテナ・イメージを削除
$ docker-compose down --rmi all

インストール

MacOS

下記Webページを開く

Docker Desktop for Mac - Docker Hub

Please Login To Downloadをクリック

image.png

Docker IDでログイン(IDがない場合はSign Up)

image.png

ダウンロードしたDocker.dmgを実行し、画面にそってインストールを進める

image.png

OKをクリックし、パスワードを入力する

image.png

Docker Desctop is runningとなったら正常起動

image.png

Windows

Hyper-Vを有効化

20200129_001.png

下記Webページを開く

Docker Desktop for Windows - Docker Hub

Please Login To Downloadをクリック

20200129_002.png

Docker IDでログイン(IDがない場合はSign Up)

image.png

ダウンロードしたDocker Desktop Installer.exeを実行し、画面にそってインストールを進める

以降はMacと同様の手順

Docker

bash
#Dockerのバージョンを確認
$ docker version

#Docker実行環境確認
$ docker system info

#Dockerのディスク利用状況を確認
$ docker system df

#不要なイメージ・コンテナを一括削除
$ docker system prune -a

Docker Hub

bash
#Docker Hubへログイン
$ docker login

#ユーザー名、パスワードを指定してDocker Hubへログイン
$ docker login -u ユーザー名 -p パスワード

#Docker Hubからログアウト
$ docker logout

Docker Image

bash
#イメージを一覧表示
$ docker image ls

#イメージを詳細確認
$ docker image inspect イメージ名[:タグ名]

#イメージの詳細情報からContainerConfig.Imageを取得
$ docker image inspect --format="{{.ContainerConfig.Image}}" イメージ名[:タグ名]

#イメージをダウンロード。タグ名を指定しない場合は最新版(latest)が取得される
$ docker image pull イメージ名[:タグ名]

#すべてのタグのイメージをダウンロード
$ docker image pull -a イメージ名

#URLを指定してイメージをダウンロード。URLはプロトコル(https://)を除いて指定
$ docker image pull [URL]

#イメージのなりすまし・改ざん防止機能(Docker Content Trust)を有効化・無効化
$ export DOCKER_CONTENT_TRUST=1
$ export DOCKER_CONTENT_TRUST=0

#イメージを削除
$ docker image rm イメージ名[:タグ名]

#イメージを強制削除
$ docker image rm -f イメージ名[:タグ名]

#未使用のイメージを強制削除
$ docker image prune -a

#イメージのタグ名を設定。設定するタグ名は「ユーザーID/イメージ名:タグ名」で指定
$ docker image tag イメージ名[:タグ名] 設定するタグ名

#イメージをアップロード
$ docker image push イメージ名[:タグ名]

#イメージをキーワードで検索
$ docker search 検索キーワード

#お気に入り1000件以上をイメージをキーワード検索
$ docker search --filter=stars=1000 検索キーワード

#tarファイルからイメージを作成
$ docker image import ファイルまたはURL - [イメージ名[:タグ名]]

#test.tarのディレクトリ・ファイルから「user/test:1.1」イメージを作成
$ cat test.tar | docker image import - user/test:1.1

#イメージをtarファイルへ保存
$ docker image save [オプション] 保存ファイル名 [イメージ名]

#testイメージをtest.tarファイルへ保存
$ docker image save -o test.tar test

#tarファイルからイメージの読み込み
$ docker image load [オプション]

#test.tarファイルからイメージの読み込み
$ docker image load -i test.tar

Docker Container

bash
#稼働中のコンテナを一覧表示
$ docker container ls [オプション]

#稼働中/停止中のコンテナを一覧表示
$ docker container ls -a

#コンテナ名がtestのコンテナを表示
$ docker container ls -a -f name=test

#コンテナの終了コードが0のコンテナを表示
$ docker container ls -a -f exited=0

#コンテナ名と状態をコロンで区切って表示
$ docker container ls -a --format "{{.Names}}: {{.Status}}"

#コンテナ名、状態、ボリュームマウントを表形式で表示
$ docker container ls -a --format "table {{.Names}}\t{{.Status}}\t{{.Mounts}}"

#コンテナの稼働状態を確認
$ docker container status [コンテナ名]

#コンテナで稼働しているプロセスを確認
$ docker container top [コンテナ名]

#コンテナを生成・起動
$ docker container run [オプション] イメージ名[:タグ名] [引数]

#CentOSイメージから「test」というコンテナ名でコンテナを起動し、シェルを実行
$ docker container run -it --name "test" centos /bin/bash

#CentOSイメージからコンテナを起動し、`/bin/cal`コマンドを実行・結果をコンソール表示後、コンテナを自動削除
$ docker container run --rm -it centos /bin/cal

#CentOSイメージからコンテナをバックグラウンド起動し、pingコマンドを実行
#バックグラウンド起動時はコンテナIDのみターミナルに表示されるため、logsオプションで結果を確認
$ docker container run -d centos /bin/ping localhost
$ docker container logs -t コンテナ識別子

#CentOSイメージからコンテナを起動し、ホスト名「test.com」を指定、/etc/hostsに「node1.test.com<=>192.168.2.10」の定義情報を追加
$ docker container run -it -h test.com --add-host node1.test.com:192.168.2.10 centos

#Nginxイメージからコンテナをバックグラウンド起動し、ホスト8080番ポートをコンテナ80番ポートへマッピング
$ docker container run -d -p 8080:80 nginx

#Nginxイメージからコンテナをバックグラウンド起動し、DNSサーバー・MACアドレスを指定
$ docker container run -d --dns 192.168.2.1 --mac-address="xx:xx:xx:xx:xx:xx" nginx

#CentOSイメージからコンテナを起動し、メモリを1GBを指定、ホストの/Users/●●●/shareとコンテナの/user/share/nginx/htmlを共有
$ docker container run -m 1g -v /Users/●●●/share:/user/share/nginx/html centos

#CentOSイメージからコンテナを起動し、環境変数を設定。setで環境変数が定義されていることを確認
$ docker container run -it -e foo=bar centos /bin/bash
$ set

#CentOSイメージからコンテナを起動し、作業ディレクトリを指定
$ docker container run -it -w=/testdir centos /bin/bash

#コンテナを起動
$ docker container start [オプション] コンテナ識別子 [コンテナ識別子]

#コンテナを停止
$ docker container stop [オプション] コンテナ識別子 [コンテナ識別子]

#コンテナを再起動
$ docker container restart [オプション] コンテナ識別子 [コンテナ識別子]

#コンテナを削除
$ docker container rm [オプション] コンテナ識別子 [コンテナ識別子]

#停止中のコンテナを削除
$ docker container prune

#コンテナを中断
$ docker container pause コンテナ識別子

#コンテナを再開
$ docker container unpause コンテナ識別子

#コンテナへ接続
#Ctrl+Cでデタッチ・コンテナ終了、Ctrl+Qでデタッチのみ
$ docker container attach コンテナ識別子

#稼働中のコンテナでプロセスを実行
$ docker container exec [オプション] コンテナ識別子 実行するコマンド 引数]

#稼働中の「test」コンテナで/bin/bashを実行
$ docker container exec -it test /bin/bash

#稼働中のコンテナのポート転送確認
$ docker container port コンテナ識別子

#コンテナの名前変更
$ docker container rename 変更前コンテナ名 変更後コンテナ名

#コンテナ内のファイルをコピー
$ docker container cp コンテナ識別子:コンテナ内のファイルパス ホストのディレクトリパス
$ docker container cp ホストのディレクトリパス コンテナ識別子:コンテナ内のファイルパス

#コンテナ操作の差分確認
$ docker container diff コンテナ識別子

#コンテナからイメージを作成
$ docker container commit [オプション] コンテナ識別子 [イメージ名[:タグ名]]

#testコンテナから作成者が「User」、イメージ名が「user/test:1.0」のイメージを作成
$ docker container commit -a "User" test user/test:1.0

#コンテナをtarファイル出力。docker image importでtarファイルからイメージを作成する
$ docker container export コンテナ識別子

#testコンテナからtest.tarファイル出力
$ docker container export test > test.tar

Docker Network

bash
#ネットワークを一覧表示
$ docker network ls [オプション]

#ブリッジネットワークのネットワークIDを一覧表示
$ docker network ls -q -f driver=bridge

#ネットワークの詳細確認
$ docker network inspect [オプション] ネットワーク

#web-networkネットワークの詳細確認
$ docker network inspect web-network

#ネットワークを作成
$ docker network create [オプション] ネットワーク

#web-networkというブリッジネットワークを作成
$ docker network create -d bridge web-network

#ネットワークを削除
$ docker network rm [オプション] ネットワーク

#web-networkネットワークを削除
$ docker network rm web-network

#コンテナをネットワークへ接続
$ docker network connect [オプション] ネットワーク コンテナ

#testコンテナをweb-networkネットワークへ接続
$ docker network connect web-network test

#ネットワークを指定してコンテナを起動。ネットワークを明示的に指定しない場合、デフォルトのブリッジネットワークに接続される
$ docker container run -itd --name=コンテナ識別子 --net=ネットワーク イメージ名[:タグ名]

#CentOSイメージからコンテナを起動し、web-networkへ接続後、コンテナの詳細確認
$ docker container run --name="test" --net=web-network centos
$ docker container inspect test

#コンテナをネットワークから切断
$ docker network disconnect [オプション] ネットワーク コンテナ

#testコンテナをweb-networkネットワークから切断
$ docker network disconnect web-network test

Dockerfile

Dockerfileの命令

命令 説明
FROM ベースイメージの指定
RUN コマンド実行
CMD コンテナの実行コマンド
LABEL ラベルを設定
EXPOSE ポートのエクスポート
ENV 環境変数
ADD ファイル/ディレクトリの追加
COPY ファイルのコピー
ENTRYPOINT コンテナの実行コマンド
VOLUME ボリュームのマウント
USER ユーザーの指定
WORKDIR 作業ディレクトリ
ARG Dockerfile内の変数
ONBUILD ビルド完了後に実行されるコマンド
STOPSIGNAL システムコールシグナルの設定
HEALTHCHECK コンテナのヘルスチェック
SHELL デフォルトシェルの設定
bash
#DockerfileからDockerimeイメージを作成。Dockerfileの場所は絶対パス/相対パスどちらも利用可能
$ docker build -t [生成するイメージ名]:[タグ名] [Dockerfileの場所]

#/home/docker/testディレクトリのDockerfileからtest:1.0イメージを作成
$ docker build -t test:1.0 /home/docker/test

#カレントディレクトリのDocker.baseファイルからtest:2.0イメージを作成
$ docker build -t test:2.0 -f Docker.base .

#イメージ生成の過程で実行されたコマンドを確認
$ docker history イメージ名
#DockerコンテナをどのDockerイメージから生成するか
FROM [イメージ名]
FROM [イメージ名]:[タグ名]
FROM [イメージ名]@[ダイジェスト]

#イメージを作成するためのコマンド実行
RUN [実行したいコマンド]

#Shell形式でNginxのインストール。/bin/shで実行される
RUN apt-get install -y nginx

#Exec形式でNginxのインストール。シェルを介さず実行される
RUN ["apt-get install -y nginx"]

#Exec形式でbash指定でNginxのインストール
RUN ["/bin/bash", "-c", "apt-get install -y nginx"]

#コンテナ内でのコマンド実行
CMD [実行したいコマンド]

#Exec形式でNginxをフォアグラウンド実行
CMD ["nginx", "-g", "daemon off;"]

#Shell形式でNginxをフォアグラウンド実行
CMD nginx -g 'daemon off;'

#ポート指定
EXPOSE ポート番号

#コンテナの実行コマンド
ENTRYPOINT [実行したいコマンド]

#Exec形式でNginxをフォアグラウンド実行
ENTRYPOINT ["nginx", "-g", "daemon off;"]

#Shell形式でNginxをフォアグラウンド実行
ENTRYPOINT nginx -g 'daemon off;'

#ビルド完了後に実行するコマンド
#※自身のDockerfileから生成したイメージをベースイメージとした別のDockerfileをビルドする際に実行するコマンドを指定
ONBUILD [実行したいコマンド]

#システムコールシグナルの設定。シグナル番号(9など)またはシグナル名(SIGKILLなど)を指定
STOPSIGNAL [シグナル]

#コンテナのヘルスチェック命令
HEALTHCHECK [オプション] CMD 実行するコマンド

#5分毎に稼働中のWebサーバーのメインページ(https://localhost/)を3秒以内に表示されるか確認。ヘルスチェック結果は`docker container inspect`コマンドで確認
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f https://localhost/ || exit 1

#環境変数の設定
ENV [key]=[value]

#複数の環境変数を一度に設定
ENV myName="yoshi0518" myAge=34

#作業ディレクトリの指定
#WORKDIRはRUN、CMD、ENTRYPOINT、COPY、ADDコマンドで利用される
WORKDIR [作業ディレクトリのパス]

#絶対パス/相対パスで作業ディレクトリを指定
WORKDIR /first
WORKDIR second
WORKDIR third
RUN ["pwd"] #/first/second/third

#環境変数を利用して作業ディレクトリを指定
ENV DIRPATH /first
ENV DIRNAME second
WORKDIR $DIRPATH/$DIRNAME
RUN ["pwd"] #/first/second

#ユーザーの指定
#USERはRUN、CMD、ENTRYPOINTコマンドで利用される
USER [ユーザー名/UID]

#ユーザーをyoshi0518に指定
USER yoshi0518

#ラベルの指定
#イメージにバージョン情報や作成者情報などを持たせる際に利用
LABEL [key]=[value]

#作成者、バージョン情報を設定。確認はdocker image inspectで確認
LABEL author="yoshi0518"
LABEL version="1.0.0"

#ポートの設定
EXPOSE ポート番号

#Dockerfile内変数の設定
ARG 変数名[=デフォルト値]

#YOURNAME変数を定義
ARG YOURNAME="yoshi0518"

#デフォルトのシェルを設定
SHELL ["シェルのパス", "パラメータ"]

#bashをデフォルトシェルに設定
SHELL ["/bin/bash", "-c"]

#ファイル/ディレクトリの追加
ADD ホストのファイルパス Dockerイメージのファイルパス
ADD ["ホストのファイルパス" "Dockerイメージのファイルパス"]

#ホスト上のindex.htmlをイメージの/test_dir/httpdocs/に追加。絶対パスでコピー先を指定
ADD index.html /test_dir/httpdocs/

#ホスト上のindex.htmlをイメージの/test_dir/httpdocs/に追加。WORKDIRで起点となるディレクトリを指定
WORKDIR /test_dir
ADD index.html httpdocs/

#ワイルドカードで複数のファイルを追加。*は任意の文字、?は任意の1文字
ADD test* /test/dir/

#URLで指定したリモートファイルを追加。パーミッションは600(ユーザーのみ読み書き可能)となる。認証はできないため、リモートファイルダウンロードに認証が必要な場合はRUNでwgetやcurlコマンドを実行する
ADD https://sample.com/index.html /test_dir/httpdocs

#ファイルをコピー
COPY ホストのファイルパス Dockerイメージのファイルパス
COPY ["ホストのファイルパス" "Dockerイメージのファイルパス"]

#ボリュームのマウント
VOLUME ["/マウントポイント"]

CMDENTRYPOINTの違い

CMD:コンテナ起動時に実行したいコマンドを定義しても、docker container runコマンド実行時に引数で荒玉コマンドを指定した場合、そちらを優先実行する
ENTRYPOINT:必ずコンテナで実行されるが、実行時にコマンド引数を指定したい場合はENTRYPOINTで実行したいコマンドそのもの、CMDでそのコマンドの引数を指定する

#Dockerイメージの取得
FROM ubuntu:16:04

#topを実行
ENTRYPOINT ["top"]
CMD ["-d", "10"]
bash
#デフォルト(Dockerfile)の10秒毎に更新
$ docker container run -it コンテナ名

#2秒毎に更新
$ docker container run -it コンテナ名 -d 2

Docker Compose

bash
#バージョン確認
$ docker-compose --version

#複数コンテナの状態確認
$ docker-compose ps

#ログを確認
$ docker-compose logs

#構成確認
$ docker-compose config

#複数コンテナ生成
$ docker-compose up [オプション] [サービス名]

#./sample/docker-compose.ymlをもとにコンテナを生成
$ docker-compose -f ./sample/docker-compose.yml up

#複数コンテナをバックグラウンド起動
$ docker-compose up -d

#コンテナ起動時にDockerfileをビルド
$ docker-compose up --build

#複数コンテナ起動
$ docker-compose start

#複数コンテナ停止
$ docker-compose stop

#複数コンテナ再起動
$ docker-compose restart

#複数コンテナ一時停止
$ docker-compose pause

#複数コンテナ再開
$ docker-compose unpause

#複数コンテナの強制停止
$ docker-compose kill

#複数コンテナの削除
$ docker-compose rm

#Compose定義ファイルから生成したコンテナやイメージなどのリソースをまとめて削除
$ docker-compose down

#コマンド実行
$ docker-compose run サービス名 コマンド

#サービスの公開ポートを確認
$ docker-compose port [オプション] サービス名 ポート番号

#testサービスの80番ポートに割り当てられた設定を確認
$ docker-compose port test 80
docker-compose.yml
#バージョンを指定
version: ●●●

#ベースイメージを指定
image: イメージ名/イメージID

#Dockerfileによるイメージのビルド
build: Dockerfile

#コマンドを実行
command: コマンド

#entrypointを上書き
entrypoint:
  - ●●
  - ●●

#コンテナ間の連携。エイリアス名を付与することも可能
links:
  - ●●
  - ●●:エイリアス名

#コンテナ間の通信
ports:
  - "ホストのポート番号:コンテナのポート番号"

#コンテナ間の通信。コンテナ内部のみ公開
expose:
  - "ポート番号"

#コンテナの依存関係を定義
depends_on:
  - ●●
  - ●●

#コンテナの環境変数を指定(配列形式)
environment:
  - 環境変数=値

#コンテナの環境変数を指定(ハッシュ形式)
environment:
  環境変数: 

#コンテナの環境変数を指定(別ファイル読み込み)
env_file: ファイル名

#コンテナ名を指定
container_name: コンテナ名

#コンテナのラベル指定(配列形式)
labels:
  - "●●●=■■■"

#コンテナのラベル指定(配列形式)
labels:
  ●●●: "■■■"

Docker Machine

Docker Machine Driver

bash
#バージョン確認
$ docker-machine --version

#実行環境の作成
$ docker-machine create --driver ドライバー名 作成するDockerマシン名

#実行環境の一覧表示
$ docker-machine ls [オプション]

#実行環境のステータス確認
$ docker-machine status Dockerマシン名

#実行環境のURL確認
$ docker-machine url Dockerマシン名

#実行環境へSSH接続
$ docker-machine ssh Dockerマシン名

#実行環境の起動
$ docker-machine start Dockerマシン名

#実行環境の停止
$ docker-machine stop Dockerマシン名

#実行環境の再起動
$ docker-machine restart Dockerマシン名

#実行環境からファイルをダウンロード
$ docker-machine scp Dockerマシン名:ダウンロードするファイル ダウンロード先 

#test実行環境の/etc/passwdファイルをローカルのカレントディレクトリにダウンロード
$ docker-machine scp test:/etc/passwd .

#実行環境の削除
$ docker-machine rm Dockerマシン名

#実行環境の強制停止
$ docker-machine kill Dockerマシン名

#実行環境のIPアドレスを確認
$ docker-machine ip Dockerマシン名

#実行環境の詳細情報を確認
$ docker-machine inspect [オプション] Dockerマシン名

エラー対応

「docker: Error response from daemon: cgroups: cannot find cgroup mount destination: unknown.」

Windows10にDocker Toolsをインストールして利用していた際に発生。

bash
#Docker MachineにSSH接続
$ docker-machine ssh default

#ディレクトリを作成
$ sudo mkdir /sys/fs/cgroup/systemd

#マウント
$ sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd

#Docker Machineからログアウト
$ exit

#Docker Machineを再起動
$ docker-machine restart

参考

dockerのイメージ作成が「cgroups: cannot find cgroup mount destination: unknown.」でエラーになる
Docker command でドッカー練習する時のメモ

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
20
Help us understand the problem. What are the problem?