Docker 云服务配置

引言

这段时候主攻云服务

服务器

CentOS 文件目录

操作

基本操作:

Docker简介:

安装Docker:

Docker简介:

镜像

获取镜像

容器

仓库

Docker搭建PHP开发环境

Docker-Compose.yml文件编辑

Docker平时遇到的问题

Docker安装PHP+nginx+mysql 简书教程

引言

这段时候主攻云服务

1. CentOS 服务器

2. 配置

3. Docker

服务器


用户名:ssh root@182.61.35.7

密码:xxx (想要的找我)

管理控制台地址:https://console.bce.baidu.com/bcc/#/bcc/instance/list


CentOS 文件目录

参考文献:Centos目录-结构详细版 https://blog.csdn.net/daniel_fei/article/details/64495653

20170321200654008.png
  1. /:根目录
  2. /usr/bin:可执行二进制文件目录,如常用的命令ls、tar、mv、cat等
  3. /boot:放置Linux系统启动时用到的一些文件。/boot/vmlinuz为linux的内核文件,以及/boot/gurb。建议单独分区,分区大小100M即可
  4. /dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt
  5. /etc:系统配置文件存放的目录
  6. /home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,表示当前用户的家目录,test表示用户test的家目录
  7. /lib:/usr/lib :/usr/local/lib : 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules
  8. /lost+fount:系统异常产生错误
  9. /mnt:/media:光盘默认挂载点
  10. /opt: 给主机额外安装软件所摆放的目录
  11. /proc: 此目录的数据都在内存中,如系统核心,外部设备,网络状态
  12. /root: 系统管理员root的家目录,系统第一个启动的分区为/
  13. /sbin:/usr/sbin:/usr/local/sbin: 放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能"查看"而不能设置和使用。
  14. /tmp: 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
  15. /srv: 服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内
  16. /usr: 应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local:存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录,使用 man ls时会查询/usr/share/man/man1/ls.1.gz的内容建议单独分区,设置较大的磁盘空间
  17. /var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message: 所有的登录文件存放目录,/var/spool/mail: 邮件存放的目录, /var/run: 程序或服务启动后,其PID存放在该目录下。建议单独分区,设置较大的磁盘空间

操作

基本操作:


获取CentOS版本:

$ lsb_release -a

查看当前内核版本

$uname -r


Docker简介:

Linux基本指令:

屏幕快照 2018-08-08 下午12.04.23.png

vim/vi:

vi-vim-cheat-sheet-sch.gif

CentOS上传和下载文件

利用scp传输文件

1、从服务器下载文件

scp username@servername:/path/filename /tmp/local_destination

例如scp codinglog@192.168.0.101:/home/kimi/test.txt /tmp/local_destination 把192.168.0.101上的/home/kimi/test.txt

的文件下载到 /tmp/local_destination

2、上传本地文件到服务器

scp /path/local_filename username@servername:/path

例如scp /var/www/test.php codinglog@192.168.0.101:/var/www/ 把本机/var/www/目录下的test.php文件

上传到192.168.0.101这台服务器上的/var/www/目录中

3、从服务器下载整个目录

  scp -r username@servername:remote_dir/ /tmp/local_dir 

例如:scp -r codinglog@192.168.0.101 /home/kimi/test  /tmp/local_dir

例如:scp -r root@182.61.35.7:/Users/Docker/php-nginx-compose /Users/gl/Desktop

4、上传目录到服务器

  scp  -r /tmp/local_dir username@servername:remote_dir

  例如:

  scp -r test      codinglog@192.168.0.101:/var/www/   把当前目录下的test目录上传到服务器

  的/var/www/ 目录

例如:

scp -r /Users/gl/Desktop/php-nginx-compose root@182.61.35.7:/Users/Docker/

CentOS chmod命令

参考文献:http://man.linuxde.net/chmod

chmod.gif

u User,即文件或目录的拥有者;

g Group,即文件或目录的所属群组;

o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;

a All,即全部的用户,包含拥有者,所属群组以及其他用户;

r 读取权限,数字代号为“4”;

w 写入权限,数字代号为“2”;

x 执行或切换权限,数字代号为“1”;

  • 不具任何权限,数字代号为“0”;

s 特殊功能说明:变更文件或目录的权限。

chmod u+x,g+w f01  //为文件f01设置自己可以执行,组员可以写入的权限 chmod u=rwx,g=rw,o=r f01 chmod 764 f01 chmod a+x f01  //对文件f01的u,g,o都设置可执行属性

wget 命令:

实例1:使用wget下载单个文件

命令:

wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.6.5/

