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