在 Docker 中,一般遵循一個 Docker 只運行一個應用,這樣方便維護。

首先需要將 centos 鏡像 pull 到本地,並搭建本地 yum 倉庫

yum 倉庫地址:http://192.168.2.11:8000 這裏使用阿里 yum 和 163yum 都可以。

[root@node1 test]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEdocker.io/centos    latest              904d6c400333        4 weeks ago         196.7 MB

編寫 Dockerfile 文件

[root@node1 web-Dockerfile]# vim Dockerfile FROM centosMAINTAINER hukeyRUN rm -rf /etc/yum.repos.d/*RUN echo -e "[yum]nname = yumngpgcheck = 0nbaseurl = http://192.168.2.11:8000" > /etc/yum.repos.d/yum.repoRUN yum install httpd php php-mysql php-mbstring -y && yum clean allEXPOSE 80CMD ["/usr/sbin/httpd","-f","/etc/httpd/conf/httpd.conf","-DFOREGROUND"]

嘗試執行 Dockerfile 文件

[root@node1 web-Dockerfile]# docker build -f Dockerfile -t web:centos7 .......Step 6 : EXPOSE 80 ---> Running in cd581ad95fb0 ---> 368d9fc0b1ceRemoving intermediate container cd581ad95fb0Step 7 : CMD /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -DFOREGROUND ---> Running in 34e0a903d8b5 ---> 07d76f84111cRemoving intermediate container 34e0a903d8b5Successfully built 07d76f84111c

docker 每執行完成一行 RUN 語句就會生成一個鏡像文件,如果還有 RUN 指令執行,就會刪除原來的鏡像文件,並創建一個新的鏡像文件,因此在編寫 Dockerfile 時,要簡練。

通過生成的鏡像文件運行一個容器

[root@node1 web-Dockerfile]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEweb                 centos7             07d76f84111c        2 minutes ago       268 MBdocker.io/centos    latest              904d6c400333        4 weeks ago         196.7 MB[root@node1 web-Dockerfile]# docker run -d -p 80:80 -v /myweb/:/var/www/html/ --name web web:centos7   # -v 本機目錄/myweb 掛載到容器內的/var/www/html 目錄

通過查看,我們已經成功的創建了一個 web 容器。

[root@node1 web-Dockerfile]# docker ps CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES7d5c54ba0cf1        web:centos7         "/usr/sbin/httpd -f /"   11 seconds ago      Up 10 seconds       0.0.0.0:80->80/tcp   web[root@node1 web-Dockerfile]# docker port web80/tcp -> 0.0.0.0:80

測試訪問:
http://192.168.2.11

web 服務已經搭建完畢,接下來是 MySQL

編寫 Dockerfile 文件,CMD 運行的 mysql.sh 腳本,需要我們手動編寫。這裏開通 ssh 服務,方便對於數據庫的管理工作

[root@node1 mysql-Dockerfile]# vim Dockerfile   1 FROM centos  2 MAINTAINER hukey  3 RUN rm -rf  /etc/yum.repos.d/*  && echo -e "[yum]nname = yumngpgcheck = 0nbaseurl = http://192.168.2.11:8000" > /etc/yum.repos.d/yum.repo  4 RUN yum install mariadb-server openssh-server -y && yum clean all  5 RUN mysql_install_db && chown -R mysql:mysql /var/lib/mysql/  6 VOLUME /var/lib/mysql/  7 ADD mysql.sh /mysql.sh  8 RUN chmod 755 /mysql.sh  9 EXPOSE 22 10 EXPOSE 3306 11 CMD ["/mysql.sh"]

mysql.sh 腳本內容

[root@node1 mysql-Dockerfile]# vim mysql.sh   1 #!/bin/bash  2 # Author:hukey  3 mysqld_safe &  4 sleep 5  5 mysqladmin -uroot password '123456'  6 mysql -uroot -p123456 -e "GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '123456';FLUSH PRIVILEGES;"  7 sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config && ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key  8 echo 123456 | passwd --stdin root  9 /usr/sbin/sshd -D

嘗試生成鏡像

[root@node1 mysql-Dockerfile]# docker build -f Dockerfile -t mariadb:centos7 .[root@node1 mysql-Dockerfile]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEmariadb             centos7             49b88fcfb709        29 seconds ago      367.8 MB

