本文演示使用 Docker 安装 Ubuntu、CentOS、Nginx、Apache、Tomcat、Redis、MariaDB(MySQL)、Python、PHP 和 NodeJS。
Ubuntu 是基于 Debian 的 Linux 操作系统。
1) 查看可用的 Ubuntu 版本
访问 Ubuntu 镜像库地址: https://hub.docker.com/_/ubuntu?tab=tags&page=1。
可以通过 Sort by 查看其他版本的 Ubuntu,默认是最新版本 ubuntu:latest。
可以在下拉列表中找到其他想要的版本,也可以用 docker search 命令来查看可用版本:
$ docker search ubuntu
2) 拉取 Ubuntu 镜像
$ docker pull ubuntu # 相当于 docker pull ubuntu:latest
$ docker images # 查看镜像列表
3) 运行容器,并且可以通过 exec 命令进入 ubuntu 容器
$ docker run -itd --name ubuntu-test ubuntu
$ docker ps # 查看运行的容器列表
$ docker exec -it ubuntu-test /bin/bash
CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red
Hat Enterprise Linux(RHEL)
依照开放源代码规定发布的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以 CentOS 替代商业版的 Red Hat
Enterprise Linux 使用。
1) 查看可用的 CentOS 版本
访问 CentOS 镜像库地址:https://hub.docker.com/_/centos?tab=tags&page=1。
可以通过 Sort by 查看其他版本的 CentOS,默认是最新版本 centos:latest 。
可以在下拉列表中找到其他想要的版本,也可以用 docker search 命令来查看可用版本:
$ docker search centos
2) 拉取指定版本的 CentOS 镜像,这里我们安装指定版本为例(centos7):
$ docker pull centos:centos7
$ docker images # 查看镜像列表
3) 运行容器,并且可以通过 exec 命令进入 CentOS 容器。
$ docker run -itd --name centos-test centos:centos7
$ docker ps # 查看运行的容器列表
$ docker exec -it centos-test /bin/bash
Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务 。
1) 查看可用的 Nginx 版本
访问 Nginx 镜像库地址:https://hub.docker.com/_/nginx?tab=tags。
可以通过 Sort by 查看其他版本的 Nginx,默认是最新版本 nginx:latest。
可以在下拉列表中找到其他想要的版本,也可以用 docker search 命令来查看可用版本:
$ docker search nginx
2) 拉取 Nginx 镜像
$ docker pull nginx # 相当于 docker pull nginx:latest
$ docker images # 查看镜像列表
3) 运行容器
$ docker run --name nginx-test -p 8888:80 -d nginx
参数说明:
--name nginx-test:容器名称。
-p 8888:80: 端口进行映射,将本地 8888 端口映射到容器内部的 80 端口。
-d nginx: 设置容器在在后台一直运行。
通过浏览器可以直接访问 8888 端口的 nginx 服务。
Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的 Web 服务器端软件之一。
1) 查看可用的 httpd 版本
访问 httpd 镜像库地址:https://hub.docker.com/_/httpd?tab=tags。
可以通过 Sort by 查看其他版本的 httpd,默认是最新版本 httpd:latest。
可以在下拉列表中找到其他想要的版本,也可以用 docker search 命令来查看可用版本:
$ docker search httpd
2) 拉取 httpd 镜像
$ docker pull httpd # 相当于 docker pull httpd:latest
$ docker images # 查看镜像列表
3) 运行容器
$ docker run --name httpd-test -p 80:80 -v
/var/www/httpd/htdocs/:/usr/local/apache2/htdocs/ -v
/var/www/httpd/logs/:/usr/local/apache2/logs/ -d httpd
参数说明:
--name httpd-test:容器名称。
-p 80:80: 端口进行映射,将本地 80 端口映射到容器内部的 80 端口。
-v: 将主机的目录或文件挂载到容器的目录或文件。
-d httpd 设置容器在在后台一直运行。
通过浏览器可以直接访问 80 端口的 httpd 服务。
Tomcat 是应用(java)服务器,它只是一个 servlet 容器,是 Apache 的扩展。 Apache 和 Tomcat 都可以做为独立的 web 服务器来运行,但是 Apache 不能解释 java 程序(jsp,servlet)。
1) 查看可用的 tomcat 版本
访问 tomcat 镜像库地址:https://hub.docker.com/_/tomcat?tab=tags。
可以通过 Sort by 查看其他版本的 tomcat,默认是最新版本 tomcat:latest。
可以在下拉列表中找到其他想要的版本,也可以用 docker search 命令来查看可用版本:
$ docker search tomcat
2) 拉取 tomcat 镜像
$ docker pull tomcat # 相当于 docker pull tomcat:latest
$ docker images # 查看镜像列表
3) 运行容器
$ docker run --name tomcat-test -p 8080:8080 -v /var/www/webapps:/usr/local/tomcat/webapps -d tomcat
参数说明:
-p 8080:8080: 端口进行映射,将本地 8080 端口映射到容器内部的 8080 端口。
-v:将主机中 /var/www/tomcat/webapps 挂载到容器的 /usr/local/tomcat/webapps。
通过浏览器可以直接访问 8080 端口的 tomcat 服务。
Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 的 NoSQL 数据库,并提供多种语言的 API。
1) 查看可用的 Redis 版本
访问 Redis 镜像库地址:https://hub.docker.com/_/redis?tab=tags。
可以通过 Sort by 查看其他版本的 redis,默认是最新版本 redis:latest。
可以在下拉列表中找到其他想要的版本,也可以用 docker search 命令来查看可用版本:
$ docker search redis
2) 拉取 redis 镜像
$ docker pull redis # 相当于 docker pull redis:latest
$ docker images # 查看镜像列表
3) 运行容器,并且可以通过 exec 命令进入 redis 容器。
$ docker run -itd --name redis-test -p 6379:6379 redis
参数说明:
-p 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机 ip:6379 访问到 Redis 的服务。
$ docker ps # 查看运行的容器列表
$ docker exec -it redis-test /bin/bash
root@a1c24a6cd008:/# redis-cli # 通过 redis-cli 连接测试使用 redis 服务。
127.0.0.1:6379> set test "123"
OK
MySQL 是世界上最受欢迎的开源数据库。凭借其可靠性、易用性和性能,MySQL 已成为 Web 应用程序的数据库优先选择。 MariaDB 是 MySQL 的一个分支版本。
1) 查看可用的 MariaDB 版本
访问 MariaDB 镜像库地址:https://hub.docker.com/_/mariadb?tab=tags。
可以通过 Sort by 查看其他版本的 mariadb,默认是最新版本 mariadb:latest。
可以在下拉列表中找到其他想要的版本,也可以用 docker search 命令来查看可用版本:
$ docker search mariadb
2) 拉取 mariadb 镜像
$ docker pull mariadb # 相当于 docker pull mariadb:latest
$ docker images # 查看镜像列表
3) 运行容器,并且可以通过 exec 命令进入 mariadb 容器。
$ docker run -itd --name mariadb-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mariadb
参数说明:
-p 3306:3306:映射容器服务的 3306 端口到宿主机的 3306 端口。外部可以直接通过宿主机 ip:3306 访问到 mariadb 的服务。
MYSQL_ROOT_PASSWORD=123456:设置 mariadb 服务 root 用户的密码。
$ docker ps # 查看运行的容器列表
$ docker exec -it mariadb-test /bin/bash
root@a1c24a6cd008:/# mysql -u root -p
1) 查看可用的 Python 版本
访问 Python 镜像库地址:https://hub.docker.com/_/python?tab=tags&page=1。
可以通过 Sort by 查看其他版本的 Python,默认是最新版本 python:latest。
可以在下拉列表中找到其他想要的版本,也可以用 docker search 命令来查看可用版本:
$ docker search python
2) 拉取 python 镜像
$ docker pull python:3.8-slim
$ docker images # 查看镜像列表
3) 运行容器,并且可以通过 exec 命令进入 python 容器。
$ docker run -itd --name python-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mariadb
参数说明:
-p 3306:3306:映射容器服务的 3306 端口到宿主机的 3306 端口。外部可以直接通过宿主机 ip:3306 访问到 mariadb 的服务。
MYSQL_ROOT_PASSWORD=123456:设置 mariadb 服务 root 用户的密码。
$ docker ps # 查看运行的容器列表
$ docker exec -it mariadb-test /bin/bash
root@a1c24a6cd008:/# mysql -u root -p
1) 查看可用的 PHP 版本
访问 PHP 镜像库地址:https://hub.docker.com/_/php?tab=tags。
可以通过 Sort by 查看其他版本的 php,默认是最新版本 php:latest。
可以在下拉列表中找到其他想要的版本,也可以用 docker search 命令来查看可用版本:
$ docker search php
2) 拉取 php 镜像
$ docker pull php:fpm
$ docker images # 查看镜像列表
3) Nginx + PHP 部署
(1) 启动 PHP
$ docker run --name test-php-fpm -v ~/nginx/www:/www -d php:fpm
参数说明:
--name test-php-fpm : 将容器命名为 myphp-fpm。
-v ~/nginx/www:/www : 将主机中项目的目录 www 挂载到容器的 /www
(2) 配置文件
$ mkdir ~/nginx/conf/conf.d
$ vim ~/nginx/conf/conf.d/runoob-test-php.conf # 内容如下
1 server { 2 listen 80; 3 server_name localhost; 4 5 location / { 6 root /usr/share/nginx/html; 7 index index.html index.htm index.php; 8 } 9 10 error_page 500 502 503 504 /50x.html; 11 location = /50x.html { 12 root /usr/share/nginx/html; 13 } 14 15 location ~ \.php$ { 16 fastcgi_pass php:9000; 17 fastcgi_index index.php; 18 fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name; 19 include fastcgi_params; 20 } 21 }
参数说明:
php:9000: 表示 php-fpm 服务的 URL,下面我们会具体说明。
/www/: 是 myphp-fpm 中 php 文件的存储路径,映射到本地的 ~/nginx/www 目录。
(3) 启动 nginx
$ docker run --name runoob-php-nginx -p 8083:80 -d \
-v ~/nginx/www:/usr/share/nginx/html:ro \
-v ~/nginx/conf/conf.d:/etc/nginx/conf.d:ro \
--link myphp-fpm:php \
nginx
参数说明:
-p 8083:80: 端口映射,把 nginx 中的 80 映射到本地的 8083 端口。
~/nginx/www: 是本地 html 文件的存储目录,/usr/share/nginx/html 是容器内 html 文件的存储目录。
~/nginx/conf/conf.d: 是本地 nginx 配置文件的存储目录,/etc/nginx/conf.d 是容器内 nginx 配置文件的存储目录。
--link myphp-fpm:php: 把 myphp-fpm 的网络并入 nginx,并通过修改 nginx 的
/etc/hosts,把域名 php 映射成 127.0.0.1,让 nginx 通过 php:9000 访问 php-fpm。
在 ~/nginx/www 目录下创建 index.php,代码如下:
<?php
echo phpinfo();
?>
浏览器打开 http://127.0.0.1:8083/index.php,显示 php 配置页面。