文章目录
- 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