20201120のGitに関する記事は9件です。

【AWS】CodeCommitにEC2とwindows端末の両方からgit pushしてみた

はじめに

最近、gitを使い始めたのですが作業環境によってgit pushのやり方が異なったのでまとめていきます。
今回は以下の2通りを紹介します。
(1)EC2からCodeCommitにgit clone → git pushを実施する
(2)windows端末からCodeCommitにgit clone → git pushを実施する

1-1.認証情報の作成

(1)サービス「IAM」→ アクセス管理の中ある「ユーザー」を選択します。
(2)CodeCommitへの認証情報を作成したいユーザを選択します。
  ※作成されていない場合は作成してください。
(3)「認証情報」タブの「AWS CodeCommit の HTTPS Git 認証情報」欄にある、
  「認証情報を生成」を選択します。
認証画面.PNG
(4)認証情報が生成されるので、「証明書のダウンロード」を選択すると認証情報が書かれた
  csvファイルがダウンロードされます。

1-2.CodeCommit リポジトリを作成

(1)サービス「CodeCommit」→「リポジトリを作成」を選択します。
(2)「リポジトリ名」を入力し(今回はgit_test)、「作成」を選択します。
(3)右上の「URLのクローン」タブ → 「HTTPSのクローン」を選択し、クローン用のURLをコピーして
  テキストなどにメモしておきましょう。URLは「https://**/git_test(リポジトリ名)」になるはずです。
tab.PNG

2-1.EC2でgit cloneする

(1)gitをインストールし、ディレクトリを作成します。
(2)git用のディレクトリでgit cloneをします。

sudo yum install git
mkdir git
cd git
git clone https://**/git_test(リポジトリ名)

(3)インストールしたcsvファイルに書いてある認証情報(UsernameとPassword)を入力すると以下のように
  cloneされていることが確認できます。
 ※Passwordはコピペしても見えません

[ec2-user@ip-<ip-addr> git]$ ll
total 0
drwxrwxr-x 5 ec2-user ec2-user 187 Nov 30 11:52 git_test

2-2.EC2でgit pushする

cloneしたディレクトリから適当なファイル(ec2_test.txt)を作成してgit pushしてみましょう。
git pushの際は認証情報を入力してください。

cd git_test  # cloneしたディレクトリに移動
echo "test" > ec2_test.txt  # 適当なファイルを作成
git add .
git commit -m "ec2_commit"
git push origin master

CodeCommitで確認すると想定通りファイルが作成されていることが確認できます。
git_result1.PNG

3-1.windows端末でgit cloneする

(1)windows端末にGit for WindowsとTortoiseGitをインストールします。
 インストールでは以下の記事を参考にさせて頂きました。
TortoiseGitの導入とGitLabへの接続方法
(2)適当な場所にgit用のディレクトリを作成します。
(3)作成したディレクトリをエクスプローラで開き、右クリック→「Git クローン(複製)」を選択します。
git_clone.PNG
(4)以下のような画面が出てくるので、URLの欄にクローン用のURLを入力して「OK」を選択します。
git_clone_2.PNG
(5)認証情報の入力を求められるので入力します。
(6)成功すると以下のようにディレクトリが作成されます。
result.PNG

3-2.windows端末でgit pushする

cloneしたディレクトリから適当なファイル(windows_test.txt)を作成してgit pushしてみましょう。
(1)適当なファイル(windows_test.txt)を作成します。
  ※この作業はEC2で作業した後に行っているので、ディレクトリにはEC2で作成したファイル(ec2_test.txt)もあります。
result_2.PNG
(2)エクスプローラ上で右クリック→「Git コミット(C)…」を選択します。
(3)以下の画面でメッセージを入れる & 作成したファイルにチェックをつけて、
  右下の「コミット」を選択します。
tor_git.PNG
(4)エクスプローラ上で右クリック→「TortoiseGit」→「プッシュ」を選択します。
(5)確認画面でそのまま「OK」を選択します。
(6)CodeCommitで確認すると想定通りファイルが作成されていることが確認できます。
git_result2.PNG

まとめ

