githubのレポジトリをCodeCommitに複製する

$ aws –version
aws-cli/1.22.64 Python/3.8.10 Linux/5.4.0-109-generic botocore/1.24.9
$ git –version
git version 2.25.1

$ git init
$ git add .
$ git commit -m “first commit”
$ git remote add origin https://github.com/hpscript/cicd.git
$ git push -u origin master

### CodeCommit作成
$ GITHUB_ACCOUNT=hogehoge
$ REPO_NAME=fuga
$ GITHUB_REPO_URL=https://github.com/${GITHUB_ACCOUNT}/${REPO_NAME}.git

$ aws codecommit create-repository –repository-name ${REPO_NAME}

### 複製先のRepository情報を定義
$ CODECOMMIT_REGION=ap-northeast-1
$ CODECOMMIT_REPO_URL=https://git-codecommit.${CODECOMMIT_REGION}.amazonaws.com/v1/repos/${REPO_NAME}

### 認証情報ヘルパーの設定
$ git config –global credential.helper ‘!aws codecommit credential-helper $@’
$ git config –global credential.UseHttpPath true

### CodeCommitのRepositoryにpush
$ git push ${CODECOMMIT_REPO_URL} –all

なるほどー

[docker] nginxをリバースプロキシ

$ sudo docker run –rm -v /home/vagrant/dev/docker/basic:/tmp -it nginx /bin/bash
$ cp /etc/nginx/conf.d/default.conf /tmp/

$ sudo docker build -t rproxy-image .
$ sudo docker build -t web-image .

$ sudo docker network create web-network
$ sudo docker run –name=web-container –net=web-network -d web-image
$ sudo docker run –name=rproxy-container –net=web-network -p 8080:80 -d rproxy-image

うむ、OK

[docker] docker-compose.yml その2

docker-compose.yml

version: "2"
services:
  db-container:
    image: busybox
    volumes:
      - db-volume: /var/lib/mysql/

  mysql-container:
    image: mysql:8
    environment:
      - MYSQL_ROOT_PASSWORD=dbpass01
      - MYSQL_DATABASE=redmine
    command: --character-set-server-utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
    volumes_from:
      - db-container
    dpends_on:
      - db-container
    restart: always

  pma-container:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_HOST=mysql-container
      - PMA_USER=root
      - PMA_PASSWORD=dbpass01
    ports:
      - 8080:80
    depends_on:
      - mysql-container
    restart: always
  wp-container:
    image: wordpress
    environent:
      - WORDPRESS_DB_HOST=mysql-container
      - WORDPRESS_DB_USER=root
      - WORDPRESS_DB_PASSWORD=dbpass01
    ports:
      - 8080:80
    depends_on:
      - mysql-container
    restart: always

  rm-container:
    image: redmine
    environment:
      - REDMINE_DB_MYSQL=mysql-container
      - REDMINE_DB_USERNAME=root
      - REDMINE_DB_PASSWORD=dbpass01
    ports:
      - 3000:3000
    depends_on:
      - mysql-container
    restart: always

volumes:
  db-volume:

[docker] docker-composeとapache

$ pwd
/home/vagrant/dev/docker/basic

$ sudo docker run –rm -v /home/vagrant/dev/docker/basic/:/tmp/ -it httpd /bin/bash
$ cp /usr/local/apache2/conf/httpd.conf /tmp/

httpd.conf

    # CustomLog "logs/access_log" combined
    CustomLog "logs/access_log" combined
</IfModule>

$ echo “Hello World!” > index.html

docker-compose.yml

version: "2"
services:
  web-container:
    image: httpd
    volumes:
      - ./index.html:/usr/local/apache2/htdocs/index.html
      - ./httpd.conf:/usr/local/apache2/conf/httpd.conf
    ports:
      - 8080:80
    expose:
      - 80

バックグラウンドで指定する場合は -d をつける
$ sudo docker-compose up -d
http://192.168.56.10:8080/

$ sudo docker-compose exec web-container /bin/bash
# more /usr/local/apache2/logs/access_log
$ sudo docker-compose stop
$ sudo docker-compose rm

docker-comoseの停止や削除はdocker-compose.ymlで指示している
docker-composeでdockerfileで起動する場合は image: httpd としていたところを build: ./rproxy などとする

なるほど、buildとimageのところやdocker-compose.ymlが何を見ているかなどが明確になった。

[docker] docker-composeを始める

version: "2"
services:
  ub-test:
    image: ubuntu

$ sudo docker-compose up
$ sudo docker compose logs
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7d08f238d9f1 ubuntu “bash” About a minute ago Exited (0) About a minute ago basic_ub-test_1

version: "2"
services:
  ub-test:
    image: ubuntu
    tty: true
    stdin_open: true

    command: /bin/bash

$ sudo docker-compose run ub-test
root@dfbf7a227bd6:/# exit

[Docker] MySQLのコンテナ構築

$ sudo docker network create mysql-nw

データボリュームコンテナを作成する
データディレクトリは/var/lib/mysql/ とする
$ sudo docker run -v db-volume:/var/lib/mysql/ –name=db-container busybox

mysql/Dockerfile

FROM mysql:8

ENV MYSQL_ROOT_PASSWORD=dbpass01

CMD ["mysqld", \
"--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci",\
"--default-authentication-plugin=mysql_native_password"]

