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