Dockerイメージを作成してECSで動かす

Dockerイメージを作成してECSで動かします。 Dockerのおさらいとnginxイメージについて nginxのイメージに手を加えてカスタムイメージを作成します。 nginxのイメージをプルします。 $ docker pull nginx:1.23.1 nginxのコンテナを動かし、ブラウザからlocalhostにアクセスします。 nginxのデモページが表示されることを確認します。 $ docker run --rm -p 80:80 nginx -d オプションを付けるとバックグラウンドで動かすことができます。 $ docker run --rm -d -p 80:80 nginx docker logs コマンドでコンテナのログを確認することができます。 $ docker logs コンテナID 以下のコマンドでDockerイメージの中に入ることができます。 $ docker run --rm -it nginx /bin/sh カスタムイメージの作成 nginxのデモページは /usr/share/nginx/html にあります。 以下のような Dockerfile と index.html を同じディレクトリに作成します。 FROM nginx COPY index.html /usr/share/nginx/html/index.html <h1>Hello</h1> イメージをビルドします。 $ docker build . -t custom-nginx 作成したイメージが動くか確認します。 $ docker run --rm -p 80:80 custom-nginx ECRへイメージをプッシュする。 ECRでリポジトリを作ります。


Dockerビルドに秘密情報を使う

Dockerビルドに秘密情報を使う方法です。 Dockerビルド時にアクセスキーなどの秘密情報が必要な場合は --mount=type=secret を使用します。 --mount=type=secret を使用することで秘密情報をイメージの中に残さずにビルドすることができます。 FROM ubuntu RUN echo hello RUN --mount=type=secret,id=my-secret cat /run/secrets/my-secret > secret.txt CMD cat secret.txt docker build --secret id=my-secret,src=secret.txt -t swiswiswift:latest . docker run swiswiswift:latest


Springを使ってお問い合わせフォームを作るその2

Springを使ってお問い合わせフォームを作るその2です。 今回はDBまわりを作っていきます。 まずDockerを使ってMySQLサーバーを立ち上げます。 以下のような docker-compose.yml を作成します。 version: "3.8" services: mysql: image: mysql:8.0.20 container_name: swiswiswift-mysql environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: swiswiswift-db command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci ports: - 3306:3306 ターミナルなどで docker-compose.yml が存在するディレクトリに移動し、以下のコマンドで MySQL のコンテナを起動します。 docker-compose up -d mysql:8.0.20 という名前のイメージを使って swiswiswift-mysql という名前のコンテナ port 3306 で起動させます。 また docker-compose.yml に記載があるように、Root のパスワードは password です。 起動が完了したら以下のコマンドで MySQL にログインします。 mysql -u root -h 127.0.0.1 --port 3306 -p # password swiswiswift-db を選択します。 use swiswiswift-db お問い合わせフォームで入力する値は名前、Email、お問い合わせ内容なのでそれらを保存する contact テーブルを作成します。 create table contact( name varchar(255) not null, email varchar(255) not null, message varchar(1023) not null ); テーブルを作成したらお問い合わせ内容が入ることを確認します。


Dockerを使ってMySQLを練習する

Dockerを使ってMySQLを練習する方法です。 まず以下のような docker-compose.yml を作成します。 version: "3.7" services: mysql: image: mysql:8.0.20 container_name: swiswiswift-mysql environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: swiswiswift-db command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci ports: - 3306:3306 ターミナルなどで docker-compose.yml が存在するディレクトリに移動し、以下のコマンドで MySQL のコンテナを起動します。 docker-compose up -d mysql:8.0.20 という名前のイメージを使って swiswiswift-mysql という名前のコンテナ port 3306 で起動させます。 また docker-compose.yml に記載があるように、Root のパスワードは password です。 起動が完了したら以下のコマンドで MySQL にログインします。 docker exec -it swiswiswift-mysql mysql -u root -p # password ローカルに MySQL クライアントがインストールされている場合は以下のコマンドでも MySQL にログインできます。 mysql -u root -h 127.0.0.1 --port 3306 -p # password 以下のコマンドで起動したコンテナを削除することができます。


DockerのMySQLでdocker-entrypoint-initdb.dの完了を待つ

DockerのMySQLでdocker-entrypoint-initdb.dの完了を待つ方法です。 docker-compose up -d のタイミングで実行する sql, sh などが長いと立ち上がりに時間がかかり実行が遅くなります。 CIの時とかはそれだと困るので待つ方法のメモです。


Dockerで Alpineベースのコンテナに入る

Docker コンテナの中に入ってシェルを使いたい時ありますよね。 普通は以下のようなコマンドでコンテナの中に入るのですが、Alpine ベースの時は bash の代わりに ash を使って入ります。 $ docker run --rm -t -i centos:centos7 /bin/bash s $ docker run --rm -t -i alpine:latest /bin/ash 参考 Dockerコンテナのシェルの中に入る dockerでalpine linux ベースのcontainerに入って、shellを使いたいとき。


Dockerを使ってPostgreSQLを立て、テーブルを作成する。

Docker を使って PostgreSQL を立てる方法です。 開発環境を Docker をで立てて整備すると自分のローカル環境を汚さずに済むのでとても良いですよね。 postgres-Docker Hub 以下のコマンドで、ローカルの 5432ポートに postgres11 を立てることができ、kabigon というユーザーでログインすることができます。(パスワードはpassword) また pokemon というデータベースも同時に作られます。 $ docker run -d -p 5432:5432 -e POSTGRES_USER=kabigon -e POSTGRES_PASSWORD=password -e POSTGRES_DB=pokemon postgres:11 $ psql -h localhost -p 5432 -U kabigon -d pokemon ``` ログインができたら `\l` コマンドでデータベースの一覧を表示し、pokemon データベースが表示されていることを確認します。 また `docker-entrypoint-initdb.d` に `.sql` を置くと初期化時に実行してくれます。 初期テーブルなどを作りたい時に便利です。 `initdb` ディレクトリ の中に `setup.sql` を作成し、ディレクトリをマウントすることで、コンテナ初期化時に `.sql` が実行されます。 ```setup.sql create table pokemon ( id int8, name varchar ); create table pokemon_gym ( id int8, area varchar ); $ docker run -v $PWD/initdb:/docker-entrypoint-initdb.


SSH で入ることのできるDockerイメージ(CentOS7)

Ansibleの練習のため、SSHで入ることができるイメージが欲しくて書きました。 docker build -t ssh_centos7:latest . --no-cache docker run -d -p 2222:22 ssh_centos7:latest ssh-keygen -R [localhost]:2222 ssh -p 2222 kabigon@localhost


SSH で入ることのできるDockerイメージ(CentOS6)

Ansibleの練習のため、SSHで入ることができるイメージが欲しくて書きました。 $ docker build -t docker_ssh:latest . $ docker run -d -p 2222:22 docker_ssh:latest $ ssh -p 2222 kabigon@localhost