一.安装docker
Docker要求运行在Centos 7上,要求系统为64位,系统内核版本3.10以上

1.uname -an 查看当前系统版本

2.yum -y install docker 下载安装docker

3.service docker start  启动docker服务

4.docker version  检查docker是否安装成功

当看到下图的信息,就是表示本机docker已经安装成功,很简单

二.镜像操作
创建容器要以镜像为基础,所以先讲下docker镜像的操作

搜索镜像

docker images ll 查看下本机的是否已经有了镜像

目前机器里还没有镜像,去Docker Hub下载(镜像还可自定义,这里就不细说了)

docker search java  ,还能指定具体的版本进行下载,

例如:docker search  Ubuntu:1.2.5.4,可以进行搜docker Hub 会列出很多镜像

下载镜像

docker pull docker.io/nginx 进行下载

下载到本地的镜像要比docker Hub上搜索出来的要大,因为下载过程中自动解压了,在查看镜像列表就有了刚才下载的镜像

列表包含了仓库名,版本标签,镜像ID,创建时间以及所占用的空间

删除镜像

删除没用的镜像docker rmi镜像id

三.镜像的创建与管理
前边我们已经下载好了Nginx的镜像,接下来我们就创建一个只有Nginx应用的容器docker run -i -t <IMAGE_ID> /bin/bash:-i:标准输入给容器 -t:分配一个虚拟终端 /bin/bash:执行bash脚本,​​​​​​

docker run -idt --name container_nginx -p 8080:80  docker.io/nginx
启动一个使用镜像docker.io/nginx,名字container_nginx的容器,-p 8080:80表示将容器的80端口映射到主机的8080端口,这样我们只要访问主机的8080端口就可以访问到容器的服务了。

注意:name前面是两个-, 端口前面有-p, docker.io/nginx是镜像名,8080是主机的端口,80是Nginx应用的端口

主机上的一个端口只能映射一个容器端口,不可以多个容器端口对应一个主机端口(如果容器安装的centos类的系统,那么容器端口随便设定,但如果容器内只是单纯的应用,那么容器端口要是应用自身的端口)

这样我们就创建并启动了一个容器!

exit 退出容器

docker ps 查看运行中的容器

docker ps -a 查看运行中和非运行中的所有容器

docker exec -it container_nginx /bin/bash 进入容器

如果容器还未启动 执行docker start container_nginx
进入容器后启动Nginx

whereis nginx 找Nginx的启动目录

[root@iz2zehzeir87zi8q99krk1z ~]# docker start container_nginx
container_nginx
[root@iz2zehzeir87zi8q99krk1z ~]# docker exec -it container_nginx /bin/bash
root@84683e425116:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@84683e425116:/# /usr/sbin/nginx

此时在浏览器访问 http://51.110.218.9:8080/ 就可以直接访问容器内的Nginx

如果访问不成功,可能是主机端口的防火墙开着,执行下边的命令关闭

/ sbin / iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
由于我用的阿里云服务器,所以需要在阿里云把8080端口开放

删除容器

容器删除之前先将容器停止

docker stop container_nginx 或者是容器的id

docker rm -f container_nginx 容器删除
docker start 与 docker run 的区别

docker start name 启动一个已经创建的容器

docker run 创建并启动一个容器
docker run 命令其实是 docker create 和 docker start 的命令组合,先执行docker create 创建一个容器 再接着docker start启动

主机和容器文件相互复制

从主机复制到容器 sudo docker cp host_path containerID:container_path

从容器复制到主机 sudo docker cp containerID:container_path host_path
请注意,以上这两个命令都是在主机中执行的,不能再容器中执行

docker cp container_nginx:/usr/local/xin.txt  /usr/local/software/   容器向主机复制文件
docker cp /usr/local/xinzhifu.txt  container_nginx:/usr/local/  主机向容器复制文件

这样一个基础的docker容器就创建完了 。。。。。。。。。。。。

反过来大家再看一看docker的容器与镜像的区别  https://www.cnblogs.com/linjiaxin/p/7381421.html

那么其实镜像与容器的本质区别并不大,那么镜像可以生成容器 ,容器是否可以做成镜像呢?

docket commit container_nginx  image_nginx:v1

容器名 自己起一个镜像的名字:版本号
 用当前的容器生成了redis镜像

