docker镜像及dockerfile使用

一、docker镜像管理

1.1 docker镜像特性–1

       容器创建时需要指定镜像,每个镜像都由唯一的标示Image ID和容器的container ID一样,默认128位,可以使用前16为缩略形式,也可以使用镜像名与版本号两部分组合唯一标示,如果省略版本号,默认使用最新版本标签(latesr)

镜像的分层:

       docker的镜像通过联合文件系统(union filesystem)将各层文件系统叠加在一起。
       >boots:用于系统引导的文件系统,包括BootLoader和kernel,容器启动完成后会被卸载以节省内存资源。
      >roots:位于bootfs之上,表现为docker容器跟文件系统。
      >>传统模式中,系统启动时,内核挂载roots时会首先将其挂载为“只读”模式,完整性自检完成后将其挂载为读写模式。
      >>docker中,rootfs由内核挂载为“只读”模式,而后通过UFS技术挂载一个“可写”层。

1.2 docker镜像特性–2

>已有的分层只能读不能修改
>上层镜像优先级大于底层镜像
在这里插入图片描述

二、dockerfile使用方法

容器>镜像:docker commit CID -t xx.xx.xx
镜像要正常运行,必须有一个工作在前台的守护进程。

1.1 手动将容器保存为镜像

docker commit 容器id或者容器的名字 新的镜像名字[:版本号可选]

1)基于容器制作镜像

2)将容器提交为镜像 docker commit oldboy centos6-ssh-httpd:v1

3)测试镜像功能是否可用

手动制作的镜像,传输时间长 镜像初始命令

​ ① 制作nginx镜像

docker run -it -p 81:80 centos:6.9 /bin/bash
echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts
curl -o/etc/yum.repos.d/CentOSBase.repo http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum install nginx -y

docker run -it -p 81:80 centos:6.9 /bin/bash
docker ps -a

docker container commit  fed851e32883 centos6.9_nginx:v1
docker run -d -p 82:80 centos6.9_nginx:v1 nginx -g'daemon off;

② 制作tomcat镜像(扫雷)

docker run -it -p 81:80 centos:6.9 /bin/bash
curl -o/etc/yum.repos.d/CentOSBase.repo http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum  install  tomcat
vi   / init.sh
#!/bin/bash
service  tomcat start
tail   -f   /var/log/tomcat/catalina.out

#把容器提交为镜像
docker  commit   4a8871d37633   centos6.9_tomcat7:v1

#上传扫雷文件到/opt目录下,并且解压

#启动容器
docker  run  -d   -p 8081:8080    -v    /opt/saolei:/var/lib/tomcat/webapps/ROOT 
#进入容器,移动扫雷文件内容
mv saolei saolei.index

③制作一个kodexplorer网盘docker镜像。nginx + php-fpm(httpd + php)

docker container rm -f `docker ps -a -q`
docker run -it -p 80:80 centos6.9_nginx:v1 /bin/bash
which nginx 
curl -o kodexplorer4.40.zip http://192.168.37.202/linux59/kodexplorer4.40.zip

#安装php-fpm
yum install -y php-fpm      #可道云缺失PHP依赖 php-gd php-mbstring
#修改PHP-fpm配置文件
user = nginx
group = nginx

#修改nginx配置文件
vi /etc/nginx/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /code;
            index  index.php index.html index.htm;
        }
        location ~ \.php$ {
            root           /code;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /code$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

#创建站点目录/code 将可道云包拉入站点目录并且解压
#授权为nginx 
chown -R nginx:nginx .

#书写脚本
vi /init.sh
#!/bin/bash
service php-fpm start
nginx  -g  'daemon off;'

yum install lrzsz -y
sysctl  net.ipv4.ip_forward=1

#创建镜像
docker commit 5dc4b8f503fe kod:v2
#启动容器
docker run -d -p 81:80 kod:v2 /bin/bash /init.sh

④ 制作phpwind镜像(数据库)

docker container rm -f `docker ps -a -q`
docker run -it -p 80:80 centos6.9_nginx:v1 /bin/bash
which nginx 


#安装php-fpm
yum install -y php-fpm      #可道云缺失PHP依赖 php-gd php-mbstring
#修改PHP-fpm配置文件
user = nginx
group = nginx

#安装数据库
yum install -y mysql-server    ###注意 php-mysql
#添加数据库用户
mysql> create database phpwind;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on phpwind.* to 'phpwind'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

#修改nginx配置文件
vi /etc/nginx/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /code;
            index  index.php index.html index.htm;
        }
        location ~ \.php$ {
            root           /code;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /code$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

#创建站点目录/code 将phpwind包拉入站点目录并且解压
#授权为nginx 
chown -R nginx:nginx .
#重启php-fpm mysqld nginx服务 


#/bin/bash
service php-fpm start
service mysqld start
nginx  -g  'daemon off;'


#创建镜像
docker commit 439e87da54cd phpwind:v2
#启动容器
docker run -d -p 81:80 phpwind:v2 /bin/bash /init.sh

注意:在安装完成phpwind以后无法登陆
#docker时区问题导致
/bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

1.2 dockerfile :

       dockerfile是一种被docker程序解释的脚本,dockerfile由一条一条的指令组成,每条指令对应linux下面的一条命令。docker程序将这些dockerfile指令翻译真正的linux命令。dockerfile有自己的书写格式和支持的命令,docker程序解决这些命令间的依赖关系,类似于Makefile。docker程序将读取dockerfile,根据指令生成定制的image
       生成命令:docker build -t manxiaoji/jdk-tomcat.

FROM          这个镜像的妈妈是谁?(指定基础镜像 image)
              # FROM centos7.2,有且只有一个
MAINTAINER    告诉别人,谁负责养它?(指定维护者信息,可以没有)
LABLE         描述,标签
RUN           你想让它干啥(在命令前面加上RUN即可)
ADD           给它点创业资金(会自动解压tar)  制作docker基础的系统镜像
WORKDIR       我是cd,今天刚化了妆(设置当前工作目录)
VOLUME        给它一个存放行李的地方(设置卷,挂载主机目录)
EXPOSE        它要打开的门是啥(指定对外的端口)(-P 随机端口)
CMD           奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)
dockerfile其他指令: 
COPY         复制文件(不会解压)rootfs.tar.gz
ENV          环境变量
ENTRYPOINT   容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数)

