docker实战之Dockerfile(三层镜像的构建)

通过视频总结(http://edu.51cto.com/center/course/lesson/index?id=71317
Dockerfile 放在git上面,才叫自动化。创建docker镜像,首先得有父镜像,Dockerfile生成docker镜像,每执行一条语句,就会生成docker镜像的一层layer。
一般有基础镜像,中间件镜像,最后生成应用镜像


本文基于centos系统的前提条件:

    1. 首先 ,从git.oschina网上下载好相应的源码进行练习。源码为搜索docker-training即可得到。
    1. 使用putty进行远程连接Linux系统,并下载好docker。(Linux系统从阿里云上申请可得到。)
    1. 需要在Linux系统上下载好git,才能把源代码拉进Linux系统。
    1. 需要使用阿里云加速镜像(centos系统)。

目的:需要使用centos镜像生成中间镜像,再通过centos镜像生成最后的应用镜像。(都是用Dockerfile构成镜像)


步骤:
第一步:

yum install git
(前提是docker的版本是利用centos系统下载安装好的,这条语句需要在centos系统下使用,传送代码到docker中去)
git clone https://gitee.com/dockerf/docker-training.git
(用于将代码clone到docker中去)

ls
cd docker-training
ls
cd centos7
(进入centos镜像内)
ls
vim Dockerfile
(查看Dockerfile的信息)
[root@iZod4yzyh3iknxZ centos7]# docker build -t csphere/centos:7.1 .
(Docker build是docker 使用-dockerfile创建csphere/centos镜像,本地目录创建镜像,-t 镜像名称,后面有 .说明,基于本目录)
[root@iZod4yzyh3iknxZ]# docker run -d -p 2222:22 --name base csphere/centos
(创建容器不在该目录下,在本身的目录)
docker ps -a
(查看创建的所有容器)

——以上步骤为基于docker-training源代码里的Dockerfile文件的父镜像创建出自己命名的 csphere/centos:7.1 镜像,并在该镜像下生成基于该镜像的容器base


第二步:
在docker-training文件下的php-fpm文件下创建镜像和容器
(Dockerfile是基于csphere/centos:7.1创建)
docker build -t csphere/php-fpm:5.4 .(在php-fpm目录下)
可能会如下错误:
Rpmdb checksum is invalid: dCDPT(pkg checksums): kmod.x86_64 0:20-15.el7_4.7 – u
(rpm出现数据损坏——Dockerfile中修改)
解决方案:在每个yum前面加上rpm --rebuilddb &&
docker images
docker run -d -p 8080:80 --name website csphere/php-fpm:5.4
docker ps -a
ifconfig eth1
(查看公网ip)
浏览器输入:公网ip地址:8080/info.php解析php代码
docker exec -it website /bin/bash(查看Nginx和php是否启动)
supervisorctl(查看容器内的进程)
exit退出容器
docker ps查看该容器还是处于运行状态


第三步:
在docker-training文件下的mysql文件下构建镜像
(基于csphere/centos:7.1构建)
docker build -t csphere/mysql:5.5 .
可能会如下错误:
Rpmdb checksum is invalid: dCDPT(pkg checksums): kmod.x86_64 0:20-15.el7_4.7 – u
(rpm出现数据损坏——Dockerfile中修改)
解决方案:在每个yum前面加上rpm --rebuilddb &&
docker images
docker run -d -p 3306:3306 --name dbserver csphere/mysql:5.5
docker ps
docker exec -it dbserver /bin/bash
mysql
show databases;
exit退出容器
-v是挂在volume参数
docker rm -f dbserver(删除没有挂在-v参数的容器)
docker run -d -p 3306:3306 --name newdb -v /var/lib/docker/vfs/dir/mydata(数组基):/var/lib/mysql(容器) csphere/mysql:5.5
docker exec -it newdb /bin/bash
mysql
show databases;
create database mydb;
exit
创建的/var/lib/docker/vfs/dir/mydata目录有没有这个mydb这个目录
docker rm -f newdb
创建的/var/lib/docker/vfs/dir/mydata目录有没有这个mydb这个目录


Volume通过数组机的文件目录映射容器的文件目录,可以把容器删掉,数据库还在

新建的容器拥有之前的数据库
docker run -d -p --name newdb1 -v /var/lib/docker/vfs/dir/mydata(数组基):/var/lib/mysql(容器) csphere/mysql:5.5
docker exec -it newbd1 /bin/bash
mysql
show databases;


第四步:构建动态网站wordpress(公司的一个网站或php代码)
docker-training文件下的wordpress
(Dockerfile是基于php-fpm)
docker build -t csphere/wordpress:4.2 ./docker-training/wordpress
docker images
ifconfig eth0
(查看当前内部ip地址)
build run -d -p 80:80 --name wordpress -r WORDPRESS_DB_HOST=内网ip -e WORDPRESS_DB_USER=admin -e WORDPRESS_DB_PASSWORD=csphere2015 csphere/wordpress:4.2
(配置连接数据库的参数)
docker ps
ifconfig eth1
(公网ip地址)
浏览器输入:公网ip地址,可以加载到wordpress页面

猜你喜欢

转载自blog.51cto.com/12602793/2112991