1. 程式人生 > >docker實戰之Dockerfile(三層鏡像的構建)

docker實戰之Dockerfile(三層鏡像的構建)

三層鏡像 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頁面

docker實戰之Dockerfile(三層鏡像的構建)