实例2:使用wget -O下载并以不同的文件名保存

实例4:使用wget -c断点续传 对大文件可能断开连接的情况有用

实例5:使用wget -b后台下载

实例6:伪装代理名称下载

命令:

wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://www.minjieren.com/wordpress-3.1-zh_CN.zip

说明:

有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过–user-agent参数伪装。

实例7:使用wget –spider测试下载链接

命令:

wget --spider URL

实例9:使用wget -i下载多个文件: filelist.txt 是有多个url组成的文件

命令:

wget -i filelist.txt

tar命令:

tar命令详解

-c: 建立压缩档案

-x:解压

-t:查看内容

-r:向压缩归档文件末尾追加文件

-u:更新原压缩包中的文件

这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。

下面的参数是根据需要在压缩或解压档案时可选的。

-z:有gzip属性的

-j:有bz2属性的

-Z:有compress属性的

-v:显示所有过程

-O:将文件解开到标准输出

总结

1、*.tar 用 tar –xvf 解压

2、*.gz 用 gzip -d或者gunzip 解压

3、.tar.gz和.tgz 用 tar –xzf 解压

4、*.bz2 用 bzip2 -d或者用bunzip2 解压

5、*.tar.bz2用tar –xjf 解压

6、*.Z 用 uncompress 解压

7、*.tar.Z 用tar –xZf 解压

案例

sudo tar -zxf hadoop-2.6.5.tar.gz -C /usr/local 安装到绝对目录中。使用-C命令

find命令:

find的使用实例:

$ find . -name 'my*'

搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。

$ find . -name 'my*' -ls

搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。

$ find . -type f -mmin -10

搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。

locate命令的使用实例:

$ locate /etc/sh

搜索etc目录下所有以sh开头的文件。

$ locate ~/m

搜索用户主目录下,所有以m开头的文件。

$ locate -i ~/m

搜索用户主目录下,所有以m开头的文件,并且忽略大小写

whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

whereis命令的使用实例:

$ whereis grep

which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

which命令的使用实例:

$ which grep

type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。

type命令的使用实例:

$ type cd

系统会提示,cd是shell的自带命令(build-in)。

$ type grep

系统会提示,grep是一个外部命令,并显示该命令的路径。

$ type -p grep

加上-p参数后,就相当于which命令。

安装Docker:


参考文献:https://www.jianshu.com/p/3a4cd73e3272

Linux内核和发行版的关系:

6635bad2-0eaa-48da-9130-f567cb910e26.png

Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

查看你当前的内核版本

$ uname -r

安装 Docker

$ yum -y install docker

启动 Docker 后台服务

$ service docker start

测试运行 hello-world,由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。

$ docker run hello-world


Docker简介:

  1. Docker服务启动快
  2. Docker服务与Virtaul Machine 的区别
  3. Docker更易迁移、更加简单的管理、更快速的交互和部署
  4. Docker三要素:镜像、容器、仓库
  5. docker 基本操作 :参考:https://letong.gitbooks.io/docker/content/container/rm.html

删除与终止容器:

docker stop cool_nginx

docker rm cool_nginx

查看镜像:

docker images

查看运行的容器:

docker ps

批量快速停止所有容器:

docker stop $(docker ps -q)

批量快速停止所有容器:

docker rm $(docker ps -aq)

一条命令停止并删除所有容器:

docker stop (docker ps -q) & docker rm(docker ps -aq)

docker-compose 批量启动容器

docker-compose up -d

docker-compose 批量停止容器

docker-compose stop

docker删除镜像

docker rmi 镜像id/镜像名

docker删除镜像

docker rmi 镜像id/镜像名

docker进入mysql 容器

docker exec -it dnmp:mysql

镜像

获取镜像

从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像

docker pull ubuntu:12.04

列出

显示本地已有镜像

docker images

  • 来自哪个仓库,比如docker.io
  • 镜像的标记,比如14.04
  • 它的ID号
  • 创建时间
  • 镜像大小

创建

先使用下载的镜像启动容器:

sudo docker run -t -i training/sinatra /bin/bash

利用Dockerfile来创建镜像:

容器

仓库

Docker搭建PHP开发环境

参考文献:更好的PHP开发环境-Docker篇 http://www.blue7wings.com/php%20tutorial/Better-Dev-Envirenment-Docker.html

第一步:安装docker 。yum install docker 很简单

第二步:安装nginx。docker pull nginx。

第三步:使用docker images查看一下我们刚刚拉取下来的镜像

