一 镜像创建
1 基于已有镜像,基于本地模板
01 准备镜像
doker images //查看所有可用的镜像
02 准备容器
docker create -it nginx /bin/bash
docker start id
03将容器创建成为docker镜像文件
docker commit -a "nginxv1" id nginx:v1
2 基于模板创建镜像
cat *tar.gz|docker import - docker:new
3 基于dockfile创建镜像
具体步骤:
1 准备初始镜像
2 编写dockerfile文件
3 根据文件build镜像
dockerfile的结构
1 第一行必须使用FROM指定所基于的镜像名称
2 之后使用MAIN指定镜像的用户信息
3 镜像操作相关的命令,如RUN,ADD,每执行一条,就会给基础镜像添加上新的一层
4 最后指定CMD命令,用来指定容器运行时执行的命令操作
eg:
FROM centos
MAINTAINER The Centos Project <cloud@linuxfan.cn>
RUN yum -y update
RUN yum -y install httpd
EXPOSE 80
ADD index.html /var/www/html/index.html //从源文件拷贝到目标文件,源文件必须和dockerfile在同一目录下
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
docker build -t linux/centos:httpd . //开始构建镜像
4 将容器的当前状态制作成为镜像文件
docker ps|grep httpd
docker commit -a "linux" dockerid linux/centos:httpd:v1
二 构建私有仓库
1 下载私有仓库镜像
docker pull registry
2 编辑json文件指定私有仓库http地址和端口
vi /etc/docker/daemon.json
{"insecure-registries": ["192.168.100.101:5000"]}
systemctl restart docker
3 使用下载好的私有仓库的镜像文件创建容器
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
-p:指定端口与映射端口
4 上传镜像文件到私有仓库容器中并删除镜像文件验证
docker push 192.168.100.101:5000/centos_httpd:v1
docker images|grep httpd
docker pull 192.168.100.101:5000/centos_httpd:v1
三 docker的数据管理
为了方便查看容器内产生的数据或者将多个容器内的数据进行共享,会设计到容器的数据管理概念。具体方式为数据卷和数据卷容器。
1 数据卷:供容器使用的特殊目录,位于容器中,可以将宿主机的目录挂载到数据卷上,对数据卷的修改立即可见,并且更新数据不会影响镜像,实现了数据在宿主机和容器之间的迁移。类似mount
01 创建数据卷的容器基于centos镜像
docker run -itd -v /linux/data1:/data1 -v /linux/data2:/data2 --name linuxcon centos /bin/bash //将本地目录/linux/data{1,2}分别挂载到容器的/data{1,2}目录中去。
02 连接容器,查看数据卷目录
touch /linux/data1/test/txt
docker exec -it xxxid /bin/bash
ls /data1
2 数据卷容器:就是个普通的容器,专门提供数据卷给其他容器挂载使用。先创建一个容器作为数据卷,之后在其他容器创建时使用--volumes-from挂载源数据卷容器使用,如此可以实现多个容器之间的数据共享
docker run -itd --volumes-from linuxcon --name linuxcon-1 centos /bin/bash
e4b9e0ef5063133aaf088cbc03b10c6788d21974c91b4f2c20f649f34f576b5e
进入容器后,发现存在data1 data2目录
docker exec -it e4b9e0ef5063 /bin/bash
ls -ld /data1 //发现存在data1和data2目录
四 网络管理
容器之间怎么进行网络通信呢?
1 端口映射:将容器内部的端口映射到docker宿主机的主节点端口,实现外部主机访问docker容器内的服务。
01 创建基于centos镜像的容器并且实现端口映射,将容器的httpd的80端口映射到宿主机的8080端口
dockerrun -itd -e "container=docker" --privileged=true -p 8080:80
-p hostport:containerport
-p ip:hostport:containerport
2 容器互联:通过容器的名称在容器之间建立一条专门的网络通信隧道从而实现容器的互联。就是在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息。
01 创建源容器
docker run -itd --name centos7-1 centos /bin/bash //创建源容器
docker ps|grep centos7-1
02 创建接收容器,指定centos7-1为源容器
docker run -itd --name centos7-2 --link centos7-1:centos7-1 centos /bin/bash //滴一个centos7-1的意思是指明源容器,第二个是指设置源容器的别名
docker exec -it id-of-centos7-2 /bin/bash //进入到centos7-2
ping centos7-1 //发现是可以连通的