ka

一:安装docker

   1:安装所需的软件包

   yum install -y yum-utils device-mapper-persistent-data lvm2

 2:由于官方源地址比较慢,可以自己配置源地址,这里使用阿里云源地址

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3:查询docker版本 ,可以根据自己需要的版本安装

#更新软件包版本
yum makecache fast
#查询docker版本
yum list docker-ce.x86_64  --showduplicates | sort -r    #从高到低列出Docker-ce的版本

4:安装 Docker Engine-Community

yum install docker-ce docker-ce-cli containerd.io #安装最新版本

yum install docker-ce-18.06.3 docker-ce-cli-18.06.3 containerd.io #安装18.06.3版本的docker

5:启动docker

[root@ecs-b8ca-0817460 ~]# systemctl start docker   #启动
[root@ecs-b8ca-0817460 ~]# systemctl stop docker    #停止
[root@ecs-b8ca-0817460 ~]# systemctl start docker   #启动
[root@ecs-b8ca-0817460 ~]# systemctl restart docker #重启
[root@ecs-b8ca-0817460 ~]# ps -aux|grep docker
root      5007  0.1  0.4 668204 68016 ?        Ssl  21:02   0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root      5152  0.0  0.0 112724   988 pts/3    S+   21:03   0:00 grep --color=auto docker

 二:拉取镜像并启动容器

       访问: https://hub.docker.com 查看mysql的版本也可以通过docker search mysql搜索镜像

       拉取镜像 docker pull mysql  拉取的为mysql最新版本的镜像

       也可根据需要安装mysql版本,例如要安装mysql 5.7.31 docket pull mysql:5.7.31

