ubuntu16、18、20安装docker、docker-compose、dnmp环境搭建

来源:赵克立博客 分类: PHP 标签:mongoDB运维发布时间:2019-09-18 12:32:35最后更新:2022-10-22 18:21:30浏览:1282
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2022-10-22 18:21:30
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

前置必装软件

安装git

sudo apt-get install git

安装docker

sudo apt-get autoremove docker-ce docker-engine docker.io
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce

这里是文档 https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1

安装docker-compose

下载docker-compose

sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

修改权限

sudo chmod +x /usr/local/bin/docker-compose

查看版本信息

docker-compose --version

文档和下载地址https://github.com/docker/compose/releases

使用dnmp项目安装

配置镜像

首先配置阿里云的镜像库,https://cr.console.aliyun.com/cn-shanghai/instances/mirrors  下面是我的配置,不保证你看到这篇文章时还可以用,最好自己去阿里云申请一个


sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://tg9ao60c.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

安装openresty mysql5.7 php72 redis

本项目原地址为 https://github.com/yeszao/dnmp 我自己直接弄过来后修改啦里面的mysql版本为5.7并且把配置文件直接设置好,为啦一键安装方便


下面安装方法为1.x安装方法,原项目已经更新到2.x,请稳步github查看最新的安装和使用方法

clone dnmp项目

sudo git clone https://gitee.com/ainiku/dnmp.git

如果不是root用户,还需将当前用户加入docker用户组:

sudo gpasswd -a ${USER} docker

开始安装

cd dnmp
sudo docker-compose up -d

到这里就算成功啦

1909181568809234102618.png

如果中间有提示让你 docker-compose build 的话再运行下下面命令编译(这种情况是因为项目默认只安装内置的php扩展,如果添加啦新的扩展后需要再编译下),如下图

1909191568887272182772.png

sudo docker-compose build

服务管理

请在下面命令后面加上服务器名称,dnmp支持的服务名有:nginx、openresty、php72、php56、mysql、mongo、redis、phpmyadmin、phpredisadmin、elasticsearch、adminmongo、rabbitmq、kibana

sudo docker-compose up                         # 创建并且启动所有容器
sudo docker-compose up 服务1 服务2 ...         # 创建并且启动指定的多个容器
sudo docker-compose up -d 服务1 服务2 ...      # 创建并且已后台运行的方式启动多个容器
sudo docker-compose start 服务1 服务2 ...      # 启动服务
sudo docker-compose stop 服务1 服务2 ...       # 停止服务
sudo docker-compose restart 服务1 服务2 ...    # 重启服务
sudo docker-compose build 服务1 服务2 ...      # 构建或者重新构建服务
sudo docker-compose rm 服务1 服务2 ...         # 删除并且停止容器
sudo docker-compose down 服务1 服务2 ...       # 停止并删除容器,网络,图像和挂载卷

php版本切换

直接在nginx配置里修改

fastcgi_pass   php72:9000;
fastcgi_pass   php56:9000;
#修改后重启nginx服务器
docker exec -it dnmp_openresty_1 openresty -s reload
#或者使用下面
docker-compose restart openresty

主机环境配置

在主机执行php命令

打开 ~/.bashrc 文件添加下面命令然后执行 source ~/.baserc  让配置生效,就可以在主机命令行中直接执行 php -v  命令

php () {
    tty=
    tty -s && tty=--tty
    sudo docker run \
        $tty \
        --interactive \
        --rm \
        --volume $PWD:/var/www/html:rw \
        --workdir /var/www/html \
        dnmp_php72 php "$@"
}

快捷操作命令

跟上面同样的操作,添加进去后就可以在主机命令行执行 d...  别名来执行对应的命令

alias dnginx='sudo docker exec -it dnmp_nginx_1 /bin/sh'
alias dphp72='sudo docker exec -it dnmp_php72_1 /bin/sh'
alias dphp56='sudo docker exec -it dnmp_php56_1 /bin/sh'
alias dmysql='sudo docker exec -it dnmp_mysql_1 /bin/bash'
alias dredis='sudo docker exec -it dnmp_redis_1 /bin/sh'

安装composer

在主机HOST中使用composer,创建一个目录,用以保存composer的配置和缓存文件,要注意目录的权限

sudo mkdir ~/dnmp/composer
sudo chmod 777 ~/dnmp/composer

在~/.bashrc文件添加下面代码后,运行 source ~/.bashrc 使用命令生效

composer () {
    tty=
    tty -s && tty=--tty
    sudo docker run \
        $tty \
        --interactive \
        --rm \
        --user $(id -u):$(id -g) \
        --volume ~/dnmp/composer:/tmp \
        --volume /etc/passwd:/etc/passwd:ro \
        --volume /etc/group:/etc/group:ro \
        --volume $(pwd):/app \
        composer "$@"
}

然后就可以在任何地方使用composer命令啦

composer -v

特别注意

web项目中连接mysql主机的时候 host应该填写 dnmp_mysql_1 如果你填localhost 127.0.0.1会报错,

也可以创建一个桥接网络

下面的localNet是网络名字,可自行修改;关于192.168.0.0这个子网,也可以自行定义.

默认按照下面的命令,执行后将可以通过192.168.0.1访问宿主机.

docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 localNet

地址直接用 192.168.0.1 就可以访问宿主机


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python