今回は2通りの方法を紹介しましたが、ファイルの編集や他のアプリケーションとの連携の
しやすさを考えるとEC2にgit cloneする方が良いのではないかと考えています。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

OSのアップデート後にGitコマンドを打ったらエラーが出た!(自分用忘備録)

タイトル通りです。
macOS Catalinaにアップデートした後Gitコマンドしたらエラーが出た。

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

解決

xcode-select --install

追記

昔書いてた下書きを見つけたので、放流しました。
このままだと記事が短いので、何かあれば都度更新したい

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

一度削除してしまったgit submoduleを再度追加する

概要

ローカルリポジトリに追加しリモートにpushしたリポジトリ内のgit submoduleを諸事情で一度削除したが、再度追加しリモートにpushし直したいということがあった。
とりあえず、git submodule add で追加されたローカル上の.gitmodulesを消して、再度同コマンドで追加しようとしたら以下のようになった。

A git directory for 'リポジトリ名' is found locally with remote(s):
s  origin リポジトリURL
If you want to reuse this local git directory instead of cloning again from
  リポジトリURL
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.

解決方法

  1. .gitフォルダ内のmodulesフォルダを削除する
  2. 同じく.gitフォルダ内のconfigファイル内の[submodule]の行を消す
  3. 再度 git submodule add で追加し、コミット、pushする

無事追加されました!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Org-mode based development

Gitでこまめにcommitした方がいいのがわかってはいるけれど、
うまくcommitできないというかいちいちどうメッセージを打てばいいか分からなくなる
一方で、研究資料含めてorg-mode(+beamer export)でまとめる癖がついていたので、
README.mdをorg-modeで書いてみることに。
そういえば実験結果も一緒にcommitして仕舞えば後で見返せるな...

研究室サーバーにtrampでログインしておいて、
README.orgファイルに次の実装計画などを追加していく。
プログラム開発用にはVSCodeを使っているので(以前はPyCharmだったけど、機能が多すぎて重たいと感じていたので移行した)
ある程度まで書いたりTODOのタスクが一つ終了するたびにcommitして、
尚且つREADME.orgに記載していたタスクをsubtreeごとコピペしてcommit(magit)する
そうすると、メモをgit logに関連して見直せるし便利。
また、文章をいちいち書くのめんどくさくてcommitしていなかったという問題も解消される。

プログラムコードとして残る変更はいいんだけど、
環境構築系の後から見直してこれどうしたんだっけみたいなものも、
org-modeの方に参考にしたサイトとかのメモを取っておけば自然と問題が解消されるし、
README.org ファイルを変更したことを検出してくれるから、
自然とプロジェクトの進捗の段階に応じてcommitできる。

...magit便利...

Future Work

Org-modeのsubtreeみたいに、編集履歴というかcommitのlogもツリー上にする方法ないのかな...
いちいちbranch作るのは面倒だし...
logで見返すときだけでいいんだろうけど

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

gitでHTTPSを使ったときの認証情報を保存する方法

git config --global credential.helper store
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Git】.DS_Storeを無視する

マシンを変えてから、設定してなく、煩わしかった。
備忘録。

自分のマシンのgit で.DS_Storeを無視する。

・ファイル作成

$ touch .gitignore_global

・無視したいファイルを記述

$ vi .gitignore_global

iして、「.DS_Store」書いてescして、:wqして、Enter

・作成したファイルを適用

$ git config --global core.excludesfile ~/.gitignore_global
  • そのリポジトリだけで良いなら、「--local」

・確認

下記に、適用したファイルが入っていれば完了

core.excludesfile=

$ git config --global --list
~省略~
core.excludesfile=/Users/XXXX/.gitignore_global

あとがき

あと回さないで、やっときゃよかった〜〜!
素敵なGit生活をー!!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

コンテナとGithubを利用したWebシステム開発の効率化

はじめに

システムやアプリの開発をする際、Github上にリポジトリを作ってそこでソース管理することが多いが、実行環境がこれらのソースを直接的に見ていなかったり、開発環境はローカルで立てたりするため、手元では動いたが本番環境にアップロードすると失敗といった事が頻繁に起こっていた。
今回、ソースコードをGithub上に置き、そのソースコードを参照する様なWebサーバーコンテナができないかを試してみたので、本記事ではその内容をまとめる。

