文章目录

  • Dockerfile和私有仓库创建
  • Dockerfile 介绍
  • Dockerfile 是由一组指令组成的文件
  • Dockerfile 结构四部分
  • Dockerfile 操作指令
  • -----------------------使用Dockerfile创建镜像---------------------
  • 接下来,我们要创建run.sh和index.html
  • //生成镜像
  • //新镜像运行容器
  • //测试
  • 基于已有的镜像容器进行创建
  • //创建容器
  • -------------私有仓库建立--------------------
  • 上传
  • 获取私有仓库列表
  • 随机映射端口
  • ----------------容器互联-----------------
  • ----------------------------Docker数据卷-----------------------------
  • ------------------------数据卷容器-----------------------------


Dockerfile和私有仓库创建

Dockerfile 介绍

Dockerfile 是由一组指令组成的文件

Dockerfile 结构四部分

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令

Dockerfile 每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释

Dockerfile 操作指令

指令

含义

FROM镜像

指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令

MAINTAINER名字

说明新镜像的维护人信息

RUN命令

在所基于的镜像上执行命令,并提交到新的镜像中

CMD[“要运行的程序”,“参数1,参数2”]

指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能最后一条被执行

EXPOSE端口号

指定新镜像加载到Docker时要开始的端口

ENV环境变量 变量值

设置一个环境变量的值,会被后面的RUN使用

ADD源文件/目录 目标文件/目录

将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL

COPY 源文件/目录 目标文件/目录

将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中

VOLUME[“目录”]

在容器中创建一个挂载点

USER 用户名/UID

指定运行容器时的用户

WORKDIR 路径

为后续的RUN、CMD、ENTRYPOINT指定工作目录

ONBUILD 命令

指定所生成的镜像作为一个基础镜像时所要运行的命令

HEALTHCHECK

健康检查

我对Dockerfile的理解是,创建一个有内容的镜像文件,创建完成后,将镜像添加到容器中,直接运行即可

-----------------------使用Dockerfile创建镜像---------------------

mkdir apache

cd apache

vim Dockerfile

#基于的基础镜像

FROM centos:7

#维护镜像的用户信息

MAINTAINER The porject <cloud-ops@centos.org>

#镜像操作指令安装apache软件

RUN yum -y update
RUN yum -y install httpd

#开启80端口(内部)

EXPOSE 80

#复制网站首页文件

ADD index.html /var/www/html/index.html

#将执行脚本复制到镜像中

ADD run.sh /run.sh
RUN chmod 755 /run.sh

#启动容器时执行脚本

CMD ["/run.sh"]

接下来,我们要创建run.sh和index.html

vim run.sh

#!/bin/bash

rm -rf /run/httpd/*

exec /usr/sbin/apachectl -D FOREGROUND

----------创建网页----------------

echo "web test" > index.html
//生成镜像
docker build -t httpd:centos .
//新镜像运行容器
docker run -d -p 8080:80 httpd:centos
//测试
http://192.168.209.139:8080

基于已有的镜像容器进行创建

//创建容器
docker create -it jasonlix/docker-cobbler /bin/bash
docker commit -m “new” -a “docke” ID号(镜像) docke:test
docker images | grep daoke
------------基于本地模板创建-------------
weget http://download,openvz.org/template/precreated/debin-7.0-x86-minimal.tar.gz
cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new
docker images | grep new

-------------私有仓库建立--------------------

docker pull registry

vim /etc/docker/daemon.json

{
  "insecure-registries": ["192.168.209.139:5000(外部端口)"],   //添加
  "registry-mirrors": ["https://*********.mirror.aliyuncs.com"]
}

systemctl restart docker

docker create -it registry /bin//bash

docker start ID号(-a 查出来的容器id号)

让容器运行起来

docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry

更改标记为192.168.209.139:5000/nginx
docker tag nginx:latest 192.168.209.139:5000/nginx

上传

docker push 192.168.209.139:5000/nginx

获取私有仓库列表

curl -XGET http://192.168.209.139:5000/v2/_catalog
上传成功,显示如下
{“repositories":[“nginx”]}
测试,从私有仓库下载nginx
docker pull 192.168.209.139:5000/nginx/latest

随机映射端口

docker run -d -P 192.168.209.139:5000/nginx
随机端口从32768开始
----------------容器互联-----------------
docker run -itd -P --name web11 centos:7 /bin/bash
打开一个新的客户端
docker run -itd -P --name web22 --link web11:web11(这边可以是一个别名) centos:7 /bin/bash

数据管理操作

  • 方便查看容器内产生的数据
  • 多容器间实现数据共享

两种管理方式

  • 数据卷,实现容器和宿主机之间的数据共享
  • 数据卷容器,实现容器和容器之间的数据共享

----------------------------Docker数据卷-----------------------------

docker pull centos
//宿主机目录/var/www 挂载容器中的/data1
docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash
//进入容器
cd /data1/
touch test123
//返回宿主机进行查看
ls /var/www/

------------------------数据卷容器-----------------------------

//数据卷容器
docker run --name web100 -v /data1 -v /data2 -it centos:7 /bin/bash
//打开一个新的客户端,新容器挂载数据卷容器web100
docker run -it --volumes-from web100 --name db1 centos:7 /bin/bash