Docker+reactでhello world
dockerとdocker-composeはインストールしてある状況から始めます.
環境の準備
dockerを使ってreactの環境を作ります.まず以下のようにファイルを作ります.
react_portfolio ├── Dockerfile └── docker-compose.yml
Dockerfileに,コンテナの構成情報を書き込みます.
FROM node:14.9.0-alpine3.10 WORKDIR /usr/src/app
docker-compose.ymlに,dockerビルドやコンテナ起動のオプションを書き込みます.サーバーで確か3000とかは既に使ってしまっていると思うので,適当なポートを指定します.
version: '3' services: node: build: context: . dockerfile: Dockerfile tty: true environment: - NODE_ENV=production volumes: - ./:/usr/src/app command: sh -c "cd react_portfolio &&PORT=7984 yarn start" ports: - "7984:7984"
以下のコマンドを実行します.
docker-compose build
これにより,dockerのreact開発用コンテナがビルドされます. 次に,reactの新規アプリの雛形を作ります.
docker-compose run --rm node sh -c 'npm install -g create-react-app && create-react-app react_portfolio'
こうすると以下のようになったはずです
react_portfolio ├── Dockerfile └── docker-compose.yml └──react_portfolio ├──README.md ├──package.json ├──node_modules ├──src ├──public └──yarn.lock
コンテナを起動してみます
docker-compose up
http://localhost:7984でreactのデフォルトページを見ることができました.
環境の移設
これをgithubで管理したものをさくらのサーバ側でcloneします. .gitignoreは以下のようにします.
# dependencies react_portfolio/node_modules react_portfolio/.pnp .pnp.js # testing react_portfolio/coverage # production react_portfolio/build # misc .DS_Store .env.local .env.development.local .env.test.local .env.production.local npm-debug.log* yarn-debug.log* yarn-error.log*
サーバ側の/var/www/appでgit cloneして,
cd react_portfolio npm install
sudo docker-compose build
起動できることが確認できます.
本当にこんな感じでいいのかな…?
Hello World
src/App.jsを書き換えます
function App() { const name ="Naomi"; const element=<h1>Hello, {name}!</h1> return ( element ); }
ついでにApp.test.jsもこれが通るように書き換えます
test('renders Naomi', () => { const { getByText } = render(<App />); const linkElement = getByText(/Naomi/i); expect(linkElement).toBeInTheDocument(); });
docker-compose upで起動すると"Hello,Naomi!"と表示されます