Docker 云服务配置
引言
这段时候主攻云服务
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- /:根目录
- /usr/bin:可执行二进制文件目录,如常用的命令ls、tar、mv、cat等
- /boot:放置Linux系统启动时用到的一些文件。/boot/vmlinuz为linux的内核文件,以及/boot/gurb。建议单独分区,分区大小100M即可
- /dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt
- /etc:系统配置文件存放的目录
- /home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,表示当前用户的家目录,test表示用户test的家目录
- /lib:/usr/lib :/usr/local/lib : 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules
- /lost+fount:系统异常产生错误
- /mnt:/media:光盘默认挂载点
- /opt: 给主机额外安装软件所摆放的目录
- /proc: 此目录的数据都在内存中,如系统核心,外部设备,网络状态
- /root: 系统管理员root的家目录,系统第一个启动的分区为/
- /sbin:/usr/sbin:/usr/local/sbin: 放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能"查看"而不能设置和使用。
- /tmp: 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
- /srv: 服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内
- /usr: 应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local:存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录,使用 man ls时会查询/usr/share/man/man1/ls.1.gz的内容建议单独分区,设置较大的磁盘空间
- /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.pngvim/vi:
vi-vim-cheat-sheet-sch.gifCentOS上传和下载文件
利用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.gifu 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.pngDocker 要求 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简介:
- Docker服务启动快
- Docker服务与Virtaul Machine 的区别
- Docker更易迁移、更加简单的管理、更快速的交互和部署
- Docker三要素:镜像、容器、仓库
- 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驱动。