View Vietnamese version

MacにDockerをインストールして使ってみましたでDockerを使ってみました。今回はその実用運営について考えます。Dockerを使って一人で遊んではもったいないと思います。そもそもの目的はいろんな開発環境を仮想化することですので、それぞれの開発環境イメージを作ってそれらを公開すれば、開発者はだれでも、いつでもどこでもPullでき、自分のローカルで使えるようにしたいです。

自分用のDockerイメージの作成方法は2つあります。

  1. docker commitを使う
  2. Dockerfileで自動ビルド

1.だと人の手に依存してしまいます。どう作っているかわからないとかですね。やはりだれも同じビルド方法でそのイメージを作れるようにしたいので2.の方法でいきます。

Dockerfileの書き方は極めて簡単です。具体的にはドキュメントを見てください。

https://docs.docker.com/reference/builder/

 

DockerfileでDockerイメージを作る

 

さて、実際に作ってみましょう。それでは、何を作りましょうか。弊社は必要なのでまずこんな感じ: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サイトで公開の仕組みを提供しています。要するにDocker Hubの仕組みを利用するのです。

極めて簡単です。最初にはアカウントを作ります。もちろん無料です。ただ、無料な場合はプライベートレポジトリは1つしかありません。それ以上必要なら、有料プランを購入しないといけません。弊社だとこの手のイメージは隠すことなく公開することにします。

そして、公開しましょう。

docker login
docker push comit/centos6up-lamp

しばらくお待ちましょう。終わったら、Docker Hubサイトで確認できます。実際弊社のレポジトリはこのURLとなります。

https://registry.hub.docker.com/u/comit/centos6up-lamp/

 

公開したDockerイメージを使う

 

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とCentos7のビルド

 

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が上がっているようです。解決されるまでちょっと我慢しましょうか。

 


 

[Vietnamese Version]

 

Có 2 cách tạo Docker Image cho mình

  1. Dùng docker commit
  2. 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/

 

Tạo Docker Image từ file Dockerfile

 

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.

 

Công khai Docker Image

 

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/

 

Sử dụng Docker Image đã công khai

 

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

 

Build Centos5 và Centos7

 

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

Fields with * are required.