実行環境

【Docker導入環境】
  ・Ubuntu20.04 LTS(GCP上)
  ・docker19.03.13

【コンテナ環境】
  ・Image Ubuntu:20.04
  ・Apache2.4.41

試してみる事

docker上に2つのWebサーバー用コンテナを作成して、1つを本番用、もう1つを開発用とする。
本番用のコンテナはビルドする度に、GithubリポジトリのmainブランチからアプリコードをCloneする様にし、
開発用のコンテナはdevブランチからアプリコードをCloneするようにDockerfileを作成してみる。

手順

1.環境準備
2.Github上にリポジトリを作成
3.Apacheを起動させるまでのDockerfileを作成
4.Github上のコードを取得するDockerfileに修正

1.環境の準備

GCP上にVMインスタンスを作成
 ※イメージはUbuntu20.4 LTS

dockerのインストール
 ※【Dockerコンテナ内のUbuntuではsystemctlは使えない】の手順1を参考に。

2.Github上にリポジトリを作成

Github上で以下を実施する。

■Public用のリポジトリを作成 
 ※手順4のDockerfileの内容は、Publicリポジトリからクローンすることを前提としている。

■作成したリポジトリ内の直下に『App』フォルダを作成

■『App』フォルダ内にindex.htmlを作成
 ※中身は適当に記載

■開発用のブランチを切る
 ※手順4ではブランチ名は main(本番用)dev(開発用) を前提としている。

3.Apacheを起動させるまでのDockerfileを作成

DockerFile を作成する

$ sudo nano ./Dockerfile

※最初『DockerFile』というファイルを作成したが、"F" が大文字だったためビルドに失敗した。

Dockerfile
# ベースイメージの取得
FROM ubuntu:20.04

# メタデータの登録
LABEL maintainer="作成者の氏名"
LABEL version="1.0"
LABEL description="DockerFileのテスト Apacheサーバー起動"

# 必要パッケージのインストール
RUN apt update
RUN apt install -y tzdata
RUN apt install -y apache2

# ポート開放
EXPOSE 80

CMD ["apachectl", "-D", "FOREGROUND"]

ビルドしてイメージを作成

$ docker image build -t websys:production ./

 ※今回、DockerFileはカレントディレクトリに作成しているためパス部分が ./ となっている。

イメージの確認

$ docker image ls

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
websys              production          5e35969b988e        15 seconds ago      67.3MB
ubuntu              18.10               9dc19675e327        16 months ago       67.3MB

上記のイメージを使ってコンテナ作成

$ docker container run -it -d -p 8080:80 --name ap1_server websys:production

以下のURLにアクセスして初期画面が開かれればOK!

http://[VMの外部IP(グローバルIPアドレス)]:8080/

4.Github上のコードを取得するDockerfileに作り直し

Github上にmainブランチとdevブランチがある前提で、本番環境はmainブランチからソースコードをクローンする様にし、開発環境はdevブランチからソースをクローンする様に作り直し。

本番環境、開発環境はクローン対象が違うため、それぞれDockerfileを用意する。

まずはディレクトリ作成

$ sudo mkdir ./main
$ sudo mkdir ./dev

ビルド時に反映させるサイトコンフィグの情報を作成

■本番環境用

$ sudo nano ./main/main_site.conf
main_site.conf
# Githubのリポジトリの階層構想により、DocumentoRootの場所は調整。

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/main/App
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

■開発環境用

$ sudo nano ./dev/dev_site.conf
dev_site.conf
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/dev/App
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

DockerFile を作成し直し
 ※手順3のDockerfileは破棄してしまってOK。

■本番環境用のDockerfileを作成

$ sudo nano ./main/Dockerfile
Dockerfile
# ベースイメージの取得
FROM ubuntu:20.04

# メタデータの登録
LABEL maintainer="作成者の氏名"
LABEL version="2.0"
LABEL description="DockerFileのテスト Apacheサーバー起動"

# 必要パッケージのインストール
RUN apt update
RUN apt install -y tzdata
RUN apt install -y apache2
RUN apt install -y git

