docker commit 部署LNMP 镜像

Docker 常用命令

查看

docker images           # 列出所有镜像(images)
docker ps               # 列出正在运行的容器(containers)
docker ps -a            # 列出所有的容器
docker pull centos      # 下载centos镜像
docker top <container>  # 查看容器内部运行程序

容器

docker stop <container>                  # 停止一个正在运行的容器,<container>可以是容器ID或名称
docker start <container>                 # 启动一个已经停止的容器
docker restart <container>               # 重启容器
docker rm <container>                    # 删除容器

docker run -i -t -p :80 LAMP /bin/bash   # 运行容器并做http端口转发
docker exec -it <container> /bin/bash    # 进入ubuntu类容器的bash
docker exec -it <container> /bin/sh      # 进入alpine类容器的sh

docker rm `docker ps -a -q`              # 删除所有已经停止的容器
FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i  # windows系统,用上面的命令会出错:unknown shorthand flag: 'a' in -a 
docker kill $(docker ps -a -q)           # 杀死所有正在运行的容器,$()功能同``

提交/导出

docker build --rm=true -t hjue/lamp .    # 建立映像文件。–rm 选项是告诉Docker,在构建完成后删除临时的Container,Dockerfile的每一行指令都会创建一个临时的Container,一般这些临时生成的Container是不需要的
docker commit 3a09b2588478 mynewimage    # 提交你的变更,并且把容器保存成镜像,命名为mynewimage,3a09b2588478为容器的ID

docker save mynewimage | bzip2 -9 -c> /home/save.tar.bz2  # 把 mynewimage 镜像保存成 tar 文件
bzip2 -d -c < /home/save.tar.bz2 | docker load            # 加载 mynewimage 镜像

docker export <CONTAINER ID> > /home/export.tar           # 导出Image
cat /home/export.tar | sudo docker import - mynewimage    # 导入Image镜像

镜像

docker run -i -t centos /bin/bash          # 运行centos镜像
docker run -d -p 80:80 hjue/centos-lamp    # 运行centos-lamp镜像

docker rmi [image-id]                      # 删除镜像
docker rmi $(docker images -q)             # 删除所有镜像

帮助

docker run --help

安装配置

CentOS 7 (使用yum进行安装)

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start

# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
# 安装校验 docker version

配置镜像加速器

Windows
- 使用阿里镜像加速地址 https://cr.console.aliyun.com/

{
  "registry-mirrors": [
    "https://key.mirror.aliyuncs.com"
  ],
  "insecure-registries": [],
  "debug": true,
  "experimental": false
}

Centos

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:

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

Docker部署LNMP

部署MySQL

从Docker的公共仓库 Dockerhub 下载 MySQL 镜像:

docker pull mysql:5.6.35

然后启动数据库:

$ docker run --name mysql-server -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6.35

部署Nginx

安装Nginx

首先,从Docker的公共仓库 Dockerhub 下载nginx镜像:

$ docker pull nginx

这个命令会下载容器需要的所有部件,并且Docker会对它们进行缓存,所以在运行容器的时候,不需要每次都下载容器镜像。

然后,启动Nginx容器:

$ docker run --name nginx -p 80:80 -d nginx

运行成功后,终端会返回容器的ID号,上面的命令中,
- run:创建一个新的容器
- –name:指定容器的名称(如果留空,docker会自动分配一个名称)
- -p:导出容器端口到本地服务器,格式:-p :。在本例中,我们映射容器的80端口到本地服务器的80端口。
nginx:是 Dockerhub 上下载nginx镜像名称(如果本地没有可用的镜像,Docker会自动下载一个)
- -d:后台启动。

通过浏览器浏览:http://localhost 就会看到Nginx欢迎界面。接下来可能会用到这几个命令:

$ docker ps -a                       # 查看所有的容器
$ docker stop nginx                  # 停止正在运行的容器
$ docker start nginx                 # 启动一个已经停止的容器
$ docker rm nginx                    # 删除容器

映射HTML路径

默认情况下,Docker nginx服务器的HTML路径(网站根目录)在容器 /usr/share/nginx/html 目录下,现在需要把这个目录映射到本地服务器的 ~/www/html 目录。在上面命令的基础上加上-v参数,具体如下:

