ぽれいんのブログ

エンジニアになるために覚えたことを日記に付けます。

Docker-compose

はじめに

インフラエンジニア初学者のぽれいんと申します。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

porain.hatenablog.com

<参考>

Docker Compose を使う|初心者が絵で理解する Docker

《滅びの呪文》Docker Composeで作ったコンテナ、イメージ、ボリューム、ネットワークを一括完全消去する便利コマンド - Qiita

docker-compose.ymlの書き方について解説してみた - Qiita

docker-compose の書き方! 分かりやすいDockerFileとの違い | SHURA-SPOT

 

 

 

 

docker-compose

docker-composeとは複数のコンテナから成るサービスを自動的に構築、起動してくれる便利なツール。コンテナを複数用意するため、管理がしやすい。

・イメージ図

f:id:porain:20210904190736p:plain



docker-compose インストール

curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

 

docker-compose.ymlの書き方

・基本構文

version: "3"
services:
web:
container_name: web
build: ./web
ports:
- "80:80"
volumes:
- ./work:/work
db:
container_name: db
build: ./db
ports:
- "3306:3306"
volumes:
- ./work:/work

・基本構文の意味

version:                    #composeファイル形式の宣言

services:                   #サービス。これの下にサービスの名称を記入

container_name:      #コンテナの名称

build:                       #Dockerfileのあるディレクトリを指定してイメージをビルド

ports:                       #公開用のポートの指定

volumes:                  #作業フォルダの同期

・こういうのもあるよ

environment:           #環境変数の指定

restart:  always        # いつもコンテナの再起動を実施

depends_on            # サービス間の依存関係を指定

 

 

 

便利

今までの状態を元に戻す場合(破滅の呪文)
docker-compose down --rmi all --volumes --remove-orphans
docker rm `docker ps -f "status=exited" -q`

 

Dockerの基礎の基礎の基礎

はじめに

インフラエンジニア初学者のぽれいんと申します。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

porain.hatenablog.com

 

<参考記事>

Dockerfileとdocker buildコマンドでDockerイメージの作成:いまさら聞けないDocker入門(3)(1/2 ページ) - @IT

Dockerfileとdocker buildコマンドでDockerイメージの作成:いまさら聞けないDocker入門(3)(2/2 ページ) - @IT

 

 

 

 

コンテナ

コンテナは仮想基盤を提供する方式として、従来からのホストOS型、ハイパーバイザ型に加えてここ近年はコンテナ型と呼ばれるものが利用されるようになってきたそう。

メリット

  • 起動が速い
  • 同じ構成の環境を簡単に再現

デメリット

  • ホストとコンテナで異なるOSは使えない

 

使ってみる

dockerをインストール

 yum install docker

dockerを起動し、プロセスを確認

systemctl start docker
ps -efH | grep docker

自身の作業ディレクトリを作成し、作業ディレクトリに移動

mkdir /opt/porain
cd /opt/porain/

'dockertest'をindex.htmlにリダイレクト

echo 'dockertest' > index.html

Dockerfileを作成

Dockerfile…Dockerコンテナーの構成内容をまとめて記述するシンプルなテキスト形式のファイル

Dockerfileの記述方法

{命令} 用途
FROM 元となるDockerイメージの指定
MAINTAINER 作成者の情報
RUN コマンドの実行
ADD ファイル/ディレクトリの追加
CMD コンテナーの実行コマンド 1
ENTRYPOINT コンテナーの実行コマンド 2
WORKDIR 作業ディレクトリの指定
ENV 環境変数の指定
USER 実行ユーザーの指定
EXPOSE ポートのエクスポート
VOLUME ボリュームのマウント
vi Dockerfile
###以下を記入
--------------------------
FROM nginx
EXPOSE 80
COPY index.html /usr/share/nginx/html
CMD nginx -g "daemon off;"
--------------------------

my_nginxという名前でDockerコンテナーの起動、構成、Dockerイメージの作成
まで一気に実行

docker build . -t my_nginx

Dockerイメージ一覧を確認

docker images

Docerコンテナを起動

docker run -d -p 80:80 --name web my_nginx

Dockerコンテナ一覧を確認

docker ps

 

以上

 

リダイレクト

はじめに

インフラエンジニア初学者のぽれいんと申します。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

porain.hatenablog.com

<参考記事>

初心者向け!Linux操作技術~標準入出力とリダイレクト~ | KENスクールブログ

Bashの入出力リダイレクトまとめ - Qiita

 

 

 

 

本日のやりたいこと

本日は、昨日、「シェルスクリプト内にログをリダイレクトさせて」と言われた際に、

「????」となったので、リダイレクト関連をこちらにまとめようと思います。

 

リダイレクト

リダイレクト記号(リダイレクション演算子)を使用することで入出力先を変更することができます。

基本的な書式

