Docker 云服务配置

作者: 采香行处蹙连钱 | 来源:发表于2018-08-08 12:10 被阅读13次

    引言

    这段时候主攻云服务

    服务器

    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驱动。

    相关文章

      网友评论

        本文标题:Docker 云服务配置

        本文链接:https://www.haomeiwen.com/subject/jpitbftx.html