# 本番環境用開のサイト構築(この部分が開発環境とは異なる!)
ADD ./main_site.conf /etc/apache2/sites-available/
RUN git clone --depth 1 -b main https://github.com/Smiler5617/test_websys.git /var/www/html/main
RUN a2dissite 000-default
RUN a2ensite main_site

# ポート開放
EXPOSE 80

CMD ["apachectl", "-D", "FOREGROUND"]

■開発環境用のDockerfileを作成

$ sudo nano ./dev/Dockerfile
Dockerfile
# ベースイメージの取得
FROM ubuntu:20.04

# メタデータの登録
LABEL maintainer="作成者の氏名"
LABEL version="2.0"
LABEL description="DockerFileのテスト Apacheサーバー起動"

# 必要パッケージのインストール
RUN apt update
RUN apt install -y tzdata
RUN apt install -y apache2
RUN apt install -y git

# 開発環境用のサイト構築(この部分が本番環境とは異なる!)
ADD ./dev_site.conf /etc/apache2/sites-available/
RUN git clone --depth 1 -b dev https://github.com/Smiler5617/test_websys.git /var/www/html/dev
RUN a2dissite 000-default
RUN a2ensite dev_site

# ポート開放
EXPOSE 80

CMD ["apachectl", "-D", "FOREGROUND"]

それぞれのDockerfileをビルド

$ docker image build -t websys:main ./main/
$ docker image build -t websys:dev ./dev/

イメージの確認

$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
websys              dev                 cee2d11ec02f        37 seconds ago      264MB
websys              main                7ac716953021        6 minutes ago       264MB
ubuntu              20.04               d70eaf7277ea        3 weeks ago         72.9MB

イメージよりコンテナ作成
 ※ポートのマッピングは本番環境と開発環境で変える。

$ docker container run -it -d -p 8080:80 --name ap_server websys:main
$ docker container run -it -d -p 8081:80 --name dev_ap_server websys:dev

ちゃんと起動できているか確認
 本番環境:http://[VMの外部IP(グローバルIPアドレス)]:8080/
 開発環境:http://[VMの外部IP(グローバルIPアドレス)]:8081/
 

試しにdevブランチでindex.htmlに変更を加えてimageを作り直したら、ちゃんと反映されているので今回やってみたかった事はできた。
 ※DockerfileのRUNコマンドの中でgit cloneの記述をしているので、イメージの作成タイミングでないとクローンをし直せない。

おまけ

上記にも記載した通り、ちょっとした修正でもイメージを作り直す必要があるので、ここら辺をもう少し簡易にできないのか試してみた。

方法としてはstartup.sh を作成して、そこの中で『git clone』と『Apacheの起動』をさせる命令を書く。そしてDokcerfileのCMDコマンドではstartup.shを実行させるだけ。

startup.shの作成

(本番環境用)
$ sudo nano ./main/startup.sh
startup.sh(本番環境用)
git clone --depth 1 -b main https://github.com/Smiler5617/test_websys.git /var/www/html/main
apachectl -D FOREGROUND
(開発環境用)
$ sudo nano ./dev/startup.sh
startup.sh(開発環境用)
git clone --depth 1 -b dev https://github.com/Smiler5617/test_websys.git /var/www/html/dev
apachectl -D FOREGROUND

Dockerfileの作成

Dockerfile(本番環境用)
# ベースイメージの取得
FROM ubuntu:20.04

# メタデータの登録
LABEL maintainer="作成者の氏名"
LABEL version="3.0"
LABEL description="DockerFileのテスト Apacheサーバー起動"

# 必要パッケージのインストール
RUN apt update
RUN apt install -y tzdata
RUN apt install -y apache2
RUN apt install -y git

# 必要ファイルを入れる
ADD ./main_site.conf /etc/apache2/sites-available/
ADD ./startup.sh /etc/apache2/

# デフォルトサイトからの切り替え
RUN a2dissite 000-default
RUN a2ensite main_site

# ポート開放
EXPOSE 80

# イメージからコンテナを作成するタイミングでシェルを実行
CMD ["bash", "/etc/apache2/startup.sh "]
Dockerfile(開発環境用)
# ベースイメージの取得
FROM ubuntu:20.04

