2013年发布至今, Docker 一直广受瞩目,被认为可能会改变软件行业。但是,许多人并不清楚 Docker 到底是什么,要解决什么问题,好处又在哪里?今天通过一个简单的LNMP项目架构部署环节让大家让了解docker的使用方法,所有的软装按照均采用docker部署。
第一步、centos7安装docker
1.1如果之前安装过docker,卸载旧版本
yum remove docker docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
1.2安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
1.3添加软件源信息(可选)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.4更新yum包缓存(可选)
yum makecache fast
1.5安装docker-ce
yum -y install docker-ce
1.6启动docker后台服务及开机启动
systemctl enable docker && systemctl start docker
1.7docker相关配置
# CentOS7的Docker默认存储路径修改 vi /usr/lib/systemd/system/docker.service # 找到以下内容 ExecStart=/usr/bin/dockerd-current \ # -g 或 --graph 或 --data-root,插入或修改后保存 -g /datadisk/docker/data # 修改后需要重载设置 systemctl daemon-reload #配置镜像加速 i.获取阿里云镜像加速器参考:https://blog.csdn.net/li1325169021/article/details/90770119 [root@localhost ~]# mkdir -p /etc/docker [root@localhost ~]# vim /etc/docker/daemon.json 在文件中添加如下配置 #阿里云镜像加速器 {"registry-mirrors": ["http://hub-mirror.c.163.com"] } [root@localhost ~]# systemctl daemon-reload [root@localhost ~]# systemctl restart docker ii.配置镜像加速后重启docker可能会报错,参考:https://blog.csdn.net/li1325169021/article/details/90782846
1.8查看docker版本
docker version
1.9运行 hello-world
docker run hello-world
1.10卸载删除docker-ce
[root@localhost ~]# systemctl stop docker [root@localhost ~]# yum -y remove docker-ce [root@localhost ~]# rm -rf /var/lib/docker
第二步、Docker安装部署Nginx
2.1拉取官方的最新版本的镜像
docker pull nginx:latest
2.2拉取官方的最新版本的镜像
docker pull nginx:latest
2.3docker命令查看是否已安装了 nginx
docker images #在上图中可以看到我们已经安装了最新版本(latest)的 nginx 镜像。
2.4安装完成后,运行 nginx 容器
docker run --name nginx-test -p 8081:80 -d nginx #参数说明: --name nginx-test:容器名称。 -p 8081:80: 端口进行映射,将本地 8081 端口映射到容器内部的 80 端口。 -d nginx: 设置容器在在后台一直运行。
2.5检查nginx 容器是否运行成功
docker container ls #说明 如果安装成功,是可以看到name为nginx-test已经存在运行列表中,期间如果我们想修改端口,重新运行容器的话 要先终止,在删除 docker container kill [containID] docker container rm[containID]
最后我们可以通过浏览器可以直接访问 IP地址:8081,检查nginx 服务是否开启。
到这步nginx基本安装成功了,但是还是不行,因为运行的Nginx的配置文件是在容器内部的,不方便修改,所以我们可以先把容器内的配置文件复制到宿主机。
2.6查看容器中nginx的配置文件目录
docker exec nginx-prod ls /etc/nginx conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf #说明 nginx-prod是你运行nginx容器的名称,可以通过docker container ls查看,以上是你容器/etc/nginx目录结构 容器中默认的nginx目录地址:root /usr/share/nginx/html; #当然你也可以用下面命令进入容器 docker exec -it 243c32535da7 /bin/bash #说明 243c32535da7:是你容器的id #进入容器,发现容器根目录如下 [root@lxh2eeg4mh7oujtc-1122667 leixiaotian]# docker exec -it d977338be31a /bin/bash root@d977338be31a:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var www wwwlogs
2.7复制容器内的配置文件到宿主机
如果你不想复制整个文件夹,可仅复制conf.d文件夹内的配置文件,运行时挂载相应文件即可
docker cp -a nginx-prod:/etc/nginx/ /srv/nginx/conf #说明 nginx-prod依然是你的容器运行名称
2.8停止Nginx容器并删除
我们要重新运行容器,挂载配置文件,那么这个容器就没用了,需要停止再删除
docker stop nginx-prod docker rm nginx-prod #说明 nginx-prod依然是你的容器运行名称,或者也可以用下面方式 docker container kill [containID] docker container rm[containID]
2.9重新运行容器,并挂载我们在2.7步复制出来的配置文件目录
docker run -p 8081:80 --restart always --name nginx-prod -v /srv/nginx/www:/www -v /srv/nginx/conf/:/etc/nginx/ -v /srv/nginx/logs:/var/log/nginx -v /srv/nginx/wwwlogs:/wwwlogs -d nginx #说明 --restart always :无论退出状态是如何,都重启容器 -v:挂载命令,主机目录:容器目录,当然你如果不想挂载那么多,只挂载配置文件也行,注意,这个时候你需要复制一份项目目录到容器中去 所以,/srv/nginx/www:/www这个挂载的作用就是把你主机项目文件夹挂载到容器中,然后再在主机配置文件nginx.conf中,设置root /www即可 最后强调下,挂载的配置文件中设置的根目录不是宿主机的目录,而是容器的根目录。 推荐挂载宿主机总目录到容器总目录,如:-v /data/www:/www
2.10修改配置文件,重启Nginx
到此Nginx已安装完成,如有需要就直接修改/srv/nginx/conf/conf.d目录下的配置文件,然后重启Nginx容器即可生效
docker restart nginx-prod
第三步、Docker安装部署PHP7
3.1拉取官方的PHP7.2.25镜像
查找 Docker Hub 上的 php 镜像:
可以通过 Sort by 查看其他版本的 php,默认是最新版本 php:latest。此外,我们还可以用 docker search php 命令来查看可用版本。这里我们拉取官方的镜像,标签为7.2.25-fpm
docker pull php:7.2.25-fpm
3.2检查PHP7.2.25镜像
docker images
3.3运行PHP镜像
docker run --name php7 -v /data/www:/www -d php:7.2.25-fpm docker run --name php7 -p 9000:9000 -v /data/www:/www -d php:7.2.25-fpm #说明 这里一定记得要挂载目录,每个容器是独立的,前面挂载过新的容器也要挂载。这里如果不定义端口映射的话, 后面的nginx中的default.conf配置文件需要把127.0.0.1:9000改成php-fpm的地址172.1.0.3:9000 容器的ip地址查看命令:docker inspect c13785c033c3(容器ID) -d php:7.2.25-fpm 后台运行 我这边配置的就是用无,端口映射+配置php-fpm的地址172.1.0.3:9000 #错误 connect() failed (111: Connection refused) while connecting to upstream, client: 183.14.30.76, service 把fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;这一行 改为:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
3.4测试PHP环境是否安装成功
首先在宿主机/data/www/test/目录下,新增test.php文件
<?php phpinfo(); ?> #为什么我们要在/data/www/test目录下新增test.php文件,因为我在文件/srv/nginx/conf/conf.d/default.conf中 设置的root /www/test,而我挂载的项目根目录是-v /data/www:/www,所以宿主机的/data/www/test目录正是对应/www/test目录
然后在浏览器运行ip:8081/test.php
第四步、Docker安装部署MySQL
4.1拉取官方的MySQL8.0.18镜像
拉取MySQL镜像,可参照PHP的方法,在 Docker Hub 上的 查找你需要的MySQL 镜像:
docker pull mysql:8.0.18
4.2查看本地镜像
docker images
4.3运行MySQL容器
安装完成后,我们可以使用以下命令来运行 mysql 容器
docker run -itd --name mysql-prod -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.18 #参数 -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。 MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
4.4容器机登录MySQL
容器可以通过 root 和密码 123456 访问 MySQL 服务
mysql -h localhost -u root -p #创建数据库 CREATE DATABASE `laravel` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
#当然在这步可能你的php-fpm容器连接不上mysql容器,因为默认的php-fpm是没有安装pdo_mysql扩展的 #所以通过以下三步解决pdo_mysql安装 1.进入到php容器中:docker exec -it [容器ID] /bin/bash 2.进入容器后,切换到目录:/usr/local/bin 3.执行命令安装扩展:docker-php-ext-install pdo pdo_mysql 4.重启php容器:docker restart php7 #解决MySql出现的[2054]连接失败的问题 #登录mysqlmysql -u root -p ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; #修改项目mysql配置文件中的host DB_HOST=172.17.0.4 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=123456
至此,LNMP所有的软件已全部使用Docker安装完成,相信你通过对本文的阅读,对docker有了更深层的了解!