[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イメージが再作成される

[docker] 基本を学習する

$ sudo docker pull httpd

docker engineがアクセスを受けたポート番号をもとに、受信対象のコンテナが待ち受けているポート番号に通信を送る
$ sudo docker run -p 8080:80 -d httpd

nginxのリバースプロキシを使って外部からのアクセスをnginxが一次受けし、対応するapacheに振り分ける方法がよく使われる
$ sudo docker run -v /home/vagrant/dev/docker/basic/webcontents/:/usr/local/apache2/htdocs/ -p 8080:80 -d httpd

### データボリュームを操作
$ sudo docker volume create –name=datavolume
$ sudo docker volume ls
$ sudo docker run -it -v datavolume:/tmp/ ubuntu /bin/bash
root@e428992c764c:/# touch /tmp/data.txt
$ sudo docker rm e428992c764c
$ sudo docker run -it -v datavolume:/tmp/ ubuntu /bin/bash
root@8f091764ad1d:/# ls /tmp/
data.txt

### データボリュームコンテナ
$ sudo docker volume create –name=datavolume
$ sudo docker run –name=data-container -v datavolue:/tmp ubuntu
$ sudo docker run –volumes-from data-container -it ubuntu /bin/bash

なるほど、コンテナをボリュームとしてattachする方法があるのか
とはいえ、頭の中はCI/CDのところで一杯だが…

[docker] container基礎

$ sudo docker run -it –name=ping_in_ubuntu ubuntu /bin/bash
# ping localhost
bash: ping: command not found
# apt update
# apt install iputils-ping
# ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.

インストールした後は削除してコンテナサイズを小さくする
# apt clean
# rm -rf /var/lib/apt/lists/*

### アタッチとデタッチ
アタッチはコンテナを前面で動かし、デタッチはバックグラウンドで動かす
ctl + p, clt + q でデタッチすることができる
$ sudo docker attach 22b3765372ae

### コンテナをイメージ化
$ sudo docker commit 22b3765372ae ping_in_ubuntu
$ sudo docker images;
$ sudo docker tag ping_in_ubuntu:latest ping_in_ubuntu:Ver.1.00

### docker saveとdocker export
docker saveはベースイメージと各レイヤー情報をそのままtarファイルとして保存
docker exportは差分のレイヤー情報は持たずに最終的なコンテナの内部構成をtarファイルにする

LAMP環境を構築してexportしてレイヤーを作るなどはよくある
$ sudo docker save ping_in_ubuntu:latest > ping_save.tar
$ sudo docker export 22b3765372ae > ping_export.tar
$ sudo docker rmi ping_in_ubuntu:latest ping_in_ubuntu:Ver.1.00
$ sudo docker load < ping_save.tar $ sudo docker import ping_export.tar なるほど、やればやるほど周辺知識は付いてくるな

[Docker] docker-compose基礎

コンテナ、ネットワーク、ボリュームなどのコマンドをまとめて定義ファイルを書く 、イメージはdockerfile
docker-compose up: 定義ファイルに書かれた内容に従ってイメージをダウンロードしたり、コンテナを作成起動したりする
docker-compose down: コンテナとネットワークを停止・削除、停止のみの場合はstopコマンド

version: "3"

services:
  apa000ex2:
    image: httpd
    ports:
      - 8080:80
    restart: always
version: "3"

services:
  wordpress000ex12:
    depends_on:
      - mysql000ex11
    image: wordpress
    networks:
      - wordpress000net1
    ports:
      - 8085:80
    restart: always
    environment:
      WORDPRESS_DB_HOST=mysql000ex11
      WORDPRESS_DB_NAME=wordpress000db
      WORDPRESS_DB_USER=wordpress000kun
      WORDPRESS_DB_PASSWORD=wkunpass

services, networks, volumesについて定義する
servicesはコンテナのこと
restartはコンテナが停止した時の再試行ポリシー、no, always, on-failure, unless-stoppedがある
depend_onは作る順番、連動して作成したか

version: "3"

services:
  mysql000ex11:
    image: mysql:5.7
    networks:
      - wordpress000net1
    volumes:
      - mysql000vol11:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: myrootpass
      MYSQL_DATABASE: wordpress000db
      MYSQL_USER: wordpress000kun
      MYSQL_PASSWORD: wkunpass
  wordpress000e12:
    depends_on:
      - mysql000ex11
    image: wordpress
    networks:
      - wordpress000net1
    volumes:
      - wordpress000vol12:/var/www/html
    ports:
      - 8085:80
    restart: always
    environment:
      WORDPRESS_DB_HOST: mysql000ex11
      WORDPRESS_DB_NAME: mysql000db
      WORDPRESS_DB_USER: mysql000kun
      WORDPRESS_DB_PASSWORD: wkunpass
networks:
  wordpress000net1:
volumes:
  mysql000vol11:
  wordpress000vol12:

ふむふむ やりながら慣れるしかないな

[docker] 複数コンテナを動かしてみる

wordpress: wordpress, apache, php, mysql

$ sudo docker network create wordpress000net1
$ sudo docker run –name mysql000x11 -dit –net=wordpress000net1 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress000db -e MYSQL_USER=wordpress000kun -e MYSQL_PASSWORD=wkunpass mysql –character-set-server=utf8mb4 –collation-server=utf8mb4_unicode_ci –default-authentication-plugin=mysql_native_password
$ sudo docker run –name mysql000x12 -dit –net=wordpress000net1 -p 8085:80 -e WORDPRESS_DB_HOST=mysql000ex11 -e WORDPRESS_DB_NAME=wordpress000db -e WORDPRESS_DB_USER=wordpress000kun -e WORDPRESS_DB_PASSWORD=wkunpass wordpress

うむ、Wordpressは少し慣れた感がある

[Docker基礎] 基本コマンド

$ sudo docker run –name apa000ex1 -d httpd
$ sudo docker ps
$ sudo docker stop apa000ex1
$ sudo docker rm apa000ex1

### apache
apacheは80ポートで待ち構えている
$ sudo docker run –name apa000ex2 -d -p 8080:80 httpd
$ sudo docker stop apa000ex2
$ sudo docker rm apa000ex2

うーん、apacheは少し慣れてきた。

[Docker] ECRで環境変数を使用する

Dockerfile

FROM php:7.0-apache
COPY . /var/www/html
<?php
	echo getenv('HOGE');

### build
$ sudo docker build -t envhoge .

### ECRへpush
$ aws ecr get-login-password –region ap-northeast-1 | sudo docker login –username AWS –password-stdin ******.dkr.ecr.ap-northeast-1.amazonaws.com
$ sudo docker tag envhoge:latest ******.dkr.ecr.ap-northeast-1.amazonaws.com/hpscript:latest
$ sudo docker push ******.dkr.ecr.ap-northeast-1.amazonaws.com/hpscript:latest

### ECS task definition
task definitionで環境変数を設定する
HOGE: “環境変数のテスト”

ENVIRONMENT VARIABLEにセットされていることを確認

### Serviceを起動
task definitionで定義した値が表示されていることを確認

なるほどー、環境変数を外だしすることができるのね…
実際にやってみると理解が違うな