2023年2月20日月曜日

Docker覚書

Dockerのメモです。徐々に追加します。

Dockerのインストール


Windows、MacOS、Linuxに対応しているが、Windowsの場合はWindows 11 Proがおすすめ。HomeバージョンはWSLをインストールする必要があるなど手間がかかる。

Windowsの場合はDocker Desktopをインストールする。

Dockerのチュートリアル


「さくらのナレッジ」の「Docker入門」https://knowledge.sakura.ad.jp/13265/

Linuxへのインストールから始まるが、Windowsの場合はDocker Desktopをインストール。
インストール後はDocker Desktopは使わずにPower Shellでコマンド実行。

第六回で使うdocker-composeもDocker Desktopをインストールすれば使える。

第一回および第六回のWordpressは記載の手順ではブラウザからアクセスするとエラーが発生する。


Dockerオフィシャルの「クイックスタート Wordpress」の手順で正常動作する。


※MySQLにrootでログインできないのが原因?

正常動作するdocker-compose.yml (Dockerオフィシャルの「クイックスタート Wordpress」より)

version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:

Dockerコマンド


イメージを取得
> docker pull <イメージ名>:<タグ>

イメージ一覧
> docker images

コンテナをバックグランドで起動
> docker run -d --name <コンテナ名> -p <ホスト側のポート>:<コンテナのポート> <イメージ名>:<タグ>

コンテナ一覧
> docker ps -a

コンテナにログイン
> docker exec -it <コンテナ名> bash

ファイルコピー(ホスト→コンテナ内)
> docker cp <ホスト側のファイル> <コンテナ名>:<コンテナ内のコピー先ディレクトリ>

ファイルコピー(コンテナ内→ホスト)
> docker cp <コンテナ名>:<コンテナ内のコピー元ファイル> <ホスト側のコピー先ディレクトリ>

コンテナからDockerイメージ作成
> docker commit <コンテナ名> <作成するDockerイメージ名>

コンテナ停止
> docker stop <コンテナ名>

コンテナ削除
> docker rm <コンテナ名>

コンテナ一括削除
> docker rm $(docker ps -a -q)

イメージ削除
> docker rmi <コンテナ名>

イメージ一括削除
> docker rmi $(docker images -q)

Dockerfileのビルド
> cd <Dockerfileのあるディレクトリ> 
> docker build -t <イメージ名> .
※最後の「.」はカレントディレクトリ

ネットワーク作成
> docker network create <ネットワーク名>

ネットワーク一覧
> docker network ls

ネットワーク詳細
> docker network inspect <ネットワーク名>

ネットワーク削除
> docker network rm <ネットワーク名>

Docker Composeコマンド


コンテナを起動
> cd <docker-compose.ymlのあるディレクトリ>
> docker-compose up -d

コンテナ一覧
> docker-compose ps

コンテナ停止
> docker-compose stop

コンテナ削除
> docker-compose rm

停止、削除、ネットワーク削除
> docker-compose down

停止、削除、ネットワーク削除、イメージ削除
> docker-compose down --rmi all

 

Docker Composeを使ってLAMP環境を作る



docker-lamp/
├── docker-compose.yml
├── htdocs/
└── php/
    ├── Dockerfile
    └── php.ini
※php.iniは空のファイルを作っておく

docker-compose.yml


version: '3.7'

services:
  mysql:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 'password'

  phpmyadmin:
    depends_on:
      - mysql
    image: phpmyadmin/phpmyadmin
    environment:
      PMA_HOST: mysql
    restart: always
    ports:
      - "8080:80"

  php-apache:
    build: ./php
    volumes:
      - ./htdocs:/var/www/html
    restart: always
    ports:
      - "80:80"
    depends_on:
      - mysql

volumes:
    db_data: {}

php/Dockerfile


FROM php:7.3-apache
COPY ./php.ini /usr/local/etc/php/
RUN apt-get update \
  && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
  && docker-php-ext-install pdo_mysql mysqli mbstring gd iconv

コンテナ起動

> cd docker-lamp
> docker-compose build
> docker images
> docker-compose up -d

Apacheの確認


htdocs/index.html


<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <p>Hello World!!</p>
  </body>
</html>

ブラウザで確認

http://localhost/

PHPの確認


htdocs/info.php

<?php
phpinfo();
?>

ブラウザで確認 

http://localhost/info.php

MySQLの確認


> docker exec -it docker-lamp_mysql_1 bash

# mysql -u root -p

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.27    |
+-----------+
1 row in set (0.00 sec)

phpMyAdminの確認

ブラウザで確認

http://localhost:8080


コンテナ停止・終了


$ docker-compose stop
$ docker-compose down

データベースも含めて削除
$ docker-compose down --volumes

0 件のコメント:

コメントを投稿