生成完成,嘗試啓動容器

[root@node1 mysql-Dockerfile]# docker run -d -p 20002:22 --name db mariadb:centos7[root@node1 mysql-Dockerfile]# docker ps CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                             NAMESc0988d8c8eb2        mariadb:centos7     "/mysql.sh"              7 seconds ago       Up 6 seconds        3306/tcp, 0.0.0.0:20002->22/tcp   db

通過 ssh 服務連接到容器

[root@node1 mysql-Dockerfile]# ssh 192.168.2.11 -p 20002The authenticity of host '[192.168.2.11]:20002 ([192.168.2.11]:20002)' can't be established.RSA key fingerprint is 8c:c0:c0:a5:1e:0b:83:03:48:1e:51:77:25:37:20:bc.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '[192.168.2.11]:20002' (RSA) to the list of known hosts.root@192.168.2.11's password: [root@c0988d8c8eb2 ~]# mysql -uroot -p123456Welcome to the MariaDB monitor.  Commands end with ; or g.Your MariaDB connection id is 3Server version: 5.5.44-MariaDB MariaDB ServerCopyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.MariaDB [(none)]> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || test               |+--------------------+4 rows in set (0.00 sec)

現在 web 容器和 mariadb 容器已經搭建完畢,接下來就需要將它們關聯在起來

[root@node1 mysql-Dockerfile]# docker ps CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                             NAMESc0988d8c8eb2        mariadb:centos7     "/mysql.sh"              2 minutes ago       Up 2 minutes        3306/tcp, 0.0.0.0:20002->22/tcp   db7d5c54ba0cf1        web:centos7         "/usr/sbin/httpd -f /"   58 minutes ago      Up 58 minutes       0.0.0.0:80->80/tcp                web[root@node1 mysql-Dockerfile]# docker stop webweb[root@node1 mysql-Dockerfile]# docker rm webweb

測試是否能夠訪問到 mysql 容器

[root@node1 mysql-Dockerfile]# docker run -it -p 80:80 --link=db --name web web:centos7 /bin/bash[root@f310c805bdfc /]# yum install mariadb -y[root@f310c805bdfc /]# mysql -uroot -p123456 -h dbWelcome to the MariaDB monitor.  Commands end with ; or g.Your MariaDB connection id is 5Server version: 5.5.44-MariaDB MariaDB ServerCopyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.MariaDB [(none)]> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || test               |+--------------------+4 rows in set (0.00 sec)

連接 mysql 容器成功。

再次創建後台運行的 web 容器

[root@node1 web-Dockerfile]# docker run -d -p 80:80 -v /myweb/:/var/www/html/ --link=db:todb --name=web web:centos7 [root@node1 web-Dockerfile]# docker ps CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                             NAMES4a36ee3781da        web:centos7         "/usr/sbin/httpd -f /"   8 seconds ago       Up 7 seconds        0.0.0.0:80->80/tcp                web50dba9d34f51        mariadb:centos7     "/mysql.sh"              9 minutes ago       U
p 9 mi
nutes        3306/tcp, 0.0.0.0:20002->22/tcp   db

安裝 WordPress web 程序

[root@node1 myweb]# cp -a /root/WordPress/* /myweb/

瀏覽器訪問

登錄數據庫容器,創建 WordPress 所需數據庫。

複製代碼

[root@node1 myweb]# ssh 192.168.2.11 -p 20002root@192.168.2.11's password: [root@50dba9d34f51 ~]# mysql -uroot -p123456Welcome to the MariaDB monitor.  Commands end with ; or g.Your MariaDB connection id is 6Server version: 5.5.44-MariaDB MariaDB ServerCopyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.MariaDB [(none)]> CREATE DATABASE WordPress;Query OK, 1 row affected (0.09 sec)MariaDB [(none)]> GRANT ALL ON WordPress.* TO 'WordPress'@'%' IDENTIFIED BY 'WordPress';Query OK, 0 rows affected (0.03 sec)MariaDB [(none)]> FLUSH PRIVILEGES;Query OK, 0 rows affected (0.02 sec)MariaDB [(none)]> Bye

到此,基於 Docker lamp 平台的 WordPress 搭建成功。

如果是在生產環境中使用 docker,不太建議將數據庫程序存放與 docker 內執行。建議 MySQL 實現負載或者冗餘。