# メタデータの登録
LABEL maintainer="作成者の氏名"
LABEL version="3.0"
LABEL description="DockerFileのテスト Apacheサーバー起動"

# 必要パッケージのインストール
RUN apt update
RUN apt install -y tzdata
RUN apt install -y apache2
RUN apt install -y git

# 必要ファイルを入れる
ADD ./dev_site.conf /etc/apache2/sites-available/
ADD ./startup.sh /etc/apache2/

# デフォルトサイトからの切り替え
RUN a2dissite 000-default
RUN a2ensite dev_site

# ポート開放
EXPOSE 80

# イメージからコンテナを作成するタイミングでシェルを実行
CMD ["bash", "/etc/apache2/startup.sh "]

ビルドしてイメージ作成

$ docker image build -t websys:main ./main/
$ docker image build -t websys:dev ./dev/

イメージよりコンテナ作成

$ docker container run -it -d -p 8080:80 --name ap_server websys:main
$ docker container run -it -d -p 8081:80 --name dev_ap_server websys:dev

この改良により、わざわざイメージから作り直さずにコンテナだけ作成し直せばソースコードの更新ができるようになった。

以上!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

コンテナとGitを利用したWebシステム開発の効率化

はじめに

システムやアプリの開発をする際、Github上にリポジトリを作ってそこでソース管理することが多いが、実行環境がこれらのソースを直接的に見ていなかったり、開発環境はローカルで立てたりするため、手元では動いたが本番環境にアップロードすると失敗といった事が頻繁に起こっていた。
今回、ソースコードをGithub上に置き、そのソースコードを参照する様なWebサーバーコンテナができないかを試してみたので、本記事ではその内容をまとめる。

実行環境

【Docker導入環境】
  ・Ubuntu20.04 LTS(GCP上)
  ・docker19.03.13

【コンテナ環境】
  ・Image Ubuntu:20.04
  ・Apache2.4.41

試してみる事

docker上に2つのWebサーバー用コンテナを作成して、1つを本番用、もう1つを開発用とする。
本番用のコンテナはビルドする度に、GithubリポジトリのmainブランチからアプリコードをCloneする様にし、
開発用のコンテナはdevブランチからアプリコードをCloneするようにDockerfileを作成してみる。

手順

1.環境準備
2.Github上にリポジトリを作成
3.Apacheを起動させるまでのDockerfileを作成
4.Github上のコードを取得するDockerfileに修正

1.環境の準備

GCP上にVMインスタンスを作成
 ※イメージはUbuntu20.4 LTS

dockerのインストール
 ※【Dockerコンテナ内のUbuntuではsystemctlは使えない】の手順1を参考に。

2.Github上にリポジトリを作成

Github上で以下を実施する。

■Public用のリポジトリを作成 
 ※手順4のDockerfileの内容は、Publicリポジトリからクローンすることを前提としている。

■作成したリポジトリ内の直下に『App』フォルダを作成

■『App』フォルダ内にindex.htmlを作成
 ※中身は適当に記載

■開発用のブランチを切る
 ※手順4ではブランチ名は main(本番用)dev(開発用) を前提としている。

3.Apacheを起動させるまでのDockerfileを作成

DockerFile を作成する

$ sudo nano ./Dockerfile

※最初『DockerFile』というファイルを作成したが、"F" が大文字だったためビルドに失敗した。

Dockerfile
# ベースイメージの取得
FROM ubuntu:20.04

# メタデータの登録
LABEL maintainer="作成者の氏名"
LABEL version="1.0"
LABEL description="DockerFileのテスト Apacheサーバー起動"

# 必要パッケージのインストール
RUN apt update
RUN apt install -y tzdata
RUN apt install -y apache2

# ポート開放
EXPOSE 80

CMD ["apachectl", "-D", "FOREGROUND"]

ビルドしてイメージを作成

$ docker image build -t websys:production ./

 ※今回、DockerFileはカレントディレクトリに作成しているためパス部分が ./ となっている。

イメージの確認

$ docker image ls

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
websys              production          5e35969b988e        15 seconds ago      67.3MB
ubuntu              18.10               9dc19675e327        16 months ago       67.3MB

