FreeShare

Sơ lược về docker

Chủ nhật, 18/02/2024
image
Bài toàn đặt ra là khi ta làm 1 hệ thống cần cài rất nhiều thứ như mariadb, nodejs, redis … Dùng docker ta chỉ cần viết vào docker-compose.yml sau đó mang đi deploy là được mà không cần phải cài nhiều thứ đó trên các môi trường. Tạo ra các image và chạy các […]

Bài toàn đặt ra là khi ta làm 1 hệ thống cần cài rất nhiều thứ như mariadb, nodejs, redis ... Dùng docker ta chỉ cần viết vào docker-compose.yml sau đó mang đi deploy là được mà không cần phải cài nhiều thứ đó trên các môi trường. Tạo ra các image và chạy các image đó thì chạy nó thì ra vận hành nó trên 1 container (trên nền tảng ảo hóa). kubernetes (ks8) là hệ thống quản lý các container và giúp cho việc tự động deploy code 1 cách dễ dàng hơn

Ví dụ về Dockerfile:

FROM node:12.18.3
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ADD api/index.ts ./
ADD package.json ./
RUN npm install -g typescript
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

Chạy Dockerfile với lệnh

$: docker build -t trantien/demo-base .
    
$: docker run -d --rm -p 4000:3000 trantien/demo-base
    
run brower: http://127.0.0.1:4000/

FROM ở đây ta chọn là nodejs version 12.18.3

RUN là chạy terminal lệnh

WORKDIR là chỉ ra làm việc trên folder nào

ADD là các lệnh chuyển file từ code thật sang folder tạo image

EXPOSE chỉ ra port khi chạy

Ví dụ về tạo docker-compose.yml

version: '3'
services:
    node:
        build:
            context: .
            dockerfile: Dockerfile
        command: npm start
        container_name: site_api
        image: site_api
        restart: always
        links:
            - mariadb
            - redis
        ports:
            - ${SERVER_PORT}:${SERVER_PORT}
        env_file:
            - .env
        environment:
            SERVER_PORT: "${SERVER_PORT}"
            SERVER_DOMAIN: "${SERVER_DOMAIN}"
            DB_HOST: ${DB_HOST}
            DB_USER: ${DB_USER}
            DB_PASSWORD: ${DB_PASSWORD}
            DB_NAME: ${DB_NAME}
            DB_PORT: ${DB_PORT}
        network_mode: bridge
    mariadb:
        image: mariadb:latest
        container_name: site_database
        restart: always
        ports:
            - ${MYSQL_PORT}:3306
        env_file:
            - .env
        environment:
            MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
            MYSQL_DATABASE: "${MYSQL_DB}"
            MYSQL_USER: "${MYSQL_USER}"
            MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
        volumes:
            - ./mariadb:/var/lib/mysql
        network_mode: bridge
    redis:
        image: redis
        container_name: site_redis
        env_file:
            - .env
        expose:
            - "${REDIS_PORT}"
        restart: always
        network_mode: bridge

#Volumes
volumes:
    dbdata:

build : Chỉ ra là mình muốn build Dockerfile nào

container_name: là mình đặt tên cho container đó

image: là tên image , có thể tìm trên dockerhub.com

restart: có mấy kiểu always, unless-stoped, on-failed

ports: chỉ là port conatiner {local port}: {docker port}

Chạy docker-compose.yml với lệnh

docker-compose up -d --build

Kiểm tra các container đang chạy với lệnh

docker ps

List các image

docker image ls

Xoá các image hoặc các container thừa với lệnh

docker image prune -a
docker container prune