0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWSでDocker環境のセットアップ

Posted at

はじめに

現場がAWSを使ってるのでそろそろVPSからAWSへの移行を考えている

AWS

AWSでLinuxを使えるようにするぞ

AmazonMachineImageの選択

現行ではとくに理由がない限りより性能のいいハードウェア仮想マシン (HVM)が使用されている
EC2ダッシュボード
image.png
image.png

インスタンスタイプの選択

t2.micro インスタンスタイプを選択します(デフォルト)
image.png

キーペアのダウンロード

キーペアをダウンロードしてインスタンスの作成
image.png

ダッシュボードの様子が変わった

「インスタンス(実行中)」をクリックして、パブリック IPv4 アドレスを確認しておく
image.png
image.png

ssh接続用設定ファイルを設定

ssh接続するときはおなじみのやつね。秘密鍵を保存するのと同じ要領でaws_keypairを保存し、HostNameはさっきのパブリック IPv4 アドレスで、IdentityFileにaws_keypairの場所を指定する。Userは固定みたい。
image.png

C/User/yoshi/.ssh/config
Host aws
  HostName 52.72.117.178
  IdentityFile ~/.ssh/aws_keypair.pem
  User centos

確認

PS D:\OneDrive\dev\Docker> ssh aws
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Sun May 23 10:13:07 2021 from 61.87.41.78
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Sun May 23 10:13:07 2021 from 61.87.41.78
[centos@ip-172-31-17-55 ~]$ cat /etc/redhat-release
  CentOS Linux release 8.2.2004 (Core)

image.png

AWSでのrootへの入り方

$ sudo su -
  Last login: Sun May 23 10:36:37 UTC 2021 on pts/0
#

Docker

CodeIgniter4が動く環境を構築

DockerでCodeigniter4 betaを動かす

yum-utils は yum-config-manager ユーティリティを提供します。 また device-mapper-persistent-data と lvm2 は devicemapper ストレージ・ドライバを利用するために必要です。

# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum -y install docker-ce
# systemctl start docker
# docker --version
  Docker version 20.10.6, build 370c289
# systemctl enable docker

一般ユーザがsudoなしでdockerコマンドを実行できるように、centos ユーザをdockerグループに所属させる

# gpasswd -a centos docker
  Adding user centos to group docker

Docker Composeのインストール
https://docs.docker.jp/compose/install.html#linux-compose

# sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# docker-compose --version
  docker-compose version 1.16.1, build 6d1ac21
一般ユーザに戻っておく
# exit

設定

/home/centos
 ├── docker-compose.yml
 ├── mysql
 │       └── my.cnf
 ├── nginx
 │       └── default.conf
 ├── php-fpm
 │       ├── Dockerfile
 │       └── php.ini
 └── src   <- この下にCodeigniter4のソースを設置します。

docker-compose.yml

基準となるディレクトリ(どこでもいい)に設定ファイルを作ります(apacheでいうconfファイル)。一般ユーザ(centos)のhomeに作ります

terminal
$ cd ~
$ vi docker-compose.yml
docker-compose.yml(インデントは同じ数に)
version: '3'
services:
  nginx:
    image: nginx
    restart: always
    ports:
      - 80:80
    volumes:
      - ./src:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php-fpm
  php-fpm:
    build: ./php-fpm
    restart: always
    volumes:
      - ./src:/var/www/html
      - ./php-fpm/php.ini:/usr/local/etc/php/php.ini
    depends_on:
      - mysql
      - redis
  mysql:
    image: mysql:5.7
    restart: always
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: root001
      TZ: "Asia/Tokyo"
    volumes:
      - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
      - mysql-storage:/var/lib/mysql
  redis:
    image: redis:4
    restart: always
    ports:
      - 6379:6379
    volumes:
      - redis-storage:/data
volumes:
  mysql-storage:
  redis-storage:

mysql

terminal
$ mkdir mysql
$ vi mysql/my.cnf
my.cnf
[mysqld]
character-set-server=utf8

[client]
default-character-set=utf8

nginx

terminal
$ mkdir nginx
$ vi nginx/default.conf
default.conf
server {
    listen       80;
    server_name  localhost;
    root         /var/www/html;
    index        index.php;

    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Dockerfile

terminal
$ mkdir php-fpm
$ vi php-fpm/Dockerfile
Dockerfile
FROM php:7.3-fpm

ENV COMPOSER_ALLOW_SUPERUSER 1

# apcuとopcacheはインストールしなくても問題ありません。
RUN apt-get update && \
    apt-get -y install libxml2-dev libcurl4-openssl-dev zip unzip git && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* && \
    docker-php-ext-configure mysqli --with-mysqli=mysqlnd && \
    docker-php-ext-install intl json mbstring mysqli xml curl opcache && \
    pecl install redis apcu && \
    docker-php-ext-enable redis apcu && \
    curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

php.ini

terminal
$ vi php-fpm/php.ini
php.ini
[Date]
date.timezone = "Asia/Tokyo"

[mbstring]
mbstring.internal_encoding = UTF-8
mbstring.language = Japanese

確認

4つのコンテナのStateが全てUpになっていたらOK

terminal
$ docker-compose up -d
$ docker-compose ps
      Name                    Command               State                          Ports
---------------------------------------------------------------------------------------------------------------
centos_mysql_1     docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp
centos_nginx_1     /docker-entrypoint.sh ngin ...   Up      0.0.0.0:80->80/tcp,:::80->80/tcp
centos_php-fpm_1   docker-php-entrypoint php-fpm    Up      9000/tcp
centos_redis_1     docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp,:::6379->6379/tcp

※DockerでCouldn’t connect to Docker daemonが出る場合の原因と解決方法

https://www.virment.com/how-to-fix-couldnt-connect-to-docker-daemon/
グループの追加を反映させるには、ログインし直す必要があるので、一度ログアウトして再ログインしてください。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?