Docker 安装 Nginx
方法一、docker pull nginx
查找 Docker Hub 上的 nginx 镜像
summer@ubuntu:~$ docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 3260 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker c... 674 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable ... 207 [OK]
million12/nginx-php Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS... 67 [OK]
maxexcloo/nginx-php Docker framework container with Nginx and ... 57 [OK]
这里我们拉取官方的镜像
$ docker pull nginx
等待下载完成后,我们就可以在本地镜像列表里查到 REPOSITORY 为 nginx 的镜像。
summer@ubuntu:~$ docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 555bbd91e13c 3 days ago 182.8 MB
nginx 部署
首先,创建目录 nginx, 用于存放后面的相关东西。
$ mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf
拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录,容器 ID 可以查看 docker ps 命令输入中的第一列:
docker cp 6dd4380ba708:/etc/nginx/nginx.conf ~/nginx/conf
- www: 目录将映射为 nginx 容器配置的虚拟目录。
- logs: 目录将映射为 nginx 容器的日志目录。
- conf: 目录里的配置文件将映射为 nginx 容器的配置文件。
部署命令
$ docker run -d -p 80:80 --name wavefar-nginx -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/logs:/var/log/nginx nginx
命令说明:
-
-p 80:80: 将容器的 80 端口映射到主机的 80 端口。
-
-d:
设置容器在在后台一直运行。 -
--name wavefar-nginx:将容器命名为 wavefar-nginx。
-
~/nginx/www:/usr/share/nginx/html:将我们自己创建的 www 目录挂载到容器的 /usr/share/nginx/html。
-
-v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将我们自己创建的 nginx.conf 挂载到容器的 /etc/nginx/nginx.conf。
-
-v ~/nginx/logs:/var/log/nginx:将我们自己创建的 logs 挂载到容器的 /var/log/nginx。
启动以上命令后进入 ~/nginx/www 目录:
$ cd ~/nginx/www
创建 index.html 文件,内容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>IT俱乐部(52it.club)</title>
</head>
<body>
<h1>我的第一个标题</h1>
<p>我的第一个段落。</p>
</body>
</html>
输出结果为:
相关命令
如果要重新载入 NGINX 可以使用以下命令发送 HUP 信号到容器:
$ docker kill -s HUP wavefar-nginx
重启 NGINX 容器命令:
$ docker restart wavefar-nginx
启动 NGINX 容器命令:
$ docker start wavefar-nginx
停止 NGINX 容器命令:
$ docker stop wavefar-nginx
Docker 安装 PHP
安装 PHP 镜像
docker pull php
查找Docker Hub上的php镜像
summer@ubuntu:~$ sudo docker search php
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
php While designed for web development, the PH... 4486 [OK]
phpmyadmin/phpmyadmin A web interface for MySQL and MariaDB. 766 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable ... 712 [OK]
adminer Database management in a single PHP file. 242 [OK]
php-zendserver Zend Server - the integrated PHP applicati... 164 [OK]
webdevops/php-nginx Nginx with PHP-FPM 125 [OK]
webdevops/php-apache-dev PHP with Apache for Development (eg. with ... 102 [OK]
webdevops/php-apache Apache with PHP-FPM (based on webdevops/php) 85 [OK]
phpunit/phpunit PHPUnit is a programmer-oriented testing f... 71 [OK]
bitnami/php-fpm Bitnami PHP-FPM Docker Image 69 [OK]
nazarpc/phpmyadmin phpMyAdmin as Docker container, based on o... 60 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 50 [OK]
tetraweb/php PHP 5.5, 5.6, 7.0, 7.1 for CI and running ... 32 [OK]
这里我们拉取官方的镜像,标签为5.6-fpm
summer@ubuntu:~$ docker pull php:5.6-fpm
等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为php,标签为5.6-fpm的镜像。
summer@ubuntu:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
php 5.6-fpm 3458979c7744 3 months ago 344 MB
首先,创建目录php-fpm,用于存放后面的相关东西。
summer@ubuntu:~$ mkdir -p ~/php-fpm/logs ~/php-fpm/conf
logs目录将映射为php-fpm容器的日志目录
conf目录里的配置文件将映射为php-fpm容器的配置文件
使用php-fpm镜像
运行容器
summer@ubuntu:~$ sudo docker run -p 9000:9000 --name wavefar-php-fpm -v ~/nginx/www:/www -v $PWD/conf:/usr/local/etc/php -v $PWD/logs:/phplogs -d php:5.6-fpm
d6bb33b4d196336d7dff16d02369a212847a7e0a14779962ab5578cf1325fb38
命令说明:
-
-p 9000:9000 :将容器的9000端口映射到主机的9000端口
-
--name wavefar-php-fpm :将容器命名为myphp-fpm
-
-v ~/nginx/www:/www :将主机中项目的目录www挂载到容器的/www
-
-v $PWD/conf:/usr/local/etc/php :将主机中当前目录下的conf目录挂载到容器的/usr/local/etc/php
-
-v $PWD/logs:/phplogs :将主机中当前目录下的logs目录挂载到容器的/phplogs
查看容器启动情况
summer@ubuntu:~$ docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
d6bb33b4d196 php:5.6-fpm "php-fpm" ... 0.0.0.0:9000->9000/tcp wavefar-php-fpm
修改docker容器Nginx里的配置信息:
1、进入docker容器
sudo docker exec -it wavefar-nginx /bin/bash
2、由于默认docker容器里没有安装vim,所以需要安装vim
更新来源
root@caba367f2269:/# apt-get update
或
修改来源
root@caba367f2269:/# mv /etc/apt/sources.list /etc/apt/sources.list.bak && \
echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list && \
echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list && \
echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list && \
echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
安装vim
root@caba367f2269:/# apt-get install -y vim
PS:此处是通过nginx+php实现web服务,nginx配置文件的fastcgi_pass应该配置为wavefar-php-fpm容器的IP。
fastcgi_pass 172.17.0.3:9000;
容器IP的查方法
docker inspect 容器ID或容器名 |grep '"IPAddress"'
Docker 安装 MySQL
方法一、docker pull mysql
查找Docker Hub上的mysql镜像
summer@ubuntu:~$ docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relati... 2529 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Crea... 161 [OK]
centurylink/mysql Image containing mysql. Optimized to be li... 45 [OK]
sameersbn/mysql 36 [OK]
google/mysql MySQL server for Google Compute Engine 16 [OK]
appcontainers/mysql Centos/Debian Based Customizable MySQL Con... 8 [OK]
marvambass/mysql MySQL Server based on Ubuntu 14.04 6 [OK]
drupaldocker/mysql MySQL for Drupal 2 [OK]
azukiapp/mysql Docker image to run MySQL by Azuki - http:... 2 [OK]
...
这里我们拉取官方的镜像,标签为5.6
summer@ubuntu:~$ docker pull mysql:5.6
等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为mysql,标签为5.6的镜像。
summer@ubuntu:~$ docker images |grep mysql
mysql 5.6 2c0964ec182a 3 weeks ago 329 MB
首先,创建目录mysql,用于存放后面的相关东西。
summer@ubuntu:~$ mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/conf
data目录将映射为mysql容器配置的数据文件存放路径
logs目录将映射为mysql容器的日志目录
conf目录里的配置文件将映射为mysql容器的配置文件
创建完成后,我们可以在本地的镜像列表里查找到刚刚创建的镜像
summer@ubuntu:~$: docker images |grep mysql
mysql 5.6 2c0964ec182a 3 weeks ago 329 MB
使用mysql镜像
运行容器
summer@ubuntu:~$ docker run -p 3306:3306 --name wavefar-mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
21cb89213c93d805c5bacf1028a0da7b5c5852761ba81327e6b99bb3ea89930e
命令说明:
-
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
-
-v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
-
-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
-
-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
-
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
查看容器启动情况
summer@ubuntu:~$ docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
21cb89213c93 mysql:5.6 "docker-entrypoint.sh" ... 0.0.0.0:3306->3306/tcp wavefar-mysql
编写shell脚本,快速启动docker
建立一个目录专门存放docker启动脚本:
summer@ubuntu:~$ sudo mkdir start_docker
cd start_docker
1、添加MySQL快速启动脚本:
sudo vim start_docker_mysql.sh
添加以下内容并保存:
sudo docker run --name mysql -p 3306:3306 -d -e MYSQL_ROOT_PASSWORD=123456 -v /home/docker-mysql:/var/lib/mysql mysql
2、添加PHP快速启动脚本:
sudo vim start_docker_php.sh
添加以下内容并保存:
sudo docker run --name php \
--link=mysql:mysql -d \
-v ~/nginx/www:/home/www \
-v ~/nginx/logs:/var/log/nginx \
-v /tmp:/tmp \
-v /etc/localtime:/etc/localtime --privileged=true \
php:5.6-fpm
3、添加Nginx 快速启动脚本:
sudo vim start_docker_nginx.sh
添加以下内容并保存:
sudo docker stop nginx
sudo docker rm nginx
sudo docker run \
--name nginx \
--link=php:php \
--link=mysql:mysql \
-d -p 80:80 \
-v ~/nginx/www:/home/www \
-v ~/nginx/vhosts:/etc/nginx/conf.d \
-v ~/nginx/logs:/var/log/nginx \
nginx
4、添加Redis 快速启动脚本
sudo vim start_docker_redis.sh
添加以下内容并保存:
sudo docker run -p 6379:6379 -v $PWD/data:/data -d redis:3.2 redis-server --appendonly yes