Docker

Installation

Detta krÀver att du har WSL2 installerat. Du kan kontrollera din version med Powershell, kör wsl -l -v

  • Installera Windows Subsystem Linux 2, en guide finns hĂ€r.

    • Om du installerar en ny distribution:

      • sudo apt update

      • sudo apt upgrade -y

  • Installera Docker desktop för Windows.

    • Kör igenom Dockers Get started Tutorial i programmet.

  • Se till att du har Remote extension för Visual Studio Code, den hĂ€r.

NÀsta steg Àr att konfigurera Docker sÄ att det anvÀnder WSL2, se fig 1 och att det har tillgÄng till WSL, fig 2.

Du kan eventuellt behöva starta om datorn, WSL och eller Docker efter detta. Men du ska kunna starta WSL och köra kommandot docker. Docker körs dÄ frÄn Windows, men finns tillgÀngligt frÄn WSL.

docker

Ett första test med Node

Innan du kommer igÄng sÄ krÀvs det att du installerar lite programvara lokalt.

sudo apt install curl dirmngr apt-transport-https lsb-release ca-certificates -y
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt install nodejs -y
sudo npm i -g express express-generator

NÀsta steg Àr att skapa ett Express-projekt som kommer utgöra basen för denna container.

mkdir wsp1-docker-node
cd wsp1-docker-node
express --view pug --css sass --git
npm install

För att underlÀtta utvecklingen anvÀnds Àven nodemon.

npm install --save-dev nodemon

Starta sedan Visual Studio Code.

code -r .

LÀgg sedan till följande kod sÄ att nodemon körs.

package.json
  "scripts": {
    "start": "nodemon ./bin/www"
  },

Docker filer

Docker utgÄr frÄn ett antal konfigurationsfiler för att skapa en image. Denna image Àr det som körs och anvÀnds i en Docker container. Skapa följande filer i projektmappen.

docker-compose.yml
version: "3"
services:
  node:
    container_name: nodejs
    image: "node:12"
    user: "node"
    working_dir: /var/www
    environment:
      - NODE_ENV=development
    volumes:
      - ./:/var/www
    ports:
    - "3000:3000"
    command: "npm start"
Dockerfile
FROM node:12
WORKDIR /var/www
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

Om du har skapat Express-projektet, Docker-filerna och allt fungerar sÄ Àr du redo att skapa en image och testa den.

docker-compose up -d

VÀnta pÄ att imagen ska skapas, sedan öppnar du Docker-grÀnssnittet. Navigera till Containers och prova att öppna projektet i en webblÀsare. Om allt fungerar sÄ öppnas ditt Express projekt.

Öppna sedan projektet med Visual Studio Code och prova att redigera projektets index filer. Ladda sedan om sidan i webblĂ€saren.

routes/index.js
res.render('index', { title: 'Docker' });

Koden för hela exemplet finns hÀr.

Praktiskt

Denna instruktion utgÄr frÄn att du ska klona och köra igÄng ett repo, i detta fallet SoloÀventyret.

git clone --single-branch --branch docker https://github.com/jensnti/wsp1-node-solo

Docker filerna följer med för detta, vill du klona ditt eget soloÀventyr sÄ Àr det följande filer du behöver. Notera mappen för my.cnf.

Filerna kommer att starta 2 containers.

  • nodedev

    • Kör node:12.

    • Kör npm start frĂ„n package.json

    • PĂ„ port 3000

  • nodedb

    • Kör mysql:8

    • Skapar anvĂ€ndare och databas.

      • database: soloadventure

      • root password: password123

cd wsp1-node-solo
npm install
cp .env-example .env

Efter att projektet klonats ned och install Àr kört sÄ behöver det köras lite kommandon för att fÄ allt att fungera. Kör följande kommando för att bygga en image och starta den som en tjÀnst.

docker-compose up -d --build

Om kommandot fungerar som det ska sÄ startas dina containers, se Fig 3.

NÀsta steg blir att slutföra konfigurationen av databasanvÀndaren och ladda in databasen. För att göra det behöver du koppla upp dig mot databas-containers bash.

docker-compose exec db bash

VÀl inne startar du mysql som root. Lösenordet ska vara password123.

mysql -u root -p 

AnvÀndaren till kontot skapades tillsammans med databasen tidigare, men permissions behövs fortfarande sÀttas och uppdateras för node.

CREATE USER 'solouser'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON soloadventure.* TO 'solouser'@'%';
ALTER USER 'solouser'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;

NÀr detta Àr gjort sÄ Àr det sista steget att importera databasen. Detta kan vi göra med tableplus. Skapa en ny uppkoppling, Fig 4.

VÀlj databas och sedan Import, databas-dumpen finns hÀr. Se Fig 5.

Förhoppningsvis sÄ kan du nu surfa till localhost och testa Àventyret. Om du behöver bygga om din image.

docker-compose up -d --build

Snabbstart

Filer för att skapa en image med node, npm och databas.

  • Skapa ett nytt Express-projekt eller klona ett frĂ„n Git.

  • Skapa följande konfigurationsfiler i mappen.

  • Se till att Docker Ă€r igĂ„ng.

  • Kör docker-compose up -d build

  • Du bör nu kunna surfa till localhost

Dockerfile
FROM node:12

# Create app directory
WORKDIR /var/www

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

# Add user for application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www

# Bundle app source
COPY . .

# Change current user to www
USER www

EXPOSE 3000

CMD ["npm", "start"]

För att konfigurera databasen behöver du koppla upp dig till den, skapa anvÀndaren och konfigurera rÀttigheterna.

CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON databasename.* TO 'username'@'%';
ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;

Last updated