Docker学习笔记2:

146 阅读2分钟

一、DockerFile

1.数据卷容器

# 创建一个centos 容器,并挂载一个数据卷
sudo docker run -d -it --name centos_father -v /home/docker/centos:/home/centos centos /bin/bash

# 在centos_father容器中的/home/centos目录下创建一个demo.txt文件
touch demo.txt

# 在创建一个centos容器,让他挂载centos_father的数据卷,使用--volumes-from 指令
sudo docker run -d -it --name centos_son --volumes-from centos_father centos /bin/bash

# 进入centos_son容器中查看/home/centos目录下的文件,发现centos_son中已经挂载了centos_father中挂载的数据卷,他们的关系是双向复制的
[root@01864d376ffb /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@01864d376ffb /]# cd /home/
[root@01864d376ffb home]# ls
centos
[root@01864d376ffb home]# cd centos/
[root@01864d376ffb centos]# ls
demo.txt

容器之间一些配置、数据的传递(双向复制),多个容器可以多个继承一个,也可以递归继承,例如:

A继承B的数据卷,C也继承A的数据卷,那么A,B,C三个的挂载的数据卷(只有A挂载的数据卷)是保持一致的,在三个容器之间是会进行相互复制的
A继承B的数据卷,C继承B的数据卷,那么A,B,C三个的挂载的数据卷(只有A挂载的数据卷)也是保持一致的,在三个容器之间是会进行相互复制的

数据卷的生命周期一直到没有任何容器使用它的时候,才会被删除,例如:

A继承B的数据卷,C继承B的数据卷,当B的容器被删除的时候,A,C中的数据卷依旧存在,并波保持同步,然后再将A容器删除,C中挂载的数据卷依旧还会存在,当C容器被删除的时候,也就是说这个数据卷没有别任何的容器挂载的时候,这个数据卷就会被删除

2.DockerFile:一个文件,可以bulid成为一个镜像

# 编写DockerFile_CentOS文件
vim DockerFile_CentOS

# DockerFile_CentOS中编写如下内容
[root@VM_0_6_centos docker]# vim DockerFile_CentOS 

## 镜像是基于centos而来
FROM centos

## 镜像的作者 名字<邮箱>
MAINTAINER ken<ft_ken@163.com>

## 设置环境变量
ENV MYPATH /usr/local/hmj

## 设置工作目录,引用环境变量中的STARTPATH
WORKDIR $MYPATH

## 运行镜像时需要的操作
RUN yum -y install vim
RUN yum -y install net-tools

## 暴露的端口,run的时候使用-P 随机端口的时候生效
EXPOSE 80

## 执行命令,也可以使用CMD,但是使用CMD,在run的时候在加上命令,就会被顶替,dockerFile中的CMD命令就会失效
ENTRYPOINT echo $MYPATH
ENTRYPOINT echo "-----end-----"
## 使用/bin/bash
ENTRYPOINT /bin/bash
"DockerFile_CentOS" 23L, 626C    

3.build

# bulid镜像,docker -f [镜像路径(绝对/相对)] -t [给镜像起个名字]:[TAG] .
# 坑:一定要注意后面有一个"."
docker build -f DockerFile_CentOS -t ken/centos:1.0 .