$ sudo docker build -t mysql-image .
※DockerfileのポートはEXPOSEで3306

$ sudo docker run –volumes-from=db-container –name=mysql-container –net=mysql-nw -d mysql-image
$ sudo docker exec -it mysql-container /bin/bash
root@ae32b7c17975:/# mysql -uroot -pdbpass01
mysql> status
————–
mysql Ver 8.0.28 for Linux on x86_64 (MySQL Community Server – GPL)

$ sudo docker run –rm –volumes-from db-container -it ubuntu /bin/bash
root@6a77206db029:/# ls -l /var/lib/mysql/

Dockerfile

#phpmyadminのイメージ取得
FROM phpmyadmin/phpmyadmin

ENV PMA_HOST=mysql-container \
	PMA_USER=root \
	PMA_PASSWORD=dbpass01

$ sudo docker build -t pma-image .
$ sudo docker run –net=mysql-nw –name=pma-container -p 8080:80 -d pma-image

[Docker] nginxをリバースプロキシにしたApache

中継役としてリバースプロキシが間に立ってリクエストを受け、Webサーバにデータを取りに行く仕組み
Webサーバに接続できるのがリバースプロキシに限定できることから、セキュリティ上の理由でよく使われる
nginxは大量アクセスを処理するのに強みがある
nginxはhtmlなど軽量なリクエストの処理に対応させ、PHPやデータベース処理などはApacheにリクエストを回して処理をする

$ sudo docker pull nginx
$ sudo docker run –rm -p 8080:80 -d nginx
$ sudo docker stop sad_edison

### nginxをリバースプロキシとしたApacheを作る
ホストOS側でポートを利用できるのは1つのポートにつき1つのコンテナのみ
nginxにホストOSの80番ポートを割り当てる

$ tree
.
├── rproxy
│   ├── Dockerfile
│   └── default.conf
└── web
├── Dockerfile
└── index.html

nginxには幾つかconfファイルがある
nginxのプロキシ部分のconfファイルは /etc/nginx/conf.d/default.conf

$ sudo docker run –rm -v /home/vagrant/dev/docker/basic/rproxy:/tmp -it nginx /bin/bash
$ cp /etc/nginx/conf.d/default.conf /tmp/
$ ls rproxy/
Dockerfile default.conf

rproxy/default.conf

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        proxy_pass http://web-container/;
    }

$ sudo docker build -t rproxy-image .

### httpdのDockerfile作成
$ echo “hello world” > index.html

Dockerfile

FROM httpd

COPY ./index.html /usr/local/apache2/htdocs/

EXPOSE 80

$ sudo docker build -t web-image .

### Docker上でnetworkを作成する
$ sudo docker network create web-network
$ sudo docker run –name=rproxy-container –net=web-network -p 8080:80 -d rproxy-image

なるほどー

[Docker] apache-logをvolumeに吐き出すコンテナ

dockerfile, httpd.conf, index.htmlを作る
httpd: apache
busybox: apache-log
volume: apache-volume

httpd.confは /usr/local/apache2/confにある

### httpd.confを取り出す
$ sudo docker run –rm -v /home/vagrant/dev/docker/basic/:/tmp/ -it httpd /bin/bash

httpd.confを編集します
L 先頭のコメント記号である「#」を削除して保存

    CustomLog "logs/access_log" combined

Dockerfile

FROM httpd

COPY ./index.html /usr/local/apache2/htdocs/

COPY ./httpd.conf /usr/local/apache2/conf/httpd.conf

EXPOSE 80

$ sudo docker build -t apache-image .
$ sudo docker run -v apachelog-volume:/usr/local/apache2/logs –name=apachelog-container busybox
$ sudo docker run –volumes-from apachelog-container -p 8080:80 -d –name=apache-container apache-image
$ sudo docker run –rm –volumes-from apachelog-container -it ubuntu /bin/bash
root@09bd68cd89e8:/# cd /usr/local/apache2/logs
root@09bd68cd89e8:/usr/local/apache2/logs# tail access_log

なるほど、httpd.confを編集できることはわかってたけど、複数のコンテナをvolumeで連携することなども出来るのか
結構面白い

[Docker] dockerを活用する

FROM ubuntu

RUN apt-get update && apt-get install -y iputils-ping

$ sudo docker build -t ping-image .
$ sudo docker run -it ping-image /bin/bash
root@14dd91924193:/# ping localhost

FROM ubuntu

RUN apt-get update && apt-get install -y iputils-ping

### Shell形式とExec形式
Shell(/bin/sh): RUN apt-get update
Exec形式: RUN [“/bin/sh”, “-c”, ” apt-get update”]

LABEL

LABEL imageversion=1.0 maintainer=sho\ asai

EXPOSE 80
ENV KEY VALUE

ENV WORDPRESS_DB_HOST=mysql-container \
WORDPRESS_DB_USER=root \
WORDPRESS_DB_PASSWORD=dbpass01

COPY & ADD

COPY "httpd.conf /usr/local/apache2/conf/httpd.conf"
COPY ["httpd.conf", "/usr/local/apache2/conf/httpd.conf"]

docker build -t ${imageName} . –no-cache=true
-> キャッシュを使わない
COPY/ADD命令以降はキャッシュを使わずに新kイメージが再作成される