上記のイメージを使ってコンテナ作成

$ docker container run -it -d -p 8080:80 --name ap1_server websys:production

以下のURLにアクセスして初期画面が開かれればOK!

http://[VMの外部IP(グローバルIPアドレス)]:8080/

4.Github上のコードを取得するDockerfileに作り直し

Github上にmainブランチとdevブランチがある前提で、本番環境はmainブランチからソースコードをクローンする様にし、開発環境はdevブランチからソースをクローンする様に作り直し。

本番環境、開発環境はクローン対象が違うため、それぞれDockerfileを用意する。

まずはディレクトリ作成

$ sudo mkdir ./main
$ sudo mkdir ./dev

ビルド時に反映させるサイトコンフィグの情報を作成

■本番環境用

$ sudo nano ./main/main_site.conf
main_site.conf
# Githubのリポジトリの階層構想により、DocumentoRootの場所は調整。

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/main/App
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

■開発環境用

$ sudo nano ./dev/dev_site.conf
dev_site.conf
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/dev/App
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

DockerFile を作成し直し
 ※手順3のDockerfileは破棄してしまってOK。

■本番環境用のDockerfileを作成

$ sudo nano ./main/Dockerfile
Dockerfile
# ベースイメージの取得
FROM ubuntu:20.04

# メタデータの登録
LABEL maintainer="作成者の氏名"
LABEL version="2.0"
LABEL description="DockerFileのテスト Apacheサーバー起動"

# 必要パッケージのインストール
RUN apt update
RUN apt install -y tzdata
RUN apt install -y apache2
RUN apt install -y git

# 本番環境用のサイト構築(この部分が開発環境とは異なる!)
COPY ./main_site.conf /etc/apache2/sites-available/
RUN git clone --depth 1 -b main https://github.com/Smiler5617/test_websys.git /var/www/html/main
RUN a2dissite 000-default
RUN a2ensite main_site

# ポート開放
EXPOSE 80

CMD ["apachectl", "-D", "FOREGROUND"]

■開発環境用のDockerfileを作成

$ sudo nano ./dev/Dockerfile
Dockerfile
# ベースイメージの取得
FROM ubuntu:20.04

# メタデータの登録
LABEL maintainer="作成者の氏名"
LABEL version="2.0"
LABEL description="DockerFileのテスト Apacheサーバー起動"

# 必要パッケージのインストール
RUN apt update
RUN apt install -y tzdata
RUN apt install -y apache2
RUN apt install -y git

# 開発環境用のサイト構築(この部分が本番環境とは異なる!)
COPY ./dev_site.conf /etc/apache2/sites-available/
RUN git clone --depth 1 -b dev https://github.com/Smiler5617/test_websys.git /var/www/html/dev
RUN a2dissite 000-default
RUN a2ensite dev_site

# ポート開放
EXPOSE 80

CMD ["apachectl", "-D", "FOREGROUND"]

それぞれのDockerfileをビルド

$ docker image build -t websys:main ./main/
$ docker image build -t websys:dev ./dev/

イメージの確認

$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
websys              dev                 cee2d11ec02f        37 seconds ago      264MB
websys              main                7ac716953021        6 minutes ago       264MB
ubuntu              20.04               d70eaf7277ea        3 weeks ago         72.9MB

イメージよりコンテナ作成
 ※ポートのマッピングは本番環境と開発環境で変える。

$ docker container run -it -d -p 8080:80 --name ap_server websys:main
$ docker container run -it -d -p 8081:80 --name dev_ap_server websys:dev

ちゃんと起動できているか確認
 本番環境:http://[VMの外部IP(グローバルIPアドレス)]:8080/
 開発環境:http://[VMの外部IP(グローバルIPアドレス)]:8081/
 

試しにdevブランチでindex.htmlに変更を加えてimageを作り直したら、ちゃんと反映されているので今回やってみたかった事はできた。
 ※DockerfileのRUNコマンドの中でgit cloneの記述をしているので、イメージの作成タイミングでないとクローンをし直せない。

おまけ

上記にも記載した通り、ちょっとしたコードの修正でもイメージを作り直す必要があるので、ここら辺をもう少し簡易にできないのか試してみた。

