Docker 配置 LAMP V1.0

本文详细介绍了在CentOS 7上通过Docker配置LAMP环境的步骤,包括更新系统、安装Docker、Docker Compose,以及部署MySQL、PHP、Apache和phpMyAdmin。最后给出了启动和重启相关服务的命令,并提供了官方Docker镜像仓库链接。
摘要由CSDN通过智能技术生成

Docker 配置 LAMP V1.0

环境说明:

CentOS 7

操作步骤:

Step 1 更新系统

运行yum update来更新系统。

Step 2 检查CentOS版本

运行uname -r来检查系统版本,注意,CentOS系统的内核版本必须要高于3.10

[root@iZ2zebfvkmy1wcs3yeowl8Z ~]# uname -r
3.10.0-693.2.2.el7.x86_64

Step 3 检查系统中是否安装有旧版本的Docker

运行下面的命令

yum remove \
docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

输出结果

Loaded plugins: fastestmirror
No Match for argument: docker
No Match for argument: docker-client
No Match for argument: docker-client-latest
No Match for argument: docker-common
No Match for argument: docker-latest
No Match for argument: docker-latest-logrotate
No Match for argument: docker-logrotate
No Match for argument: docker-engine
No Packages marked for removal

Step 4 通过repository来安装Docker

(1) 运行 yum install -y yum-utils device-mapper-persistent-data lvm2

(2) 运行 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

(3) 运行 yum install docker-ce docker-ce-cli containerd.io 来安装最新版

(4) 运行 yum list docker-ce --showduplicates | sort -r 来获取不同版本的Docker的名称

(5) 运行 yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io 来安装指定版本的Docker

注意,第3步和第4、5步只需要选择一个就可以,这里推荐使用最新版本的Docker,也就是只运行到第三步就可以。

(6) 运行 systemctl start docker 来启动Docker

(7) 运行 docker run hello-world 来检查Docker是否安装完成

正常的输出界面:

