Docker cho người mới bắt đầu
Docker
42
White

Hoàng Minh Trung viết ngày 14/08/2015

img

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

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Hoàng Minh Trung

23 bài viết.
72 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
24 1
Bài viết dịch từ http://arslan.io/tenusefultechniquesingo Sử dụng một GOPATH duy nhất Sử dụng đồng thời nhiều GOPATH sẽ không giúp cho hệ thống ...
Hoàng Minh Trung viết hơn 3 năm trước
24 1
White
18 3
Giới thiệu (Ảnh) Về cơ bản kafka là hệ thống message pub/sub phân tán mà có khả năng scale rất tốt. Message của kafka được lưu trên đĩa cứng, đồ...
Hoàng Minh Trung viết hơn 4 năm trước
18 3
White
18 0
Bài viết dịch từ https://github.com/luciotato/golangnotes/blob/master/OOP.md Mục đích bài viết Học golang dễ dàng hơn với những kiến thức bạn đ...
Hoàng Minh Trung viết hơn 3 năm trước
18 0
Bài viết liên quan
White
10 0
Một trong những trường hợp build docker image là thừa hưởng từ một image mẹ Lấy một ví dụ sau: Dockefile FROM my_repo/my_image ENTRYPOINT ech...
Lơi Rệ viết 4 năm trước
10 0
White
17 0
Công cụ này dành riêng cho những người lười muốn muốn tiết kiệm thời gian thao tác với docker bằng dòng lệnh với các lợi ích sau: + Tiết kiệm thời...
Phí Ngọc Chi viết gần 3 năm trước
17 0
White
69 17
Hôm nay có người nói với mình: "Thật ra để chạy một ứng dụng bằng docker rất đơn giản, ví dụ như node, chỉ cần vài dòng cài thêm pm2, forever rồi m...
Minh Monmen viết 5 tháng trước
69 17
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
23 bài viết.
72 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!