Dockerコマンドの例
このページは、Dockerのコマンドの例をまとめる予定のページです。
目次
注意
- このページを作ったひとが備忘のためにまとめているため網羅性はありません。
- バージョン 20.10.21 時点のものです。将来のバージョンで仕様が変更されている場合は使用できない可能性があります。
- 現在の作業ディレクトリのパスを示す
$(pwd)
は、使用している端末によって変更してください。- PowerShell:
${pwd}
- コマンドプロンプト:
%cd%
- PowerShell:
- 各ソフトウェアの実行は試験・検証用として記載しています。(コードの動作確認などの用途で使用する想定のもので、実運用を想定していません)
例
基本的なコマンド
イメージの取得 (pull)
docker pull イメージ名など
# 例
# docker pull python
# docker pull python:3
イメージの一覧 (images)
docker images
イメージの削除 (rmi)
docker rmi イメージ名など
# 例
# docker rmi python
# docker rmi python:3
イメージのビルド (build)
docker build .
コンテナの実行 (run)
docker run -it --rm イメージ名 コマンド
docker run -d --name コンテナ名 イメージ名
docker run -d --name コンテナ名 -p ホスト側ポート:コンテナ側ポート イメージ名
# 例 (8080ポートでnginxの80ポートにアクセスできるようにする)
# docker run -d --name nginx-tmp -p 8080:80 nginx
docker run -v ホスト側ディレクトリやファイル:コンテナ側ディレクトリやファイル (その他のオプション略)
# 例 (ホスト側作業ディレクトリを /usr/share/nginx/html にマウント)
# docker run -d --rm --name nginx-tmp -v $(pwd):/usr/share/nginx/html -p 8080:80 nginx
docker run -e 変数名=値 (その他のオプション略)
# 例 (環境変数MYSQL_ROOT_PASSWORD=passを指定)
# docker run -d --rm --name mysql-tmp -e MYSQL_ROOT_PASSWORD=pass -p 3306:3306 mysql
docker run --network=ネットワーク名 (その他のオプション略)
# 例 (network-tmpネットワークを作成して接続)
# docker network create network-tmp
# docker run -d --rm --name mysql-tmp -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_DATABASE=demo --network=network-tmp mysql
# docker run -it -d --name php-tmp -v $(pwd):/tmp --network=network-tmp php
docker run --link=コンテナ名 (その他のオプション略)
# 例 (mysql-tmpコンテナにリンク)
# docker run -it -d --name php-tmp -v $(pwd):/tmp --link=mysql-tmp php
コマンドの実行 (exec)
docker exec -it コンテナ名 コマンド
# 例 (bashの実行)
# docker exec -it コンテナ名 bash
コンテナのログ表示 (logs)
docker logs コンテナ名
情報表示 (inspect)
docker inspect イメージ名、コンテナ名、ネットワーク名、IDなど
# 例
# docker inspect mysql
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' コンテナ名
# 例
# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql-tmp
コンテナの停止 (stop)
docker stop コンテナ名
コンテナの削除 (rm)
docker rm -f コンテナ名
ネットワーク (network)
ネットワークの作成 (network create)
docker network create ネットワーク名
ネットワークの削除 (network rm)
docker network rm ネットワーク名
サービス構成 (compose)
構成の作成・実行 (up)
docker compose up
docker compose up -d
docker compose up --force-recreate -V
構成内のコンテナのコマンド実行 (exec)
docker compose exec サービス名 bash
# 例 (サービス名はdocker-compose.yml に記載してあるservicesの1段下の名称)
# docker compose exec nginx-tmp bash
構成の停止・削除 (down)
docker compose down
各ソフトウェアの実行 (試験用)
Node.js
docker run -it --rm node
docker run -it --rm node -e "console.log(1)"
docker run -it --rm -v $(pwd):/tmp node node /tmp/ファイル名
PHP
docker run -it --rm php
docker run -it --rm php docker-php-ext-install pdo_mysql; php -a
docker run -it --rm php -r "echo 1;"
docker run -it --rm -v $(pwd):/tmp php /tmp/ファイル名
# コンテナ実行 (作業ディレクトリを/tmpにマウントしてインタラクティブ + バックグラウンド実行)
docker run -it -d --name php-tmp -v $(pwd):/tmp php
# (別コンテナにコンテナ名でアクセス可能にする場合--networkや--linkを使用)
# docker run -it -d --name php-tmp -v $(pwd):/tmp --link=mysql-tmp php
# 拡張インストール
docker exec -it php-tmp docker-php-ext-install pdo_mysql
# ファイル実行 (PDOのDSNは--networkや--linkを使用していればコンテナ名で接続可。new PDO('mysql:host=mysql-tmp;dbname=demo', $user, $pass) など)
docker exec -it php-tmp php /tmp/test.php
# コンテナ停止・削除
# docker rm -f php-tmp
docker run -d --name php-tmp -v $(pwd):/var/www/html -p 8080:80 php:apache
# コンテナ停止・削除
# docker rm -f php-tmp
# コンテナ実行
docker run -d --name php-tmp -v $(pwd):/var/www/html -p 8080:80 php:apache
# (別コンテナにコンテナ名でアクセス可能にする場合--networkや--linkを使用)
# docker run -d --name php-tmp -v $(pwd):/var/www/html -p 8080:80 --link=mysql-tmp php:apache
# 拡張インストール
docker exec -it php-tmp docker-php-ext-install pdo_mysql
# Apache再起動
docker exec -it php-tmp /etc/init.d/apache2 reload
# コンテナ停止・削除
# docker rm -f php-tmp
Python
docker run -it --rm python
docker run -it --rm python python -c "print(1);"
docker run -it --rm -v $(pwd):/tmp python python /tmp/ファイル名
Ruby
docker run -it --rm ruby
docker run -it --rm ruby ruby -e "puts 1"
docker run -it --rm -v $(pwd):/tmp ruby ruby /tmp/ファイル名
Perl
docker run -it --rm perl
docker run -it --rm perl perl -e "print(1)"
docker run -it --rm -v $(pwd):/tmp perl perl /tmp/ファイル名
MySQL
docker run -d --rm --name mysql-tmp -e MYSQL_ROOT_PASSWORD=pass -p 3306:3306 mysql
# コンテナ停止・削除
# docker rm -f mysql-tmp
docker run -d --name mysql-tmp -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_DATABASE=demo -p 3306:3306 mysql
docker run -d --name mysql-tmp -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_DATABASE=demo -v $(pwd)/init.sql:/docker-entrypoint-initdb.d/init.sql -p 3306:3306 mysql
# init.sqlの例
#
# CREATE TABLE emp (id serial, name text);
# INSERT INTO emp (name) VALUES ('emp1'), ('emp2'), ('emp3');
MariaDB
docker run -d --name mariadb-tmp -e MARIADB_ROOT_PASSWORD=pass -p 3306:3306 mariadb
# コンテナ停止・削除
# docker rm -f mariadb-tmp
docker run -d --name mariadb-tmp -e MARIADB_ROOT_PASSWORD=pass -e MARIADB_DATABASE=demo -p 3306:3306 mariadb
docker run -d --name mariadb-tmp -e MARIADB_ROOT_PASSWORD=pass -e MARIADB_DATABASE=demo -v $(pwd)/init.sql:/docker-entrypoint-initdb.d/init.sql -p 3306:3306 mariadb
PostgreSQL
docker run -d --name pg-tmp -e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres
# コンテナ停止・削除
# docker rm -f pg-tmp
docker run -d --rm --name pg-tmp -e POSTGRES_PASSWORD=postgres -v $(pwd)/init.sql:/docker-entrypoint-initdb.d/init.sql -p 5432:5432 postgres
# init.sqlの例
#
# CREATE USER demo;
# CREATE DATABASE demo;
# GRANT ALL PRIVILEGES ON DATABASE demo TO demo;
# \c demo
# CREATE TABLE emp (id serial, name text);
# INSERT INTO emp (name) VALUES ('emp1'), ('emp2'), ('emp3');
nginx
docker run -d --name nginx-tmp -p 8080:80 nginx
# コンテナ停止・削除
# docker rm -f nginx-tmp
docker run -d --name nginx-tmp -v $(pwd):/usr/share/nginx/html -p 8080:80 nginx
docker run -d --name nginx-tmp -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf -v $(pwd):/usr/share/nginx/html -p 8080:80 nginx
docker run -d --name nginx-tmp -v $(pwd)/default.conf:/etc/nginx/conf.d/default.conf -v $(pwd):/usr/share/nginx/html -p 8080:80 nginx
docker cp nginx-tmp:/etc/nginx/nginx.conf $(pwd)/nginx.conf
PHP + Apache + MySQL (compose)
- (作業ディレクトリ)
- docker-compose.yml
- Dockerfile
- index.php
services:
php-tmp:
build: .
volumes:
- .:/var/www/html
ports:
- "8080:80"
mysql-tmp:
image: mysql
restart: always
# volumes:
# 初期SQL実行が必要な場合追加 (./init.sqlにSQLを用意する)
# - ./init.sql:/docker-entrypoint-initdb.d/init.sql
# 設定が必要な場合追加 (./my.cnfに設定を用意する。Windowsの場合は読み取り専用にする)
# - ./my.cnf:/etc/mysql/my.cnf
environment:
MYSQL_ROOT_PASSWORD: pass
# 初期DBが必要な場合追加
# MYSQL_DATABASE: demo
# タイムゾーンの指定が必要な場合追加
# TZ: Asia/Tokyo
# DBデータをブラウザ上から確認したい場合追加 (http://localhost:8888 サーバ: mysql-tmp, ユーザ名: root, パスワード: pass)
# adminer:
# image: adminer
# restart: always
# ports:
# - "8888:8080"
FROM php:apache
RUN docker-php-ext-install pdo_mysql
<?php
echo 'PHP: ' . PHP_VERSION . '<br>';
// ホストはMySQLのコンテナ名を指定 (この例ではmysql-tmp)
$pdo = new PDO('mysql:host=mysql-tmp', 'root', 'pass');
echo "MySQL: {$pdo->query('SELECT VERSION()')->fetchColumn()}";
// 出力例
// PHP: 8.2.1
// MySQL: 8.0.31
[mysqld]
general_log=1
general_log_file=/tmp/general.log
# 実行 (-d付きでも可)
docker compose up
# 停止・削除
# docker compose down
# 匿名ボリュームを削除して再作成・実行 (-d付きでも可。匿名ボリュームが残っていると初期SQLが実行されないため削除する)
docker compose up --force-recreate -V
# MySQLのみ再作成・実行
docker compose up mysql-tmp --force-recreate -V
# MySQLコマンド実行
docker compose exec mysql-tmp mysql -p
PHP + Apache + PostgreSQL (compose)
- (作業ディレクトリ)
- docker-compose.yml
- Dockerfile
- index.php
services:
php-tmp:
build: .
volumes:
- .:/var/www/html
ports:
- "8080:80"
pg-tmp:
image: postgres
restart: always
# 初期SQL実行が必要な場合追加 (./init.sqlにSQLを用意する)
# volumes:
# - ./init.sql:/docker-entrypoint-initdb.d/init.sql
environment:
POSTGRES_PASSWORD: postgres
# 初期DBが必要な場合追加
# POSTGRES_DB: demo
# タイムゾーンの指定が必要な場合追加
# TZ: Asia/Tokyo
# DBデータをブラウザ上から確認したい場合追加 (http://localhost:8888 サーバ: pg-tmp, ユーザ名: postgres, パスワード: postgres)
# adminer:
# image: adminer
# restart: always
# ports:
# - "8888:8080"
FROM php:apache
RUN apt-get update && apt-get install -y libpq-dev
RUN docker-php-ext-install pdo_pgsql
<?php
echo 'PHP: ' . PHP_VERSION . '<br>';
// ホストはMySQLのサービス名を指定 (この例ではpg-tmp)
$pdo = new PDO('pgsql:host=pg-tmp', 'postgres', 'postgres');
echo "PostgreSQL: {$pdo->query('SELECT VERSION()')->fetchColumn()}";
// 出力例
// PHP: 8.2.1
// PostgreSQL: PostgreSQL 15.1 (Debian 15.1-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
# 実行 (-d付きでも可)
docker compose up
# 停止・削除
# docker compose down
PHP + nginx + MySQL (compose)
- (作業ディレクトリ)
- docker-compose.yml
- Dockerfile
- default.conf
- index.php
services:
mysql-tmp:
image: mysql
restart: always
# volumes:
# 初期SQL実行が必要な場合追加 (./init.sqlにSQLを用意する)
# - ./init.sql:/docker-entrypoint-initdb.d/init.sql
# 設定が必要な場合追加 (./my.cnfに設定を用意する。Windowsの場合は読み取り専用にする)
# - ./my.cnf:/etc/mysql/my.cnf
environment:
MYSQL_ROOT_PASSWORD: pass
# 初期DBが必要な場合追加
# MYSQL_DATABASE: demo
# タイムゾーンの指定が必要な場合追加
# TZ: Asia/Tokyo
php-tmp:
build: .
volumes:
# PHPファイル実行用
- .:/usr/share/nginx/html
nginx-tmp:
image: nginx
restart: always
volumes:
# php-fpm 設定用
- ./default.conf:/etc/nginx/conf.d/default.conf
# 作業ディレクトリのPHPファイル以外のファイルを表示させたい場合追加
# (注: この例の構成だとdocker-compose.ymlなども見える状態になります)
# - .:/usr/share/nginx/html
ports:
- "8080:80"
# DBデータをブラウザ上から確認したい場合追加 (http://localhost:8888 サーバ: mysql-tmp, ユーザ名: root, パスワード: pass)
# adminer:
# image: adminer
# restart: always
# ports:
# - "8888:8080"
FROM php:fpm
RUN docker-php-ext-install pdo_mysql
server {
root /usr/share/nginx/html;
index index.php;
location ~ \.php$ {
# PHPのサービス名を指定 (この例ではphp-tmp)
fastcgi_pass php-tmp:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
<?php
echo 'PHP: ' . PHP_VERSION . '<br>';
// ホストはMySQLのサービス名を指定 (この例ではmysql-tmp)
$pdo = new PDO('mysql:host=mysql-tmp', 'root', 'pass');
echo "MySQL: {$pdo->query('SELECT VERSION()')->fetchColumn()}";
// 出力例
// PHP: 8.2.1
// MySQL: 8.0.31
# 実行 (-d付きでも可)
docker compose up
# 停止・削除
# docker compose down