第四步:实例化该镜像,我们把实例化的镜像称之为容器,镜像和容器的关系就好比类和实例的关系。docker run -p 80:80 nginx 。 访问 http://182.61.35.7:80 即可看到nginx页面。

第五步:让nginx在后台运行,进入守护进程。docker run -p 80:80 --name cool_nginx -d nginx

第六步:查看docker 进程:-p是端口参数,给上-d参数表示容器是守护程序会进入后台运行,--name则是重新给容器命名。

成功之后,用docker ps来查看当前已经启动的容器。

第七步:现在我们进入这个容器,并修改这个Nginx默认网页。

docker exec -it cool_nginx bash > echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

第八步:挂载一个本地目录到容器

docker run -p 80:80 --name cool_nginx -d -v /Users/Docker/src/:/usr/share/nginx/html/ nginx

第九步:安装PHP7.1 docker pull php:7.1-fpm

第十步:PHP挂在到一个本地目录。

docker run -d --name cool_php_fpm -v /Users/Docker/src/:/usr/share/nginx/html/ php:7.1-fpm

第十一步:连接PHP和nginx --link cool_php_fpm

第十二步:创建default_nginx.conf文件并将其挂在到本地目录

server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.html index.php; charset utf-8; location / { try_files uriuri/ /index.php?query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } access_log off; error_log /var/log/nginx/error.log error; sendfile off; client_max_body_size 100m; location ~ \.php? { fastcgi_pass cool_php_fpm:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; fastcgi_intercept_errors off; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; } location ~ /.ht { deny all; } }

然后用docker rm cool_nginx命令删除掉原先的Nginx容器,挂载该配置文件重新实例化:

docker run -p 80:80 \ --name cool_nginx -d \ -v /Users/Docker/src/:/usr/share/nginx/html/ \ -v /Users/Docker/default_nginx.conf:/etc/nginx/conf.d/default.conf:ro \ --link cool_php_fpm nginx

在本地src/目录下,新建一个test.php文件,写入熟悉的内容:

<?php echo phpinfo();

访问 http://182.61.35.7:80 即可看到nginx页面

第十二步:安装Mysql docker pull mysql 启动:docker run -d \ --name cool_mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql

-e参数是给给定环境变量,这里我们设定MySQL的密码是123456。

链接到MySQL容器:

docker exec -it cool_mysql bash

登陆MySQL:

mysql -uroot -p123456

第十三步:PHP如何链接到MySQL,相信你也知道了,对的还是使用--link参数,我们删除掉cool_php_fpm容器,重新构建

docker run -d \ --name cool_php_fpm \ -v /Users/Docker/src/:/usr/share/nginx/html/ \ --link cool_mysql \ php:7.1-fpm

第十四步:链接之后,PHP容器和MySQL容器能够通信了,但是还是不够呢(坚持一下,最后一步了),初始PHP是没有安装MySQL扩展的,安装扩张也极其容易,先进入到PHP容器:

docker exec -it cool_php bash

然后用docker-php-ext-install命令安装:

docker-php-ext-install mysqli > exit

我们重启PHP容器:

docker restart cool_php_fpm

第十五步:测试脚本

<?php servername = "cool_mysql";username = "root"; password = "123456"; // Create connectionconn = new mysqli(servername,username, password); // Check connection if (conn->connect_error) { die("Connection failed: " . $conn->connect_error); } echo "Connected successfully";

访问 http://182.61.35.7:80 /test.php 发现访问不了该页面 !!! 尴尬。

原因是apt-get mysqli_ PHP扩展没有导入成功!

第十六步:docker-compose

安装官方文档:https://docs.docker.com/compose/install/#upgrading

Docker-Compose.yml文件编辑

docker-compose.yml,Docker compose file 参考文档 https://deepzz.com/post/docker-compose-file.html

apt-get 与yum 的区别。apt-get是Debian、Ubuntu、Linux Mint、elementary OS等Linux发行版的默认软件包管理器

apt-get基本用法:apt-get install xxx/ apt-get update / apt-get upgrade /remove

Dockerfile 安装PHP: https://juejin.im/post/5a9f2e89f265da23953083ee

Docker平时遇到的问题

docker平时遇到的问题:

https://github.com/IBBD/IBBD.github.io/blob/master/linux/docker/docker-questions.md

Docker安装PHP+nginx+mysql 简书教程

我使用该教程来安装 PHP:https://www.jianshu.com/p/0561d3cfccda

唯一的问题出现在:PHP 下的dockerfile无法安装扩展,于是删除所有container、删除所有镜像,重试一遍。

之前的问题是:PDO exception,PHP使用pdo报错,原因是没有导入mysql驱动。