-
-
Save yeungon/740e1b11acb1ac470ddef08af6cedbb0 to your computer and use it in GitHub Desktop.
Chú ý lỗi
Problem:
You are trying to run a docker container or do the docker tutorial, but you only get an error message like this:
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
Solution:
The error message tells you that your current user can’t access the docker engine, because you’re lacking permissions to access the unix socket to communicate with the engine.
As a temporary solution, you can use sudo to run the failed command as root.
However it is recommended to fix the issue by adding the current user to the docker group:
Run this command in your favourite shell and then completely log out of your account and log back in (if in doubt, reboot!):
sudo usermod -a -G docker $USER
After doing that, you should be able to run the command without any issues. Run docker run hello-world as a normal user in order to check if it works. Reboot if the issue still persists.
Logging out and logging back in is required because the group change will not have an effect unless your session is closed
Một hướng dẫn chi tiết về docker
https://www.codehub.vn/Lam-the-nao-de-cai-dat-va-su-dung-Docker-tren-Ubuntu-18-04
Cách đơn giản để chạy LAMP với docker
Docker tiếp theo: https://viblo.asia/p/docker-for-beginner-part-ii-3P0lPAqv5ox
Delete all docker containers
docker rm $(docker ps -a -q)
Delete all docker images
docker rmi $(docker images -q)
How docker ps helped me: docker rm -f $(docker ps -aq) is a short command which I use to remove all containers.
Xin chào các bạn, sau khi viết xong Docker: Chưa biết gì đến biết dùng (Phần 1), mình đã giới thiệu với các bạn các công nghệ ảo hóa containerlization với công cụ docker của công ty Docker trên hệ điều hành Ubuntu, nhưng mới chỉ dừng lại ở tìm hiểu lịch sử && cơ chế hoạt động của Docker.
Đây là một công cụ khá tuyệt vời, rất hữu ích, khuyên các bạn nên tìm hiểu và sử dụng. Trước khi đọc phần 2 này, hãy đọc phần 1 - chủ yếu về lý thuyết, để mình hiểu bản chất của Docker đã.
Hôm nay chúng ta sẽ đi chi tiết hơn, xem thực tế chúng ta sử dụng Docker như thế nào, đầu tiên sẽ là Dockerfile nhé ! Let go
2. Dockerfile
2.1 Dockerfile là gì ?
Thì đơn giản, Dockerfile là một file
dạng text, không có đuôi, giúp thiết lập cấu trúc cho docker image nhờ chứa một tập hợp các câu lệnh.
Từ những câu lệnh đó, Docker có thể thực hiện đóng gói một docker images theo yêu cầu tùy biến của riêng bạn.
=> Như vậy Dockerfile sẽ quy định Docker image được khởi tạo từ đâu, gồm những gì trong đó.
2.2 Cách viết Dockerfile
Demo như sau:
Nào, bắt đầu viết Dockerfile nhé:
2.2.1 Thiết lập image gốc
Đầu tiên, ta cần khai báo thằng cha của image này là thằng nào, tức là nó khởi nguồn từ đâu, sử dụng:
Image gốc có thể là centos:7, ubuntu:16.04, vân vân và mây mây.
Vi dụ:
FROM ubuntu:16.04
Có thể bạn sắp biết, Docker hub - nơi lưu trữ và chia sẻ các image sẽ chứa những image gốc mà từ đó, bạn có thể phát triển, cài cắm, thay tháo, chỉnh sửa, thêm bớt để tạo ra những images tùy biến cho riêng bạn.
Khi Docker đọc tới câu lệnh này, nó sẽ tự động tìm xem image ubuntu:16.04 này đã tồn tại trong máy chưa, nếu chưa thì Docker sẽ tự động pull image này về. Trong đó ubuntu là tên của image, 16:04 là tag, bạn cũng có thể hiểu nó nôm na như là branch trong git.
MAINTAINER HoanKi[email protected]
2.2.2 Cài đặt ứng dụng
Bây giờ, chúng ta sẽ cài thêm các ứng dụng, thiết lập môi trường cần thiết trên ubuntu:16.04 này
Bạn có thể cài nginx, php, python, ruby, java ... phụ thuộc vào nhu cầu của bạn, sử dụng:
Ví dụ:
Update ubuntu
RUN apt-get update
Install nginx
RUN apt-get install -y nginx
Install mysql server
RUN echo "mysql-server mysql-server/root_password password root" | debconf-set-selections
&& echo "mysql-server mysql-server/root_password_again password root" | debconf-set-selections
&& apt-get install -y mysql-server
Trong khi cài nginx, sẽ có câu hỏi xuất hiện và bạn cần trả lời yes/no, khi đó tùy chọn -y trong RUN apt-get install -y nginx sẽ thể hiện cho sự lựa chọn yes của bạn.
2.2.3 Cấu hình
Tạo file .sh
Như ở phần entrypoint đã nói, cho dù chỉ cần một câu lệnh mình vẫn dùng ENTRYPOINT, để sau này dễ dàng tùy biến, phát triển.
Tạo file start.sh như sau
#!/bin/bash
service nginx start
exec $@
Ta có ví dụ ở phần này như sau:
ADD start.sh /venv
WORKDIR /venv
RUN chmod a+x /venv/*
ENTRYPOINT ["/venv/start.sh"]
EXPOSE 80
Tổng hợp lại, ta có một ví dụ cho Dockerfile như sau :
FROM ubuntu:16.04
MAINTAINER HoanKi[email protected]
RUN DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get install -y nginx
RUN echo "mysql-server mysql-server/root_password password root" | debconf-set-selections
&& echo "mysql-server mysql-server/root_password_again password root" | debconf-set-selections
&& apt-get install -y mysql-server
WORKDIR /venv
COPY start.sh /venv
RUN chmod a+x /venv/*
ENTRYPOINT ["/venv/start.sh"]
EXPOSE 80
Hello word
2.3 Cách sử dụng Dockerfile
2.3.1 Build docker image từ Dockerfile
Ta sử dụng câu lệnh sau:
Ví dụ:
sudo docker build -t ubuntu-nginx .
Bạn có thể dùng lệnh
docker images
để xem thành quả nhé !
2.3.2 Tạo container từ image.
Trong đó:
sudo docker run -p 9000:80 -it ubuntu-nginx /bin/bash
Kiểm tra log trên Terminal:
Trên trình duyệt:
sudo docker run -v /media/hoanki/PROJECT4/GitRepo/docker_tutorial/webroot:/var/www/html -p 9000:80 -it ubuntu-nginx /bin/bash
Thay thế /media/hoanki/PROJECT4/GitRepo/docker_tutorial/webroot cho đúng với trên máy bạn nhé !
Kết quả:
Docker-hub: Nơi lưu trữ và chia sẻ các image của Docker, nhưng không chỉ có vậy.
Nãy giờ bạn và tôi đang build image hoàn toàn dưới local, nhưng Docker Hub còn hỗ trợ chúng ta làm việc này trên server nữa.
Vào Create chọn Create Automated Build, chọn Github rồi trỏ tới docker-basic bạn vừa tạo ở GitHub.
Và ta có docker_basic, trông như sau:
Việc build này sẽ tự động thực hiên trên server Docker Hub nhé, ví dụ mình push code lên branch init_dockerfile thì Dockerhub tự động build image, kết quả có ở trong tab Build Detail.
Mình tạo pull request, sau khi mình merge nó thì DockerHub cũng sẽ build image tiếp trên branch master.
###############################################