MacにDockerをインストールして使ってみましたでDockerを使ってみました。今回はその実用運営について考えます。Dockerを使って一人で遊んではもったいないと思います。そもそもの目的はいろんな開発環境を仮想化することですので、それぞれの開発環境イメージを作ってそれらを公開すれば、開発者はだれでも、いつでもどこでもPullでき、自分のローカルで使えるようにしたいです。
自分用のDockerイメージの作成方法は2つあります。
- docker commitを使う
- Dockerfileで自動ビルド
1.だと人の手に依存してしまいます。どう作っているかわからないとかですね。やはりだれも同じビルド方法でそのイメージを作れるようにしたいので2.の方法でいきます。
Dockerfileの書き方は極めて簡単です。具体的にはドキュメントを見てください。
https://docs.docker.com/reference/builder/
さて、実際に作ってみましょう。それでは、何を作りましょうか。弊社は必要なのでまずこんな感じ:CentosでLAMP環境が使える環境です。ホストPCではDockerコンテナーの80ポートとポートマッピングでき、SSHでもDockerコンテナーにログインできるようにします。
今回はCentos6を例にしてみましょう。それに対応するDockerfileは以下のものです。
FROM centos:centos6 MAINTAINER Huynh Van Chung <huynh_vanchung@co-mit.com> #System Update & Install packages RUN yum -y update RUN yum -y install httpd RUN yum -y install php php-gd php-mysql php-intl php-xml php-xmlrpc php-soap php-pecl-apc php-odbc php-mbstring RUN sed -ri 's/;date.timezone =/date.timezone = Asia\/Tokyo/g' /etc/php.ini RUN yum -y install mysql mysql-server # SSHD RUN yum install -y openssh-server RUN echo 'root:root' |chpasswd # Set up SSHD config RUN sed -ri 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config # Init SSHD RUN /etc/init.d/sshd start RUN /etc/init.d/sshd stop # Setup Mysql RUN service mysqld start && \ /usr/bin/mysqladmin -u root password "root" EXPOSE 22 CMD /usr/sbin/sshd -D
そして、Dockerfileが置かれているフォルダでビルドを行います。
docker build -t="comit/centos6up-lamp" -rm=true .
-tでDockerイメージ名を指定しています。ビルドはそれほど長く時間が必要としないです。ちょっと待っただけって感じですね。
終わったら、docker imagesで確認して、そのDockerイメージ名があればOKです。
今度はビルドできたDockerイメージを公開しましょう。Dockerサイトで公開の仕組みを提供しています。要するにDocker Hubの仕組みを利用するのです。
極めて簡単です。最初にはアカウントを作ります。もちろん無料です。ただ、無料な場合はプライベートレポジトリは1つしかありません。それ以上必要なら、有料プランを購入しないといけません。弊社だとこの手のイメージは隠すことなく公開することにします。
そして、公開しましょう。
docker login docker push comit/centos6up-lamp
しばらくお待ちましょう。終わったら、Docker Hubサイトで確認できます。実際弊社のレポジトリはこのURLとなります。
https://registry.hub.docker.com/u/comit/centos6up-lamp/
Dockerイメージをダウンロードし、コンテナーを実行します
docker pull comit/centos6up-lamp docker run -d -p 22 -p 80:80 comit/centos6up-lamp
ホストPCのポートとコンテナーの22ポートのマッピングを確認します
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4087d687f946 comit/centos6up-lamp:latest /bin/sh -c '/usr/sbi 13 seconds ago Up 11 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:49153->22/tcp goofy_mccarthy
VMのIPアドレスを確認します
boot2docker ip The VM's Host only interface IP address is: 192.168.59.103
DockerコンテナーにSSHログインし、各種サービスを起動します
ssh root@192.168.59.103 -p 49153 # Pass: root /etc/init.d/httpd start /etc/init.d/mysqld start
ホストPCにて、下記サイトにアクセスできたら、OKです。CentosのApacheの画面ができるはずです。
http://192.168.59.103
Centos5のビルドもOKでしたので、そのDockfile内容を書きたいと思います。
FROM tianon/centos:5.10 MAINTAINER Huynh Van Chung <huynh_vanchung@co-mit.com> #System Update & Install packages RUN yum -y update RUN yum -y install httpd RUN yum -y install php53 php53-gd php53-mysql php53-intl php53-xml php53-xmlrpc php53-soap php53-pecl-apc php53-odbc php53-mbstring RUN sed -ri 's/;date.timezone =/date.timezone = Asia\/Tokyo/g' /etc/php.ini RUN yum -y install mysql mysql-server # SSHD RUN yum install -y openssh-server RUN echo 'root:root' |chpasswd # Set up SSHD config RUN sed -ri 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config # Init SSHD RUN /etc/init.d/sshd start #RUN /etc/init.d/sshd stop # Setup Mysql RUN service mysqld start && \ /usr/bin/mysqladmin -u root password "root" EXPOSE 22 CMD /usr/sbin/sshd -D
また、その公開サイトは以下となります。
https://registry.hub.docker.com/u/comit/centos5up-lamp/
しかし、Centos7はHTTPDをインストールする時にエラーが出てしまいました。本件についてはDockerサイトの開発者にIssueが上がっているようです。解決されるまでちょっと我慢しましょうか。
Có 2 cách tạo Docker Image cho mình
- Dùng docker commit
- Build với file Dockerfile
1. thì sẽ phụ thuộc vào cá nhân tạo ra image đó. Và các step làm gì chúng ta cũng không rõ. Nên dùng cách 2. là chính xác nhất, làm gì đều rõ và ai cũng có thể tái tạo ra Image giống như vậy được.
Cách viết Dockerfile rất đơn giản, bạn có thể tham khảo ở site sau.
https://docs.docker.com/reference/builder/
Giờ chúng ta tạo thử với nội dung sau: Công ty chúng tôi thì cần trước hết là Centos OS có cài sẵn môi trường LAMP. Ngoài ra port 80 của Container phải được map với Host PC, và từ Host PC có thể SSH login vào Container được.
Lấy ví dụ vaowis Centos6, file Dockerfile sẽ có nội dung như sau:
FROM centos:centos6 MAINTAINER Huynh Van Chung <huynh_vanchung@co-mit.com> #System Update & Install packages RUN yum -y update RUN yum -y install httpd RUN yum -y install php php-gd php-mysql php-intl php-xml php-xmlrpc php-soap php-pecl-apc php-odbc php-mbstring RUN sed -ri 's/;date.timezone =/date.timezone = Asia\/Tokyo/g' /etc/php.ini RUN yum -y install mysql mysql-server # SSHD RUN yum install -y openssh-server RUN echo 'root:root' |chpasswd # Set up SSHD config RUN sed -ri 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config # Init SSHD RUN /etc/init.d/sshd start RUN /etc/init.d/sshd stop # Setup Mysql RUN service mysqld start && \ /usr/bin/mysqladmin -u root password "root" EXPOSE 22 CMD /usr/sbin/sshd -D
Sau đó chúng ta build ở folder có chứa Dockerfile.
docker build -t="comit/centos6up-lamp" -rm=true .
Option -t để chỉ định tên của Docker Image. Build không tốn thời gian mấy chúng ta chỉ đợi một chút là ok.
Sau khi build xong chúng ta có thể confirm lại bằng docker images, nếu có Docker Images tên đúng với tên chúng ta vừa tạo là OK.
Giờ chúng ta công khai Docker Image vừa tạo được. Docker site có cung cấp cơ chế để công khai Docker Image. Tức là chúng ta sử dụng dịch vụ Docker Hub.
Cách dùng rất đơn giản. Trước hết chúng ta tạo account. Tất nhiên là tạo account free, tuy nhiên nếu free thì chỉ có thể tạo 1 repository private, còn nếu muốn nhiều hơn thì phải mua. Công ty tôi thì không cần phải dùng loại này ở trạng thái Private, nên cứ công khai biết đâu sẽ có ích cho ai đó.
Để công khai chúng ta dùng câu lệnh dưới.
docker login docker push comit/centos6up-lamp
Hãy đợi một lát. Sau khi xong thì chúng ta kiểm tra trên site Docker Hub.
https://registry.hub.docker.com/u/comit/centos6up-lamp/
Download Docker Image xuống và chạy container
docker pull comit/centos6up-lamp docker run -d -p 22 -p 80:80 comit/centos6up-lamp
Kiểm tra xem container 22 port mapping với port nào của Host PC
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4087d687f946 comit/centos6up-lamp:latest /bin/sh -c '/usr/sbi 13 seconds ago Up 11 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:49153->22/tcp goofy_mccarthy
Kiểm tra IP Address của VM
boot2docker ip The VM's Host only interface IP address is: 192.168.59.103
Sau đó login SSH vào Docker Container và khởi động các services
ssh root@192.168.59.103 -p 49153 # Pass: root /etc/init.d/httpd start /etc/init.d/mysqld start
Ở Host PC mà access được vào site nào là ok.
http://192.168.59.103
Theo cách này chúng ta cũng build thành công Centos5, và nội dung file Dockerfile như sau:
FROM tianon/centos:5.10 MAINTAINER Huynh Van Chung <huynh_vanchung@co-mit.com> #System Update & Install packages RUN yum -y update RUN yum -y install httpd RUN yum -y install php53 php53-gd php53-mysql php53-intl php53-xml php53-xmlrpc php53-soap php53-pecl-apc php53-odbc php53-mbstring RUN sed -ri 's/;date.timezone =/date.timezone = Asia\/Tokyo/g' /etc/php.ini RUN yum -y install mysql mysql-server # SSHD RUN yum install -y openssh-server RUN echo 'root:root' |chpasswd # Set up SSHD config RUN sed -ri 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config # Init SSHD RUN /etc/init.d/sshd start #RUN /etc/init.d/sshd stop # Setup Mysql RUN service mysqld start && \ /usr/bin/mysqladmin -u root password "root" EXPOSE 22 CMD /usr/sbin/sshd -D
Và sau đây là URL công khai repository:
https://registry.hub.docker.com/u/comit/centos5up-lamp/
Tuy nhiên vẫn chưa build thành công Centos7, build đến đoạn install HTTPD là bị lỗi. Cái issue này cũng đã được báo cáo cho Docker.com Developer rồi. Chúng ta hãy đợi thêm thời gian nữa cho đến lúc lỗi này được sửa.
Leave a Comment