$ docker run --name nginx-server -p 80:80 -d -v /home:/home nginx

-v的参数格式为::。

在~/www/html下创建一个 index.html 文件,内容 here is ~/www/html/index.html

在浏览器上访问 http://localhost,刷新一下就可以看到新的内容了。

配置 Nginx

Nginx 的强大很大部分体现在配置文件上,对于一些高级的应用来说,自定义 Nginx 非常重要。所以,我们需要把 Nginx 的配置文件复制到本地服务器目录:

$ cd ~/www
$ docker cp nginx-server:/etc/nginx/conf.d/default.conf /home/docker/etc/nginx/conf.d/default.conf

再加一个-v参数,把本地的配置文件映射到容器上,在重启容器:

$ docker stop nginx
$ docker rm nginx
$ docker run --name nginx-server -p 80:80 -v /home:/home -v /home/docker/etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx

如果配置文件有修改,需要重启容器生效:

$ docker restart nginx-server
这样就可以直接在本地修改配置文件了。

部署PHP-FPM

下载 PHP-FPM 镜像:

$ docker pull php:7.0-fpm
$ docker run --name php-fpm-server -p 9000:9000 -d php:7.0-fpm
$ mkdir -p /home/docker/usr/local/etc/php-fpm.d && mkdir -p /home/docker/usr/src/php
$ docker cp php-fpm-server:/usr/local/etc/php-fpm.d/www.conf /home/docker/usr/local/etc/php-fpm.d/www.conf
$ cd /user/src && tar -xvf php.tar.xz
$ docker cp php-fpm-server:/usr/src/php/php.ini-development /home/docker/usr/local/etc/php/php.ini

在本地服务器修改 php.ini 的内容,设置cgi.fix_pathinfo=0(要先删除前面的;注释符):

cgi.fix_pathinfo=0

然后重新启动容器:

$ docker stop php-fpm-server
$ docker rm php-fpm-server
$ docker run --name php-fpm-server --link mysql-server:mysql-server -v /home:/home -v /home/docker/usr/local/etc/php-fpm.d/www.conf:/usr/local/etc/php-fpm.d/www.conf -v /home/docker/usr/local/etc/php/php.ini:/usr/local/etc/php/php.ini -d php:7.0-fpm

这样PHP-FPM的容器就部署完成了。注意,要保证配置文件 php.ini 和 www.conf 没有错误,否则会无法启动容器。

让Nginx容器支持FPM

打开 nginx 的配置文件,修改内容如下:

server {
    listen       80;
    server_name  _;
    root /home;
    index index.php index.html index.htm;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        #root   /usr/share/nginx/html;
        #index  index.php index.html index.htm;
    try_files $uri $uri/ =404;
    }

    error_page  404  /404.html;
    location = /40x.html {
        root    /user/share/nginx/html;     
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_pass   php-fpm-server:9000;
        fastcgi_index  index.php;
#        fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}

然后启动 nginx:

$  docker run --name nginx-server -p 80:80 --link php-fpm-server -v /home:/home -v /home/docker/etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx

在 ~/www/html 下创建 index.php 文件,内容:

<?php
    phpinfo();
?>

阿里云镜像托管

登录阿里云docker registry:

$ sudo docker login --username= registry.cn-hangzhou.aliyuncs.com

登录registry的用户名是您的阿里云账号全名,密码是您开通服务时设置的密码。

你可以在镜像管理首页点击右上角按钮修改docker login密码。

从registry中拉取镜像:

$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/diandianzhangda/centos:[镜像版本号]

将镜像推送到registry:

$ sudo docker login --username= registry.cn-hangzhou.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/diandianzhangda/centos:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/diandianzhangda/centos:[镜像版本号]

其中[ImageId],[镜像版本号]请你根据自己的镜像信息进行填写。

配置独立 lnmp

创建运行容器

docker run --name centos-lnmp -i -t -p 80:80 -p 3306:3306 -d centos /bin/bash
docker run --name lnmp-server -i -t -p 80:80 -p 3306:3306 -d -v /home:/home centos-lnmp:v1 /bin/bash

参考

猜你喜欢

转载自blog.csdn.net/diandianzhangda/article/details/80732629