đùa chứ đọc thread mà cười ỉa. các bạn dùng docker container thì cũng là do thằng khác viết configuration script thôi, cái này thì là convention over configuration, bình thường không làm gì đặc biệt thì đíu sao, đến lúc làm cái gì đặc biệt thì vẫn phải tự thân vận động thôi, tôi thì đéo tin là docker là silver bullet, làm cái gì cũng được, cơ mà to each his own, các bạn toàn pro tôi thiếu kiến thức cho nên chắc là tôi sai :-j
nhân tiện thì đéo liên quan lắm, cơ mà gần đây tôi làm cái trang convert từ trung sang việt kia, có một phần khá khốn nạn là phải crawl nội dung liên tục từ một site đánh giá truyện bên tàu để lấy thông tin truyện hay nhất, trang đó số lượng page cần crawl cũng không nhiều, chỉ khoảng 200k pages thôi, cơ mà nó chống bot rất bựa, 100 hits là nó blacklist luôn vài tiếng (các bạn đừng vội thể hiện trình độ viết bot thoả mãn robots.txt, trang này nó đíu có đâu, block trực tiếp trên nginx luôn), cơ mà dù nó không block thì cũng bản thân nó cũng chậm vãi cứt, một giây serve được tầm 10 request là cùng. Cho nên cuối cùng tôi dùng proxy (lượm free tầm 10k cái, cơ mà chất lượng cũng như l`), ném cái script lên server dùng systemd timer cho nó chạy tầm 6h/lần, rồi khi nào cần thì rsync đống dữ liệu về máy bàn xử lý tiếp. Trường hợp như thế này tôi không hiểu dùng docker hay k8s nó có phép màu gì giúp tôi rút ngắn được thời gian crawl site (funny face).
Hoặc tôi có các use case khác như dùng puppeteer phải cài headless chrome, cũng không rõ docker giải quyết được vấn đề gì cho vụ này.... à mà thôi đéo lừa các bạn nữa, tôi biết là đọc dòng này các bạn sẽ lôi một đống container ra thể hiện, ví dụ cái này:
https://github.com/buildkite/docker-puppeteer là kết quả đầu tiên từ google search, tiếp đó bị tôi cười vào mặt vì các bạn đéo biết cái l`n gì, cơ mà thế thì lại rỗi việc quá.
Cho nên để tôi nói luôn là cái headless chrome muốn chạy được trên server thì trên server phải cài xserver (cái này là backend cho graphic interface dùng cho desktop, cơ mà muốn chrome chạy dc dù ở chế độ headless thì vẫn phải cài), aka cái container ví dụ ở trên nó sẽ đíu chạy, vì tôi chả thấy có dòng vẹo nào cài thư viện của xserver ở đây:
Code:
RUN apt-get update \
&& apt-get install -y wget gnupg ca-certificates \
&& wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
&& apt-get update \
# We install Chrome to get all the OS level dependencies, but Chrome itself
# is not actually used as it's packaged in the node puppeteer library.
# Alternatively, we could could include the entire dep list ourselves
# (https://github.com/puppeteer/puppeteer/blob/master/docs/troubleshooting.md#chrome-headless-doesnt-launch-on-unix)
# but that seems too easy to get out of date.
&& apt-get install -y google-chrome-stable \
&& rm -rf /var/lib/apt/lists/* \
&& wget --quiet https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh -O /usr/sbin/wait-for-it.sh \
&& chmod +x /usr/sbin/wait-for-it.sh
cái kết quả bên dưới mới có vẻ đúng (có vẻ thôi vì tôi chưa test):
https://github.com/alekzonder/docker-puppeteer
Code:
RUN apt-get update && \
apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \
libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 \
libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \
libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 \
fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst ttf-freefont \
ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget && \
wget https://github.com/Yelp/dumb-init/releases/download/v1.2.1/dumb-init_1.2.1_amd64.deb && \
dpkg -i dumb-init_*.deb && rm -f dumb-init_*.deb && \
apt-get clean && apt-get autoremove -y && rm -rf /var/lib/apt/lists/*
nói các khác là bạn đíu nghịch thử trong máy thì có giời mới biết là phải dùng cái nào mới chuẩn.... tất nhiên có khi đấy là tôi trình độ lùn không có kinh nghiệm về ops, các bạn nhiều kinh nghiệm có khi nhìn một cái biết ngay.
lại nói có rất nhiều thư viện thực ra là gọi process bên ngoài, hoặc là dùng shared library, đều phải tự viết custom dockerfile, mà tới bước này thì chả khác kẹc gì các bạn tự viết shell script để setup, có khác chắc là docker nó isolation + persistent, chứ command + knowledge vẫn tương tự..... tất nhiên đây là cái nhìn thiển cận của tôi do tôi không có hiểu biết về devops, các bạn pro tay gõ brew trong đầu dịch ra apt-get, dùng bash 3.2 (2006) tự tin là nó tương thích tuyệt đối với bash 5.0 (2019) thì tất nhiên là tôi không thể bằng được :s