Docker Engine(类似C/S架构)
底层技术支持
Docker image:
Docker Container
dockerfile语法及最佳实践
例如:FROM centos 或FROM ubuntu:14.04
FROM 尽量使用官方的image作为base image!
LABEL:定义了image的Metadata #LABEL有点类似代码中的注释
RUN 一般运行一些命令
RUN为了美观,复杂的RUN请使用反斜杠换行,避免无用分层,合并多条命令成一行!
例如多条命令,则使用&&。 RUN yum update && yum install -y vim \
python-dev
WORKDIR设定当前工作目录的。
WORKDIR /ROOT
WORKDIT /test #如果没有这个目录会自动创建test目录
WORKDIR demo
RUN pwd #输出结果应该是/test/demo
注意:使用WORKDIR,不要用RUN cd!不推荐的
尽量使用绝对目录路径,不要使用相对路径
ADD and COPY
ADD hello /
ADD test.tar.gz/ #添加到根目录并解压缩
WORKDIT /root
ADD hello test/ #/root/test/hello
WORKDIR /root
COPY hello test/
ADD与COPY的区别,ADD可以添加文件到指定目录,还可以解压缩
大部分情况下,COPY优先于ADD使用,ADD除了COPY还有额外功能(解压)
添加远程文件/目录请使用curl或者wget
ENV 设定环境变量
ENV MYSQL_VERSION 5.6 #设定常用变量
RUN yum -y install mysql-server= "${MYSQL_VERSION}" && rm -rf /var/lib/apt/lists/* #引用常用变量
ENV尽量使用增加可维护性
VOLUME and EXPOSE 主要用于存储和网络(后面章节讲)
CMD and ENTRYPOINT (后面章节讲)
RUN:执行命令并创建新的Image Layer
CMD:设置容器启动后默认执行的命令和参数
ENTRYPOINT:设置容器启动时运行的命令
Shell格式
RUN yum -y install vim
CMD echo "hello docker"
ENTRYPOINT echo "hello docker"
Exec格式
RUN [ "yum" , "-y" , "install" , "vim"]
ENV name Docker
ENTRYPOINT ["/bin/echo" , "hello $name" ]
新建exec
发现上图打印是hello $name,并没有将我们定义的变量内容打印出来
修改Dockerfile之后再新建与运行
CMD:
docker run [image] 输出?
Docker run -it [image] /bin/bash输出?
ENTRYPOINT
copy docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 27017
CMD ["mongod"]
docker rm $(docker ps -qa) #删除所有docker ps -a运行的容器,包含过期与当前运行的
CMD是直接打印出hello Docker,但是运行时,在后面加/bin/bash则会进入这个容器
docker 仓库
在lc001上telnet lc002的5000端口
在lc001上指定本地仓库
可以用浏览器去访问http://192.168.40.151:5000/v2/_catalog,未发现有hello-world
Push 到仓库lc002
登录浏览器去看