[root@iZ2zebfvkmy1wcs3yeowl8Z ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete 
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

(8) 运行 docker -v 来检查Docker版本

[root@iZ2zebfvkmy1wcs3yeowl8Z ~]# docker -v
Docker version 18.09.2, build 6247962

此时Docker安装完成。。。

Step 5 安装Docker Compose

运行 curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

[root@iZ2zebfvkmy1wcs3yeowl8Z ~]# curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   617    0   617    0     0    440      0 --:--:--  0:00:01 --:--:--   440
100 11.2M  100 11.2M    0     0  52819      0  0:03:42  0:03:42 --:--:-- 46302

官方文档: https://docs.docker.com/compose/install/

安装完成后,让Docker Compose可以被执行

运行 chmod +x /usr/local/bin/docker-compose

测试,安装是否完成,运行docker-compose --version

[root@iZ2zebfvkmy1wcs3yeowl8Z ~]# docker-compose --version
docker-compose version 1.23.2, build 1110ad01

Step 6 部署LAMP

先获取官方仓库

MySQL: docker pull mysql:5.7 推荐不要使用mysql:latest,会哭的

[root@iZ2zebfvkmy1wcs3yeowl8Z ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
6ae821421a7d: Already exists 
a9e976e3aa6d: Pull complete 
e3735e44a020: Pull complete 
bfd564e9483f: Pull complete 
df705f26e488: Pull complete 
0c5547f73d62: Pull complete 
f437382cf8a1: Pull complete 
4f22805bb6d6: Pull complete 
394f0f652697: Pull complete 
fb068b9b9d1f: Pull complete 
fdfc96ad0937: Pull complete 
Digest: sha256:8c15b2612051244d0a2b6ceb6f9bf82ddc0e909555c1067c098e5f935e2751a7
Status: Downloaded newer image for mysql:5.7

PHP7.1.26: docker pull php:7.1.26-apache

[root@iZ2zebfvkmy1wcs3yeowl8Z ~]# docker pull php:7.1.26-apache
7.1.26-apache: Pulling from library/php
6ae821421a7d: Already exists 
08f3d19635b0: Pull complete 
dc8a54b8000b: Pull complete 
b2c1d103db99: Pull complete 
edfa752aa38a: Pull complete 
583d37cbf2f0: Pull complete 
c7846a240c1d: Pull complete 
e5b0bebc05c8: Pull complete 
dff936442fec: Pull complete 
7db92f0a8965: Pull complete 
e276b8892bfd: Pull complete 
ba7cc6a46e79: Pull complete 
Digest: sha256:09f55aa638451cca24fc95afdb5a7f1979ca9d307ab8c6bb52e343696ce41c92
Status: Downloaded newer image for php:7.1.26-apache

phpmyadmin: docker pull phpmyadmin/phpmyadmin

[root@iZ2zebfvkmy1wcs3yeowl8Z ~]# docker pull phpmyadmin/phpmyadmin
Using default tag: latest
latest: Pulling from phpmyadmin/phpmyadmin
cd784148e348: Pull complete 
d207535cd57f: Pull complete 
1167ab95319c: Pull complete 
bff34bff7f50: Pull complete 
d09fbf86b8ee: Pull complete 
1cfe903e31f6: Pull complete 
88d3f120681c: Pull complete 
9077db937f31: Pull complete 
8bb3fe9faa6e: Pull complete 
17142adf57d1: Pull complete 
36147ae6ebdd: Pull complete 
1056b4fffa1d: Pull complete 
b673c9eeddc3: Pull complete 
293a885a51a7: Pull complete 
d8537b27d5ad: Pull complete 
e37128d94b06: Pull complete 
a83c7859d09a: Pull complete 
Digest: sha256:8efb1f7047d8d6c9d5061f43bb27c9b63e8cd6bd7ed6cb4ccd2a17497ae21c1f
Status: Downloaded newer image for phpmyadmin/phpmyadmin:latest

运行docker images来检查下载好的镜像

[root@iZ2zebfvkmy1wcs3yeowl8Z ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
php                     7.1.26-apache       fb6fda946df6        28 hours ago        370MB
mysql                   5.7                 e47e309f72c8        2 weeks ago         372MB
phpmyadmin/phpmyadmin   latest              c6ba363e7c9b        4 weeks ago         166MB
hello-world             latest              fce289e99eb9        7 weeks ago         1.84kB

小技巧,如何删除一个镜像(image),可以运行docker rmi IMAGE_ID 来删除一个镜像,但是要确定没有容器和这个镜像相连。否则是删除不掉的。

安装 PHP和Apache

docker run \
--restart always \
--name httpd-php \
--link mysql \
-p 80:80 \
-p 443:443 \
-v /data/docker/httpd/conf:/etc/apache2/sites-enabled \
-v /data/docker/www:/var/www/html \
-v /data/docker/httpd/logs:/var/log/apache2 \
-v /data/docker/httpd/conf:/usr/local/etc/php/php.ini \
-d php:7.1.26-apache

安装 MySQL

docker run \
--restart always \
--name mysql \
-p 3306:3306 \
-v /data/docker/mysql/data:/var/lib/mysql \
-v /data/docker/mysql/conf:/etc/mysql/conf.d \
-v /data/docker/mysql/logs:/logs \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=数据库密码 \
-e MYSQL_ROOT_PASSWORD=数据库密码 \
-d mysql:5.7 \
--character-set-server=utf8

安装 phpmyadmin

docker run \
--name phpmyadmin \
--link mysql:db \
-p 8080:80 \
-e PMA_HOST=mysql \
-e PMA_PORT=3306 \
-v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php \
-d phpmyadmin/phpmyadmin

安装完成,可以访问 ip:8080 来测试一下。

安装radis

docker run \
-p 6379:6379 \
-d redis:latest

也可以直接使用下面的方法安装,运行 vim docker_lamp.sh,然后复制下面的内容。

#!/bin/bash
function mysql()
{
    docker run \
    --restart always \
    --name mysql \
    -p 3306:3306 \
    -v /data/docker/mysql/data:/var/lib/mysql \
    -v /data/docker/mysql/conf:/etc/mysql/conf.d \
    -v /data/docker/mysql/logs:/logs \
    -e MYSQL_USER=root \
    -e MYSQL_PASSWORD=数据库密码 \
    -e MYSQL_ROOT_PASSWORD=数据库密码 \
    -d mysql:5.7 \
    --character-set-server=utf8
}

function httpd_php()
{
    docker run \
    --restart always \
    --name httpd-php \
    --link mysql \
    -p 80:80 \
    -p 443:443 \
    -v /data/docker/httpd/conf:/etc/apache2/sites-enabled \
    -v /data/docker/www:/var/www/html \
    -v /data/docker/httpd/logs:/var/log/apache2 \
    -v /data/docker/httpd/conf:/usr/local/etc/php/php.ini \
    -d php:7.1.26-apache
}

function myadmin()
{
	docker run \
    --name phpmyadmin \
    --link mysql:db \
    -p 8080:80 \
    -e PMA_HOST=mysql \
    -e PMA_PORT=3306 \
    -v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php \
    -d phpmyadmin/phpmyadmin
}

function redis()
{
    docker run \
    -p 6379:6379 \
    -d redis:latest
}
$1

然后执行下面语句安装

sh docker_lamp.sh mysql
sh docker_lamp.sh httpd_php
sh docker_lamp.sh myadmin
sh docker_lamp.sh redis

Docker Images

[root@iZ2zebfvkmy1wcs3yeowl8Z ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
php                     7.1.26-apache       fb6fda946df6        29 hours ago        370MB
redis                   latest              0f55cf3661e9        2 weeks ago         95MB
mysql                   5.7                 e47e309f72c8        2 weeks ago         372MB
phpmyadmin/phpmyadmin   latest              c6ba363e7c9b        4 weeks ago         166MB
hello-world             latest              fce289e99eb9        7 weeks ago         1.84kB

Docker Container

[root@iZ2zebfvkmy1wcs3yeowl8Z ~]# docker ps -a
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                   PORTS                                      NAMES
d85bafbad064        redis:latest            "docker-entrypoint.s…"   30 seconds ago      Up 30 seconds            0.0.0.0:6379->6379/tcp                     musing_robinson
47f9d74ae7ab        phpmyadmin/phpmyadmin   "/run.sh supervisord…"   14 minutes ago      Up 14 minutes            9000/tcp, 0.0.0.0:8080->80/tcp             phpmyadmin
aac73283b6e3        php:7.1.26-apache       "docker-php-entrypoi…"   About an hour ago   Up About an hour         0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   httpd-php
06ac44cda0c5        mysql:5.7               "docker-entrypoint.s…"   About an hour ago   Up About an hour         0.0.0.0:3306->3306/tcp, 33060/tcp          mysql
65ea36569c2c        hello-world             "/hello"                 2 hours ago         Exited (0) 2 hours ago                                              competent_cocks

安装php扩展

docker exec -it httpd-php /bin/bash

apt-get -y update --fix-missing
apt-get upgrade -y

# Install tools & libraries
apt-get -y install apt-utils nano wget dialog build-essential git curl libcurl3 libcurl3-dev zip

# Install important libraries
apt-get -y install --fix-missing apt-utils build-essential git curl libcurl3 libcurl3-dev zip libmcrypt-dev libsqlite3-dev libsqlite3-0 mysql-client zlib1g-dev libicu-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev

# Composer
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# PHP Extensions
pecl install xdebug-2.5.5 \
&& docker-php-ext-enable xdebug \
&& docker-php-ext-install mcrypt \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install pdo_sqlite \
&& docker-php-ext-install mysqli \
&& docker-php-ext-install curl \
&& docker-php-ext-install tokenizer \
&& docker-php-ext-install json \
&& docker-php-ext-install zip \
&& docker-php-ext-install -j$(nproc) intl \
&& docker-php-ext-install mbstring \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& pecl install redis \
&& docker-php-ext-enable redis

# Enable apache modules
a2enmod rewrite headers

/usr/sbin/apache2ctl -D FOREGROUND

重启PHP的命令:docker restart httpd-php

重启MySQL的命令:docker restart mysql

此时LAMP环境就部署完成了。

可以访问网址 https://hub.docker.com/search?q=&type=image 来查看官方仓库

Apache仓库: https://hub.docker.com/_/httpd

Nginx仓库: https://hub.docker.com/_/nginx

MySQL仓库: https://hub.docker.com/_/mysql

PHP仓库: https://hub.docker.com/_/php

Node.js仓库: https://hub.docker.com/_/node

Wordpress仓库: https://hub.docker.com/_/wordpress

Joomla仓库: https://hub.docker.com/_/joomla

Drupal仓库: https://hub.docker.com/_/drupal

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值