[root@ecs-b8ca-0817460 ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10013               [OK]
mariadb                           MariaDB is a community-developed fork of MyS…   3664                [OK]
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   733                                     [OK]
percona                           Percona Server is a fork of the MySQL relati…   512                 [OK]

   安装最新mysql镜像,latest为最新的版本,下载速度一般,需要耐心等待

[root@ecs-b8ca-0817460 ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
d121f8d1c412: Downloading [==============================>                    ]  16.76MB/27.09MB
f3cebc0b4691: Download complete
1862755a0b37: Download complete
489b44f3dbb4: Download complete
690874f836db: Download complete
baa8be383ffb: Waiting
55356608b4ac: Waiting
dd35ceccb6eb: Waiting
429b35712b19: Waiting
162d8291095c: Waiting
5e500ef7181b: Waiting
af7528e958b6: Waiting

安装完成后,使用 docker images 查看安装到本地的镜像,可以按照此步骤安装php和nginx

拉取nginx镜像和php镜像

docker pull nginx 

docker pull php:7.4-fpm

查询本地已经拉取的镜像

[root@ecs-b8ca-0817460 ~]#  docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
php                 latest              8939aaed79f9        18 hours ago        405MB
nginx               latest              7e4d58f0e5f3        3 weeks ago         133MB
mysql               latest              e1d7dc9731da        3 weeks ago         544MB

三:启动 nginx php mysql 容器

docker :创建service 网络


##容器网络的查看方式

[root@root harbor]# docker network ls  

##容器创建网络

[root@root harbor]# docker network create service    

##查看网络内部信息

[root@root harbor]# docker network inspect service   

##移除指定的网络

[root@root harbor]# docker network rm service 

docker run :创建一个新的容器并运行一个命令要注意,

--name 容器名称  

-v 本地目录:容器目录  //目录映射

-p 本地端口:容器端口   //端口映射

-m 设置容器使用内存最大值 

-d  增加一个驻留在进程中长期运行的命令,

启动后并返回容器id

1、启动PHP

新建 /www目录作为项目目录,根据自己的需要做映射

把 /www 目录 映射到 /var/www/html

注:在使用nginx的时候必须先启动php容器,启动php容器后可以把php容器网络加入到nginx中,启动php时候可以不做9000端口映射

docker run --name  php-web --net=service -p 9000:9000 -v /var/www/html:/www  -d php:7.4-fpm

php安装扩展:

docker-php-ext-install 扩展名称

docker-php-ext-install pdo_mysql

2、启动nginx

conf 目录 映射到 /etc/nginx

conf/conf.d目录 映射到/etc/nginx/conf.d 也可以只映射这一个文件

logs 目录映射到 /var/log/nginx

--link 设置 nginx容器和php容器网络互通

注:在启动nginx的时候,处理程序目录映射的时候,应该把php容器中的/var/www/html目录和nginx容器中的/usr/share/nginx/html目录映射到同一目录下

​
docker run -d --name nginx-web -p 80:80 --net=service -v /www:/usr/share/nginx/html -v /usr/local/nginx/conf:/etc/nginx -v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d -v /usr/local/nginx/logs:/var/log/nginx --link php-web:php nginx

​docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
cc53a678091d        nginx               "/docker-entrypoint.…"   49 minutes ago      Up 4 seconds        0.0.0.0:80->80/tcp   nginx-web

注意:docker ps 时,如果nginx不存在,在需要查看log日志  docker logs 容器id //新建容器的时候会返回容器ID

映射配置文件的目录 在新建容器后,需要自己在主机目录 /usr/local/nginx/conf 目录新建 nginx.conf  在/usr/local/nginx/conf/conf.d 目录新建default.conf  以及 conf 目录需要的文件,也可以拷贝把容器配置文件拷贝到主机的映射目录:

  如果进入不到容器内,则可以按照最简单的方法新建容器并启动,把配置文件拷贝出来,在删除

docker run -d --name nginx-web -p 80:80  nginx

#返回容器ID cc53a678091d

docker cp cc53a678091d:/etc/nginx /usr/local/nginx/conf

docker rm nginx-web

配置php和nginx 

编辑:/usr/local/nginx/conf/conf.d/default.conf

 /www 目录是php解析目录,在运行php容器的时候 已经映射到/usr/local/nginx/html 了 配置的时候 要配置容器的目录,要不会报错。

   location / {
        root   /usr/share/nginx/html/{项目目录}; //nginx的容器的目录 
        index  index.php index.html index.htm;
        if (!-e $request_filename) { #配置重写,url去掉index.php
            rewrite ^/index.php(.*)$ /index.php?s=$1 last;
            rewrite ^(.*)$ /index.php?s=$1 last;
         }

    }

    location ~ \.php(.*)$ {
         root           /var/www/html/(项目目录); //必须是容器中的目录,而不是你挂在宿主主机的目录
         fastcgi_pass   php:9000; //如果没有在nginx容器中加入php网络,这需监听 php容器IP:9000
         fastcgi_index  index.php;
         fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         fastcgi_param  PATH_INFO  $fastcgi_path_info;
         include fastcgi_params;
    }

注:php容器的/var/www/html目录 和 nginx的/usr/share/nginx/html目录映射的都为宿主主机的/www目录 ,配置的nginx的时候一定要分清楚,否则无法解析

设置容器时区:

进入容器(如果要是执行报错,请试一下下面两个命令)

docker exec -it cc53a678091d /bin/bash

或者 

docker exec -it cc53a678091d bash

或者

docker exec -it cc53a678091d sh

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

查看容器ip:

[root@ecs-b8ca-0817460 ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' php-web
172.17.0.3
[root@ecs-b8ca-0817460 ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' nginx-web
172.17.0.2
[root@ecs-b8ca-0817460 ~]#

3、启动mysql

在 /usr/local/mysql

新建:conf logs mysqldata mysql-files

docker run --name mysql-web --net=service -v /usr/local/mysql/conf:/etc/mysql -v /usr/local/mysql/logs:/logs -v /usr/local/mysql/mysqldata:/var/lib/mysql -v /usr/local/mysql/mysql-files:/var/lib/mysql-files/ -e MYSQL_ROOT_PASSWORD=密码 -d -i -p 3306:3306 mysql

MYSQL_ROOT_PASSWORD:是你自己设置的mysql root用户的密码

查询mysql容器的ip:

[root@ecs-b8ca-0817460 ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-web
172.17.0.3

查看容器的端口映射:

[root@ecs-b8ca-0817460 ~]# docker port  mysql-web

查看容器的目录映射:

[root@ecs-b8ca-0817460 ~]# docker inspect mysql-web

注:在用程序连接mysql的时候一定使用mysql的容器ip,而不是宿主主机的局域网ip,或者是127.0.0.1,否则可能会连不上

mongo数据库安装:

docker run -d -p 27017:27017 --name mongodb-server --network service -e MONGODB_USERNAME=root -e MONGODB_ROOT_PASSWORD=aa123456 bitnami/mongodb:latest

redis数据库安装:

docker run -d --name redis-server --network service -p 6379:6379 -e ALLOW_EMPTY_PASSWORD=yes bitnami/redis:latest

zookeeper:安装

docker run -d --name zookeeper-server -p 2181:2181 --network service -v /etc/localtime:/etc/localtime -e ALLOW_ANONYMOUS_LOGIN=yes bitnami/zookeeper:latest

kafka:安装教程

docker run  -d --name kafka-server -p 9092:9092 --network service  -e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-server:2181 -e ALLOW_PLAINTEXT_LISTENER=yes bitnami/kafka:latest

etcd:安装

docker run -d --name etcd-serve --network service -p 2379:2379 -p 2380:2380 --env ALLOW_NONE_AUTHENTICATION=yes --env ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379 bitnami/etcd:latest

总结:使用docker安装php+nginx+mysql环境,很方便快捷,也能防止php的程序的上传漏洞被攻破时候,影响服务器系统,建议mysql不要用docker安装,你要是使用shell脚本备份数据库的功能就无法实现,例如:docker可以了安装php各种版本做版本之间的切换也很方便。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。