方法としてはstartup.sh を作成して、そこの中で『git clone』と『Apacheの起動』をさせる命令を書く。そしてDokcerfileのCMDコマンドではstartup.shを実行させるだけ。

startup.shの作成

(本番環境用)
$ sudo nano ./main/startup.sh
startup.sh(本番環境用)
git clone --depth 1 -b main https://github.com/Smiler5617/test_websys.git /var/www/html/main
apachectl -D FOREGROUND
(開発環境用)
$ sudo nano ./dev/startup.sh
startup.sh(開発環境用)
git clone --depth 1 -b dev https://github.com/Smiler5617/test_websys.git /var/www/html/dev
apachectl -D FOREGROUND

Dockerfileの作成

Dockerfile(本番環境用)
# ベースイメージの取得
FROM ubuntu:20.04

# メタデータの登録
LABEL maintainer="作成者の氏名"
LABEL version="3.0"
LABEL description="DockerFileのテスト Apacheサーバー起動"

# 必要パッケージのインストール
RUN apt update
RUN apt install -y tzdata
RUN apt install -y apache2
RUN apt install -y git

# 必要ファイルを入れる
COPY ./main_site.conf /etc/apache2/sites-available/
COPY ./startup.sh /etc/apache2/

# デフォルトサイトからの切り替え
RUN a2dissite 000-default
RUN a2ensite main_site

# ポート開放
EXPOSE 80

# イメージからコンテナを作成するタイミングでシェルを実行
CMD ["bash", "/etc/apache2/startup.sh "]
Dockerfile(開発環境用)
# ベースイメージの取得
FROM ubuntu:20.04

# メタデータの登録
LABEL maintainer="作成者の氏名"
LABEL version="3.0"
LABEL description="DockerFileのテスト Apacheサーバー起動"

# 必要パッケージのインストール
RUN apt update
RUN apt install -y tzdata
RUN apt install -y apache2
RUN apt install -y git

# 必要ファイルを入れる
COPY ./dev_site.conf /etc/apache2/sites-available/
COPY ./startup.sh /etc/apache2/

# デフォルトサイトからの切り替え
RUN a2dissite 000-default
RUN a2ensite dev_site

# ポート開放
EXPOSE 80

# イメージからコンテナを作成するタイミングでシェルを実行
CMD ["bash", "/etc/apache2/startup.sh "]

ビルドしてイメージ作成

$ docker image build -t websys:main ./main/
$ docker image build -t websys:dev ./dev/

イメージよりコンテナ作成

$ docker container run -it -d -p 8080:80 --name ap_server websys:main
$ docker container run -it -d -p 8081:80 --name dev_ap_server websys:dev

この改良により、わざわざイメージから作り直さずにコンテナだけ作成し直せばソースコードの更新ができるようになった。

以上!

追伸

その後docker-composeも使ってみたので、その時の内容もメモとして残しています。
 【docker-composeとGitを利用したWebシステム開発の効率化】

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Git ケーススタディ集

Gitのケーススタディ集

ケースからGitの使い方を学ぶ

最近業務でGitのいろいろの操作をする。たまに今までしたことない操作もして、時々間違えた操作することもある。事例からGitの使い方を学べば、捜査を間違えたとしても焦らず対応できると思い。ネットで何かないか探した。そんでこんなサイトにたどり着いた。
https://qiita.com/wariichi/items/61b5e56431a212c45b13

問題を解く感じでこの記事を読んでいこうかなと思います。
今まで知らなかった操作や、読んで方法を事例を解決するための操作を思いつかなかったときは、ここにメモとして残しておこうと思う。

修正、手直し系

過去のコミットのコメントを修正したい、また追加で修正を加える

----------------------------
直前のコミットを反映する場合
----------------------------
# 修正を反映するファイルを選択
$ git add hoge.txt

# 選択したファイルをコミット →ammendにより直前のコミットにaddした修正が追加される
$ git commit --amend

$ git commit --amend -a

-aオプションを使てする記述もあったけど、いったい何だろう?

----------------------------
直前のコミットでない場合
rebaseを使った方法
----------------------------

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む