コマンド > /etc/file     /etc/fileに上書きして書き込む  
コマンド >> /etc/file     /etc/fileに書き足す
コマンド < /etc/file     コマンドが/etc/fileの内容を受け取る
コマンド 2> /etc/file エラーを/etc/fileに上書きして書き込む
コマンド > /etc/file 2>&1 エラーの出力先を標準出力と同じにする

使用例:シェルが実行されたら、test.logにechoコマンドがリダイレクトされる

# vi /home/user/test.sh
------------------------------------------
#!bin/bash

echo "シェルは実行されました!" >> /home/user/test.log
------------------------------------------

# sh /home/user/test.sh

# cat /home/user/test.log
シェルは実行されました!

やりたかったことはできた!

リダイレクトをするには">"の記号を使う!!

これはもう忘れない!!

またリダイレクト関連でまとめることはこちらに書き込みます!

 

以上!!!!!!!

 

 

AWS ~VPC内でのインスタンス作成~

はじめに

インフラエンジニア初学者のぽれいんと申します。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

porain.hatenablog.com

<参考>

[初心者向け]VPC作成からEC2インスタンス起動までを構成図見ながらやってみる(その1) | DevelopersIO

リージョンとは | クラウド・データセンター用語集/IDCフロンティア

パブリックサブネットとプライベートサブネットの違いとは? | Tech Dive

 

本日のやりたいこと

<構成図>

f:id:porain:20210822150828p:plain

web3層構造

 

リージョンを選択

自分のインスタンスをどこに作るかを考えた際に、まず始めのグループ分けはリージョンです。リージョンとは、地理的に近い「ゾーン」をグループ化したものであり、リージョンごとに完全に独立しています。そのため、違うリージョン内でVPCを作成したり、サブネットを構成することはできません。

VPCを作成

次にVPCを作成します。VPCを使用することで仮想ネットワーク内でAWSリソース同士を通信することができます。仮想ネットワーク内は他のアカウントとは切り離されたプライベートな空間なためプライベートIPアドレスを使用します。

サブネットを作成

続いてVPC内にサブネットを作成します。サブネットにより、アベイラビリティゾーンの区別を行うことができます。これにより、1つのアベイラビリティゾーンが災害で停止してもシステム全体としては止まらないようにできます。

パブリックサブネット

インターネットゲートウェイ繋がっているサブネット領域

プライベートサブネット

インターネットゲートウェイ繋がっていないサブネット領域

インターネットゲートウェイ

プライベートな空間からグローバルな空間に繋がる道のことです。これがないとグローバルIPアドレスが付加できません。

 

 

 

 

clamAVの構築

はじめに

インフラエンジニア初学者のぽれいんと申します。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

porain.hatenablog.com

<参考記事>

Clam AntiVirus を AWS EC2 にインストールする - Qiita

Amazon Linux 2にClamAVをインストールする - Qiita

オープンソースのアンチウイルスソフトウェア、ClamAVをCentOS 7にインストールする - Qiita

ClamAVの設定の巻 - PukiWiki

 

 

 

 

本日のやりたいこと

本日はウイルス攻撃を受けないようにするために対策をしたいということでウイルス対策用の無料ソフトである”clamAV”をインストールして実際に使ってみよー!

と思っております!

 

clamAVについて

clamAVオープンソースアンチウイルスソフトウェア。会員登録等も必要なく、少し設定をいじれば利用することができる。ただ、使用するメモリがかなり大きく、EC2のインスタンスタイプはt2.microではメモリ不足とのエラーが発生するがt2.mediumの使用により、利用可能になった。

 

clamAVのインストール

rootユーザになる

sudo su -

EPELリポジトリを有効にしてリポジトリをインストール

amazon-linux-extras install -y epel
yum install -y clamav clamav-update clamd

コピーを作成しfreshclam.confを編集

cp /etc/freshclam.conf /etc/freshclam.conf.org
vi /etc/freshclam.conf
以下を追記
-----------------------------------------
#UpdateLogFile /var/log/freshclam.log
UpdateLogFile /var/log/freshclam.log
LogFileMaxSize 2M
LogTime yes
LogSyslog yes
LogRotate yes
-----------------------------------------

freshclamを実行(ウイルス定義の更新)

freshclam
以下のような表示が出ればOK
Fri Aug 20 09:23:36 2021 -> ClamAV update process started at Fri Aug 20 09:23:36 2021
Fri Aug 20 09:23:36 2021 -> daily database available for download (remote version: 26268)

コピーを作成しclamdの設定ファイルを編集