例如:A、B两台机器都想安装redis,A机器上创建容器并在容器中做好redis的一切配置,让后将这个容器docker commit 成镜像image_redis,B机器也想要安装redis,直接用镜像image_redis创建容器就行了,docker就是做这样一劳永逸的事情。

而且传统方式得在每台机器上安装配置redis非常麻烦

四.镜像的导入与导出
 
镜像压缩打包 (主机上进行操作),有两种方式 docker save 与 docker load 和 docker export 与 docker import

docker save nginx | gzip > nginx_xin_image.tar.gz  将现有的镜像压缩打包

docker load -i nginx_xin_image.tar.gz 压缩的镜像解压

docker images 进行查看
docker save 是直接将镜像进行打包   docker save <镜像名>或<镜像id>

docker export container_nginx> nginx_image.tar

cat nginx_image.tar | sudo docker import  - nginx_image:import
docker export 是直接将容器进行打包   docker save <容器名>或<容器id>

需要注意两种方法配套的,切不可混用。虽然导入导出时没问题,但是在创建容器时候会报错

如果使用import导入save产生的文件,虽然导入不提示错误,但是启动容器时会提示失败,

会出现类似"docker: Error response from daemon: Container command not found or does not exist"的错误。

类似,使用load载入export产生的文件,也会出现问题。

——————————————————————————————————————————————————————————————————————

因为之前服务器是装着军哥的lnmp1.4,担心跟 docker 有冲突,所以一直也没有去接触 docker,另外一方面是自己懒,因为每次折腾,没有个一两天是完事不了的(其实就是水平 low 呗),好了,这不蹭着暑假这波(从去年就喊,每次给服务器搬个家,累得要死,赶紧换 docker 了)今天可算是真枪实战一波了。

建议阅读本文之前可以先去docker 官网先了解下容器,镜像,仓库等概念,再来观看本文的操作!

1、准备 docker 的运行环境

①查看自己服务器内核版本,命令: uname  –a  返回结果在 3.1  64bit 的,即可安装。

②不行的话建议升级内核版本后,再来安装。docker 内核升级教程可参考:

因为我是结合这两篇教程操作的,所以就放着两篇地址,其他的没操作过,没话语权。这里建议按步骤走,网上的很多教程有这坑,这步操作好了,就可以开始初探 docker 了。

2、安装 docker

①先更新下 yum,命令 yum update

②添加 yum 仓库,命令如下

  1. tee /etc/yum.repos.d/docker.repo <<-'EOF'
  2. [dockerrepo]
  3. name=Docker Repository
  4. baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
  5. enabled=1
  6. gpgcheck=1
  7. gpgkey=https://yum.dockerproject.org/gpg
  8. EOF

③安装 docker 命令:yum install -y docker-engine

安装好,如下图:

图片中有句 Cannot connect to the Dokcer daemon。。。我当时装好的时候也有这句,我没管他, 也不影响使用。继续。

④启动 docker 命令 service docker start

上面这部分教程来源:linux 上安装 Docker(非常简单的安装方法),当时在查找教程中还发现个问题,就是有的命令带有 sodo (sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作),因为我自己都是用 root 操作的,所以不存在这个问题。

3、安装 mysql