1.2.1使用dockerfile自动构建镜像:

(1) 搭建nginx环境

1:手动制作一次docker镜像(收集命令)

echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

yum install nginx -y

2:编写dockerfile文件

vi /opt/dockerfile/nginx/dockerfile
FROM  centos:6.9
RUN   echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts
RUN   curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN   curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN   yum install nginx -y
CMD   ["nginx","-g","daemon off;"]

3:docker build自动构建docker镜像

docker image build -t centos6.9_nginx:v2 --network=host .

4:测试docker镜像

docker run -d -p 88:80 centos6.9_nginx:v2

(2) 搭建扫雷环境 (nginx Tomcat)

1:手动制作一次docker镜像(收集命令)

echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

yum install tomcat -y

cd /var/lib/tomcat/webapps/  && \
curl -o saolei.tar.gz http://192.168.37.202/linux59/saolei.tar.gz && \
tar -xf saolei.tar.gz  && \
mv saolei ROOT

2:编写dockerfile文件

vi /opt/dockerfile/saolei/dockerfile
FROM centos6.9_nginx:v3
RUN  curl -o/etc/yum.repos.d/CentOSBase.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN  curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN  yum  install  tomcat -y

RUN  cd /var/lib/tomcat/webapps/  && \
curl -o saolei.tar.gz http://192.168.37.202/linux59/saolei.tar.gz && \
tar -xf saolei.tar.gz  && \
mv saolei ROOT

ADD  init.sh /init.sh
CMD  ["/bin/bash","/init.sh"]

(3) 搭建kod环境

1.手动制作镜像

2.编写dockerfile文件

[root@docker kod]# cat dockerfile
FROM   centos6.9_nginx:v1
RUN    curl -o/etc/yum.repos.d/CentOSBase.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN    yum  install  php-fpm php-gd php-mbstring unzip -y
RUN    mkdir /code
WORKDIR /code
ADD    kodexplorer4.40.zip  /code/
RUN    unzip  kodexplorer4.40.zip
RUN    chown -R nginx:nginx .

ADD    nginx.conf /etc/nginx/nginx.conf
ADD    php.conf   /etc/php-fpm.d/www.conf
ADD    init.sh       /init.sh 

CMD    ["/bin/bash","/init.sh"]

(4)搭建phpwind环境

[root@docker phpwind]# cat dockerfile 
FROM   centos6.9_nginx:v1
RUN    curl -o/etc/yum.repos.d/CentOSBase.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN    yum  install  php-fpm php-gd php-mysql unzip mysql-server -y
RUN    service mysqld start  && \
       mysql -e "create database phpwind;"  && \
       mysql -e "grant all on phpwind.* to 'phpwind'@'localhost' identified by '123456';"

RUN    mkdir /code
WORKDIR /code
ADD    phpwind_UTF8_8.7.1.zip  /code/
RUN    unzip  phpwind_UTF8_8.7.1.zip
RUN    chown -R nginx:nginx /code/*

ADD    nginx.conf /etc/nginx/nginx.conf
ADD    php.conf   /etc/php-fpm.d/www.conf
ADD    init.sh       /init.sh

CMD    ["/bin/bash","/init.sh"]
发布了11 篇原创文章 · 获赞 0 · 访问量 160

猜你喜欢

转载自blog.csdn.net/qq_42775163/article/details/104992788