$ git branch develop
$ git branch
develop
* master
$ git checkout develop
$ git add .
$ git commit -m “develop branch”
$ git push ${CODECOMMIT_REPO_URL}
なるほど。
次はbuidspec.ymlとCodeBuildだな。大分前進した気がする。
ソフトウェアエンジニアの技術ブログ:Software engineer tech blog
随机应变 ABCD: Always Be Coding and … : хороший
$ git branch develop
$ git branch
develop
* master
$ git checkout develop
$ git add .
$ git commit -m “develop branch”
$ git push ${CODECOMMIT_REPO_URL}
なるほど。
次はbuidspec.ymlとCodeBuildだな。大分前進した気がする。
$ 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
なるほどー
$ 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-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:
$ 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が何を見ているかなどが明確になった。
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
$ 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
中継役としてリバースプロキシが間に立ってリクエストを受け、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
なるほどー
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で連携することなども出来るのか
結構面白い
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イメージが再作成される