①去 docker 仓库(https://hub.docker.com/)拉取 mysql 镜像,命令 docker pull mysql

该命令是拉取最新的 mysql 版本,如果你要指定 mysql 版本,命令 docker pull mysql:5.6

②创建 mysql 容器,命令

  1. docker run \
  2. --name web-mysql \
  3. -d -p 3306:3306 \
  4. -e MYSQL_ROOT_PASSWORD=123456789 \
  5. -v /web/mysql/data:/var/lib/mysql \
  6. -v / web /mysql/conf.d:/etc/mysql/conf.d \
  7. -v /etc/localtime:/etc/localtime:ro \
  8. c54721a9eb17

参数说明

  • --name 给这个容器取个别名叫 web-mysql
  • --d 保持后台运行
  • -p 指定端口,进行端口映射,将宿主机的 3306 端口映射到容器内的 3306
  • -v 目录挂载,这个-v 主要用处是方便我们在宿主机上操作容器内的配置文件,要不然每次操作配置文件都需要进入容器后然后修改配置文件
  • -v /etc/localtime:/etc/localtime:ro 特别说下,因为我发现容器内的时间会跟宿主机相差 8 个小时,加载这个目录是为了校正时间跟宿主机时间一致。
  • c54721a9eb17——是容器的 ID (可通过 docker images 可以看到)

更多参数的详解,请参考Docker 命令大全

这里有个问题,关于我在查找教程的时候,发现有的人需要配置 docker 的镜像源(因为 docker 在国内访问较慢),所以就有先要修改镜像源的操作,主要解决国内环境下载慢的问题,修改镜像源方法请参考:Docker 镜像源修改。本文中因为我的服务器在国外的,所以就不用考虑配置什么国内源。

4、安装 php

①拉取 php 镜像,命令  docker pull php-fpm,指定版本的命令同上。

②创建 php 容器,命令

  1. docker run \
  2. --name web-php \
  3. -d -p 9000:9000 \
  4. -v /web/php-fpm/etc/:/usr/local/etc/php \
  5. -v /web/nginx/web:/var/www/html \
  6. -v /web/localtime:/etc/localtime:ro \
  7. --link web-mysql \
  8. 953f20b0e810

这里的多了个参数

--link 是跟已经运行的 web-mysql 容器建立链接。所以才说要按顺序安装容器的。

其他的命令同上,php 容器运行好后,有个问题要注意,因为默认的 php 镜像中是不带有 mysqli 模块(这个模块是一定要装的,因为连接数据都需要用到)。操作方法

(1)使用命令的进入容器内部 docker exec -it 890ec4245c56 /bin/bash

这的 890ec4245c56 是你运行好后的容器 ID(用 docker ps 查看获取)

(2)进去后,输入命令 docker-php-ext-install mysqli 等待安装好, 如果出现

cannot create /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini: Directory nonexistent

请参考:docker 下 php 安装扩展进行解决。

5、安装 nginx

①拉取 nginx 镜像,命令 docker pull nginx,指定版本命令同上 。

②创建 nginx 容器,命令

  1. docker run \
  2. --name web-nginx \
  3. -d -p 80:80 \
  4. -v /web/nginx/conf/nginx.conf:/etc/nginx/nginx.conf/  \
  5. -v /web/nginx/conf/vhost/conf.d:/etc/nginx/conf.d \
  6. -v /web/nginx/web:/usr/share/nginx/html  \
  7. -v /web/nginx/logs:/var/log/nginx/  \
  8. -v /etc/localtime:/etc/localtime:ro \
  9. --link web -php \
  10. 436be79de93f

安装后 nginx 容器后有几个点要注意:

nginx 配置文件中要把 php 部分的参数改成 php 的,这样 php 才能进行解析。

先进入 nginx 容器中,用命令(这条命令是把 web-nginx 容器里面的 nginx.conf 配置文件复制到我们的指定的目录下):

  1. docker cp web-nginx:/etc/nginx/nginx.conf /web/nginx/conf/

这条命令详解请参考:Docker cp 命令

然后就可以直接到我们宿主机上修改 nginx.conf 文件。

还有个配置文件是 default.conf 是主要来负责做站点解析

  1. server {
  2. listen       80;
  3. server_name  www.web.com web.com;
  4. #charset koi8-r;
  5. access_log  /var/log/nginx/host.access.log  main;
  6. location / {
  7. root   /usr/share/nginx/html/;
  8. index  index.html index.htm index.php;
  9. }
  10. #error_page  404              /404.html;
  11. # redirect server error pages to the static page /50x.html
  12. #
  13. error_page   500 502 503 504  /50x.html;
  14. location = /50x.html {
  15. root   /usr/share/nginx/html;
  16. }
  17. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  18. #
  19. #location ~ \.php$ {
  20. #    proxy_pass   http://127.0.0.1;
  21. #}
  22. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  23. #
  24. location ~ \.php$ {
  25. root           html;
  26. fastcgi_pass     web-php:9000;
  27. fastcgi_index  index.php;
  28. fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
  29. include        fastcgi_params;
  30. }
  31. # deny access to .htaccess files, if Apache's document root
  32. # concurs with nginx's one
  33. #
  34. #location ~ /\.ht {
  35. #    deny  all;
  36. #}
  37. }

web-php 和/var/www/html/是需要修改的两个地方,如果你是按上面的命令进行操作的,就修改这两个地方,然后上传到我们的指定的目录/ web /nginx/conf/vhost/conf.d 里

我说下修改的地方

第一处地方我改成 web-php,因为这是我们自己创建了一个叫 web-php 容器名称/id(ID 太长了不好分辨),9000 也正是 php 的端口

第二处修改地方,是指 php 需要执行的文件地址,为什么填这个地址呢?因为这是 php 默认解析目录地址。

操作完上面的几个步骤了,先停止所有容器,然后重启(为了让配置生效)。

停止容器的命令  docker  stop 容器 ID/容器别名

开启容器的命令  docker  start 容器 ID/容器别名(开启的时候一定要按顺序 1.mysql 2.php 3.nginx,因为容器之间都有做关联,如果你所需关联的容器没有先启动,那这个容器是不是就会开启失败了,这就是为什么一定要按顺序!!!)

上面所有需要创建的配置文件,我都整理好,不想自己动手配置的可以直接下载配置文件,点此下载 docker 配置文件

下面分享下常见的 docker 命令

  • 容器的开启/停止/重启:docker start/stop/restart 容器 ID/别名
  • 容器的删除:docker rm 容器 ID/别名
  • 镜像删除:docker rmi 镜像 ID(先停止容器后,删除。方法二强制删除 docker rmi –f 容器 ID/别名,这就不用管他停没停止了 )
  • 进入容器:docker exec -it 容器 ID/容器别名 /bin/bash(网上还有条进入容器的命令,不过我都是用这条,因为用这条命令进去的容器,你退出容器后还是容器是还在运行的状态!)
  • 查看容器的 ID 地址:docker inspect --format '{{ .NetworkSettings.IPAddress }}' 容器 ID/容器别名
  • 查看正在运行的容器:docker ps
  • 查看所有状态下的容器:docker ps –a
  • 查看某个容器的日志: docker logs 容器 ID/容器别名
  • 停止所有的容器:docker stop $(docker ps -a -q)
  • 删除所有的容器:docker rm $(docker ps -a -q)
  • docker 的开启/重启/状态:service docker start/restart/status

接触 docker 好几天了,才对他有那么一丢点了解(生怕下次再操作的时候会忘记了,所以特地写了篇文章,以备不时之需,而且里面的操作,都是我装 docker 时遇到的问题,把所有发生的问题都记录整合在一起,这样也省了有同样问题的朋友,要百度好几次,而浪费时间!),

我自己也同时在几个服务器上配了 docker,不得不说 docker 配置环境真的很快,我第一次配的时候,因为不熟练,所以配的慢, 等到我第二次配的时候,所有操作 10 分钟搞定,相比之前用军哥的一键安装包的配置时间真的缩短的不是一两倍啊!还有 docker 占用内存也比我之前的低。所以搞下来这几天,还是挺有收获的!

文中所有的操作方法,皆是来源于网络,由我整合归纳,如有发现错误,还请麻烦指正,谢谢!

Linux 安装docker,以及docker的基本操作:https://blog.csdn.net/xinzhifu1/article/details/83579256

docker的安装部署及使用docker安装mysql+php+nginx教程:https://boke112.com/6402.html

后端好书阅读与推荐(续):https://segmentfault.com/a/1190000011076865#articleHeader4

服务器部署docker lnmp环境的更多相关文章

  1. 记录Linux CentOS 7系统完整部署Docker容器环境教程

    笔者之前有在"详细介绍Ubuntu 16.04系统环境安装Docker CE容器的过程"文章中有介绍到利用Ubuntu系统安装Docker容器环境的过程.如果我们有使用CentOS ...

  2. Docker LNMP环境搭建

    原文地址:https://www.awaimai.com/2120.html 1 快速使用 2 安装docker和docker-compose 3 使用国内镜像仓库 4 目录说明 4.1 目录结构 4 ...

  3. 服务器部署docker

    docker简介 可以把docker是一个容器,可以让开发者将自己的项目部署到这个容器中,最常用的场景是将自己的后端项目部署到服务器的时候会将其打入docker镜像中,可以理解为一个开销更小的虚拟机. ...

  4. Ubuntu部署Docker容器环境

    1.首先切换到root用户 2.安装网卡报错 解决办法,删除锁住的文件: 再次安装成功. 4.ubuntu下面安装:apt-get install openssh-server  安装远程工具 5.设 ...

  5. ThinkPHP部署在lnmp环境中碰到的问题

    先说一下问题: 因为tp5的入口文件在public目录下,而Application和public同级, 我用的lnmp1.5默认做了防跨站目录设置,所以导致入口文件无法进入application目录, ...

  6. 使用Dockerfile构建docker lnmp环境

    一.mysql 1.创建 Dockerfile mkdir mysql # 创建一个目录存放之后的Dockerfile,目录名无所谓 cd mysql # 进入目录 vi Dockerfile # 创 ...

  7. 原lnmp环境服务器升级为mysql+nginx+php单个docker容器构建的lnmp环境

    时间:2018年2月 一.项目背景 我单位现web服务架构为lnmp环境,服务器软件.硬件升级部署难:同时开源软件日新月异,考虑到技术升级,领导决定服务器架构整体升级为容器架构,维护性.移植性强. 二 ...

  8. 阿里云Ubuntu安装LNMP环境之PHP7

    在QQ群很多朋友问阿里云服务器怎么安装LNMP环境,怎么把项目放到服务器上面去,在这里,我就从头开始教大家怎么在阿里云服务器安装LNMP环境. 在这之前,我们先要知道什么是LNMP. L: 表示的是L ...

  9. 阿里云Ubuntu安装LNMP环境之Mysql

    在QQ群很多朋友问阿里云服务器怎么安装LNMP环境,怎么把项目放到服务器上面去,在这里,我就从头开始教大家怎么在阿里云服务器安装LNMP环境. 在这之前,我们先要知道什么是LNMP. L: 表示的是L ...

随机推荐

  1. numtodsinterval 函数用法

    numtodsinterval(<x>,<c>) ,x是一个数字,c是一个字符串,表明x的单位,这个函数把x转为interval day to second数据类型 常用的单位 ...

  2. 深入nginx之《获取用户的真实IP》

    获取用户的真实IP Nginx会将客户端的IP信息存放在$remote_addr变量里,但这并不意味着它就是客户端的IP,生产环境往往会充满各种代理,让IP的来龙去脉变得扑朔迷离. 目前互联网公司基本 ...

  3. 破解FTP登录密码的几种方法

    工具 Hydra X-Hydra Medusa Ncrack Patator Metasploit Hydra hydra -L /root/Desktop/user.txt -P /root/Des ...

  4. c# – Asp.Net Core MVC中Request.IsAjaxRequest()在哪里?

    要了解有关新的令人兴奋的Asp.Net-5框架的更多信息,我正在使用最新发布的Visual Studio 2015 CTP-6来构建一个Web应用程序. 大多数事情看起来真的很有希望,但我似乎找不到R ...

  5. C#中各种Lock的速度比较

    简单写了个小程序,比较了一下C#中各种Lock的速度(前提是都没有进入wait状态). 各进入离开Lock 1kw次,结果如下: Lock Time (ms) No lock 58 CriticalS ...

  6. 世界视频编码器大赛结果揭晓,腾讯V265编码器勇夺两项第一

    2019年10月22日,由莫斯科国立大学(Moscow State University)举办的MSU世界视频编码器大赛成绩揭晓, 腾讯内部开源协同的V265编码器再创佳绩,一举拿下PSNR(峰值信噪 ...

  7. LeetCode 1071. 字符串的最大公因子(Greatest Common Divisor of Strings) 45

    1071. 字符串的最大公因子 1071. Greatest Common Divisor of Strings 题目描述 对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连 ...

  8. 【手写代码】快速计算数字x有多少个二进制1

    #include<bits/stdc++.h> #include<vector> using namespace std; int f1(int x) { ; ) { )==) ...

  9. 【转帖】lsof命令总结

    lsof命令总结 https://www.cnblogs.com/chenqionghe/p/10677179.html 一.lsof是什么 lsof (list open files)是一个列出当前 ...

  10. golang笔记之DOS篇

    Dos的常用命令 dos的基本介绍     Dos: Disk Operating System 磁盘操作系统  ,简单说一下Windows下的目录 2. dos的基本操作原理   目录的操作: md ...