Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Docker cho người mới bắt đầu
Mục đích của bài viết là hướng dẫn cơ bản nhất cho những ai chưa biết về docker, môi trường thực hiện là mac OS.
Chuẩn bị
Cài đặt virtualBox
Bạn download và cài virtual box từ homepage
Cài đặt boot2docker.
Boot2Docker là Linux distribution rất nhẹ để chạy container trên nó.
Cách cài đặt bạn có thể tham khảo thêm ở homepage. Về cơ bản thì trên mac OS chỉ cần:
brew install boot2docker
Khởi động
Kiểm tra version
➜ ~ boot2docker version
Boot2Docker-cli version: v1.7.1
Git commit: 8fdc6f5
Khởi động boot2docker:
➜ ~ boot2docker init
➜ ~ boot2docker up
➜ ~ eval "$(boot2docker shellinit)"
Cái eval cuối cùng để gán mấy biến môi trường sẽ được sử dụng trên docker như là host, có sử dụng TLS hay không
Sau khi khởi động xong boot2docker thì bạn confirm
docker info
Thử chạy
Đầu tiên bạn sẽ thử pull 1 image centos rỗng không có gì về và thử chạy xem sao
➜ ~ docker images
➜ ~ docker pull centos:centos6
➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos centos6 a005304e4e74 7 weeks ago 203.1 MB
Để sử dụng bash trên container bạn phải làm như sau:
➜ ~ docker run -it centos:centos6 /bin/bash
Sau khi khởi động bash, hãy thử cài apache xem nào
➜ ~ docker run -it centos:centos6 /bin/bash
[root@c0a5325eebaf /]# yum install -y httpd
...
Complete!
[root@c0a5325eebaf /]# service httpd start
[root@c0a5325eebaf /]# curl http://localhost
Sau khi cài đặt xong, hãy thử bật một tab mới và kiểm tra tiến trình docker xem nhé (lưu ý là với mỗi tab thì bạn phải chạy eval "$(boot2docker shellinit)"
lại vì biến môi trường không được set lại.
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c0a5325eebaf centos:centos6 "/bin/bash" 7 minutes ago Up 7 minutes goofy_bohr
➜ ~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c0a5325eebaf centos:centos6 "/bin/bash" 7 minutes ago Up 7 minutes
Như vậy chúng ta thấy là có 1 container đang ở trạng thái Up
, và đang được chạy command bash đúng không.
Lưu ý là docker image là bất biến, mọi trạng thái sẽ biến mất, nên khi bạn exit khỏi bash ở trên và run lại cái image centos:centos6 thì httpd sẽ biến mất :D.
Vậy muốn lưu lại trạng thái đã được cài đặt apache trên image thì bạn phải làm sao, đơn giản là commit nó trước khi exit
➜ ~ docker commit c0a5325eebaf trung/manual-httpd
4021b02c4720fc422d14ca7477121586d006dbc5f48faa0e74c607f5f01d09b5
➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
trung/manual-httpd latest 4021b02c4720 13 seconds ago 257.5 MB
centos centos6 a005304e4e74 7 weeks ago 203.1 MB
Lưu ý là commit sử dụng id lấy từ docker ps -a
ở trên.
Vậy nếu bạn muốn mapping port từ máy tính của bạn, và truy cập được apache từ local thì sao, đơn giản chỉ cần mapping port
➜ ~ docker run -p 8080:80 -it trung/manual-httpd /bin/bash
[root@9b4ad6f91ea7 /]# service httpd start
Kiểm tra ip của container
➜ ~ boot2docker ip
192.168.59.103
Sau đó truy cập vào http://192.168.59.103:8080 là bạn đã có thể thấy apache
Dockerfile
Nếu mỗi thay đổi nhỏ bạn phải làm thủ công rồi commit thì buồn cười quá nhỉ. Để giải quyết vấn đề đó chúng ta dùng Dockerfile.
Bạn tạo 1 thư mục bất kì, trong đó touch 1 file với tên là Dockerfile, nội dung như sau:
FROM centos:centos6
MAINTAINER trung
RUN yum install -y httpd
EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
Sau đó thực hiện câu lệnh
➜ my_docker docker build -t trung/httpd .
Successfully built 0507c25b6917
Kiểm tra image
➜ my_docker docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
trung/httpd latest 0507c25b6917 20 seconds ago 257.5 MB
Thử run xem sao
➜ my_docker docker run -p 8080:80 -d kakakakakku/httpd
8096ff4df716407d554896b4590644530ec29e0e7225f5126001578ffc9f3547
Truy cập lại vào http://192.168.59.103:8080 , bạn sẽ thấy đúng như những gì ban nãy đã thấy
Kết luận
Docker rất tiện phải không :D







