Docker镜像创建、私有仓库搭建、Docker数据卷、和容器互联互通
Docker创建镜像的三种方法
一、使用已有的镜像容器创建新的镜像
创建步骤:
1.首先本地需要有镜像,或者需要从镜像仓库下载新的镜像。
2.基于镜像创建一个镜像容器。
3.根据容器创建一个镜像。
docker pull xxx:xxx \\下载一个镜像
docker create -it 镜像名称/镜像id /bin/bash \\创建一个容器
docker commit -m "新的镜像概述" -a "作者名字" 正在运行的容器id 新的镜像名称:标签
二、基于已有模板创建镜像
可以从网上下载一些镜像模板,再通过docker命令加载镜像。
cat 模板名称 | docker import - 镜像名称:标签
三、使用Dockerfile创建镜像
先查看一下现有的镜像:
使用Dock而file,类似于写一个shell脚本。
创建一个文件目录
mkdir aaa
进入目录中,编写Dockerfile
vi Dockerfile
首先需要写明基于哪个镜像
FROM 镜像名称
写明制作这个镜像的作者信息
MAINTAINER 作者名称
写明创建镜像时临时容器内部需要执行的命令
RUN xxxxxx \\命令是从上而下执行的,但是如果命令写错了Dockerfile就不会往下执行了
开放的容器内部端口
EXPOSE 端口号
复制当前宿主机目录里的文件到容器的内部
ADD 目录下的文件 容器内部的文件路径
CMD为启动容器时容器内部的命令
CMD ["xxx.sh"]
写一个apache的Docker:
FROM centos
MAINTAINER bbs<xxx@qq.com>
RUN yum -y update
RUN yum install -y httpd
EXPOSE 80
ADD index.html /var/www/html/index.html
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
执行docker build -t 镜像名称:标签 .
Dockerfile在执行是会生成临时容器去创建镜像。
穿件完毕运行镜像,生成容器:
docker run -d -p 外部访问端口:容器定义的端口 容器id
在宿主机上输入IP地址和端口号就可以访问到容器内部。
Dockerfile一些操作指令
Docker私有仓库搭建
1.首先需要下载registry镜像到本地。
docker pull registry:latest
2.在daemon.json中添加仓库路径
vi /etc/docker/daemon.json
"insecure-registries": ["镜像仓库的IP地址:5000"],
如果下面有镜像加速,则注意后面要加逗号。
3.重启docker容器。
systemctl restart docker
4.创建registry容器
docker create registry
5.运行容器并与本地存储进行挂载
docker run -d -p 5000:5000 -v /data/registry:/tpm/registry
这里如果宿主机没有/data/registry,则docker会自动创建一个目录路径
6.修改要上传的镜像标签,并上传镜像。
docker tag centos:7 仓库IP地址:5000/centos
docker push 仓库IP地址:5000/centos
7.用curl命令查看镜像是否在仓库里。
curl -XGET http://镜像仓库IP地址:5000/v2/catalog
我的centos镜像已经成功上传。
Docker数据卷
一、容器与宿主机
宿主机为容器提供存储空间
docker run --name 容器名称 -v 宿主机的存储空间:容器的挂载点 -it 镜像名称 /bin/bash
注意如果宿主机这里没有路径,docker会自动创建。
二、容器之间
1.先创建存储容器
docker run --name 容器名称 -v 容器内部提供存储的路径 -it 镜像名称 /bin/bash
2.创建另一个容器挂载之前的存储卷。
docker run --name 容器名称 --volumes-from 存储容器名称 -it 镜像名称 /bin/bash
3.进入之前的存储容器查看,测试内容。
容器之间互联互通
1.先建立一个容器
docker run --name web05 -P -it centos:7 /bin/bash
-P 代表随机端口号
-p代表指定的端口号
2.建立第二个容器与第一个容器相连
docker run --name web06 -P --link web05:web05 -itd centod:7 /bin/bash
--link代表与web05容器相连
3.进入web06 容器进行ping测试
docker exec -it 容器ID号 /bin/bash