cp /etc/clamd.d/scan.conf /etc/clamd.d/scan.conf.org
vi /etc/clamd.d/scan.conf
1.以下のコメントアウト(#)を外す
-----------------------------------------
#LogFile /var/log/clamd.scan

LogFile /var/log/clamd.scan

#LocalSocket /run/clamd.scan/clamd.sock
      ↓
LocalSocket /run/clamd.scan/clamd.sock

#LocalSocketMode 660

LocalSocketMode 660

#ExcludePath ^/proc/
#ExcludePath ^/sys/

ExcludePath ^/proc/
ExcludePath ^/sys/
-----------------------------------------
2.以下にコメントアウト(#)を付ける
-----------------------------------------
User clamscan

#User clamscan
-----------------------------------------

自動起動を有効にしてclamdの起動

systemctl enable clamd@scan
systemctl start clamd@scan

※うまく起動できない場合

ログからエラーを確認
journalctl -u clamd@scan

ウイルススキャンのテスト

テスト用のウイルス(無害なウイルス)をダウンロード

cd /tmp
wget http://www.eicar.org/download/eicar.com
ls eicar.com

手動でウイルススキャンを実施

clamscan --infected --remove --recursive /tmp

eicar.comが削除されていることを確認

ls /tmp/eicar.com

 

 

以上!!!!!!!

 

Linux ソフトウェアインストール

はじめに

インフラエンジニア初学者のぽれいんと申します。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

 

porain.hatenablog.com

↑↑まだ見ていない方はこちらから↑↑

<参考>

yum|yum リポジトリの設定と追加

【 rpm 】コマンド(基礎編)――RPMパッケージをインストールする/アンインストールする:Linux基本コマンドTips(47) - @IT

Linuxにソフトウェアをインストールするには? | クロの思考ノート

[Linux]ファイルの圧縮、解凍方法 - Qiita

【Linuxコマンド】tarでアーカイブを作成・展開する方法 | 侍エンジニアブログ

 

 

 

本日のやりたいこと

本日は、ソフトウェアをインストールする際ってどうしたらいいんだ!?!?とパッと方法が思い浮かばなかったのでインストールの方法をまとめたいと思います!!

 

ソフトウェアインストール

yumリポジトリからインストール

必要なソフトウェアは公式リポジトリにそろっているがリポジトリは世界中にたくさんありそれぞれ配っているパッケージが違うそのため、リポジトリを追加することによってパッケージのバリエーションを増やすことができる。yumコマンドで追加できる。

yum install <パッケージ名>
・オプション
-y 全ての問い合わせに「yes」で応答したものとする

EPELリポジトリを追加する際

amazon-linux-extras install -y epel

上記コマンドを実行することでEPELを有効にすることができる

RPMファイルをダウンロード

リポジトリと違いパッケージマネージャは自動更新されない。

rpmコマンドを使用してインストールを行う。

インストール(追加)
rpm -ivh <rpmファイル>
・オプション
-i パッケージをインストール
-v パッケージを検査
-h 経過を表示
アンインストール(削除)
rpm -e <パッケージ名>
・オプション
-e パッケージをアンインストール(削除)
アップグレード(更新)
・既にインストール済のものをアップグレード
rpm -Fvh <rpmファイル>
・まだインストールしていないものをアップグレード
rpm -Uvh <rpmファイル>
・オプション
-F パッケージをアップグレード
-U 以前のバージョンがインストールされているときのみアップグレード
ステータス(状態)
rpm -qa
・既に存在するかの確認
rpm -qa | grep <確認したいパッケージ名>
・オプション
-q 問い合わせ
-a 一覧表示する

 

バイナリファイルをダウンロード

wgetコマンドでファイルのダウンロードを行う。ファイルの末尾にtar.gzがあるのでtarコマンドで解凍する。

wget https://xxxxxxx.xxx/latest.tar.gz
tar -xzvf latest.tar.gz
・オプション
-x アーカイブを展開
-z gzipの圧縮処理を行う
-v 圧縮・展開時に詳細を表示
-f アーカイブファイルを指定

 

以上!!!!!!

 

 

シェルスクリプトの基礎の基礎の基礎

はじめに

インフラエンジニア初学者のぽれいんと申します。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

porain.hatenablog.com

↑↑まだ見ていない方はこちらから↑↑

 <参考>

シェルスクリプトの基礎知識まとめ - Qiita

 

 

 

シェルの基礎知識

変数

変数は値を入れる箱。この変数には任意の名前をつけることができる。

# NO=suuji

変数に対しては代入という操作をすることでその値を変更できる。

※=の端にスペースを入れない(変数ではなく文字列として表示される)

# echo $NO
suuji

変数に格納されている「値」を参照する場合は”$変数名”と指定する。

この”$”(ダラー)が変数と認識させる魔法のマーク

変数名について

変数名には後でどのような変数名にしたかわからなくならないように、その内容がわかるような名前をつけると分かりやすい。

環境変数

変数にはシェル変数と環境変数の2種類がある。

シェル変数 → 実行したシェル内でのみ有効

環境変数  → シェルから呼び出したプロセスにも有効

通常はシェル変数として保存されるため環境変数として設定するためにはexportコマンドを実行する。

# export HENSU

環境変数printenvコマンドで確認できる

# printenv