1.docker是基于go语言实现
主要目标是对对应组件的封装、分发、部署、运行等生命周期的管理,使应用程序及其运行环境可以作到“一次封装,处处运行”linux
2.docker为了解决运行环境和配置问题的软件容器,方便作持续集成并有助于总体发布的容器虚拟化技术nginx
3.docker能干些什么?docker
新建并启动一个docker容器,使用 docker run
命令便可apache
docker run -d -p 91:80 nginx
须要注意的是使用 docker run 命令建立容器时,会先检查本地是否存在指定镜像,若是本地不存在,docker 会自动从 dockerHub 上下载一个该镜像并启动。vim
访问地址http://localhost:91/
windows
容器:用镜像建立的运行实例,能够把容器当作简易版的Linux的容器,一个运行中的容器是一个运行在Docker主机上的进程,但它和主机,以及全部运行在主机上其余进程都是隔离的。centos
容器是利用什么机制实现隔离的?tomcat
docker是一个client-server结构的进程,docker守护进程运行在主机上,而后经过socket链接从客户端的访问,守护进程从客户端接受命令并管理运行在主机上的docker容器。容器是一个运行时环境,就是鲸鱼背上的一个个集装箱。bash
1.帮助命令架构
docker version docker info docker --help
2.镜像命令
docker images : 列出本地镜像 docker image -qa : 显示所有镜像id docker images --digests : 显示镜像简介信息 docker images --digests --no-trunc docker search tomcat : 搜索某个镜像 docker pull tomcat : 下载镜像到本地 等价于 docker pull tomcat:latest(默认下最新版本) docker rmi tomact : 删除某个镜像 docker rmi tomcat:6.5 删除制定版本镜像 docker rmi -f tomcat 强制删除镜像 docker rmi -f nginx tomcat 强制删除多个镜像 docker rmi -f ${docker images -qa} 强制删除所有
3.容器命令
(1) docker pull centos : 下载centos镜像 (2) docker run [options] image —name=“容器新名字” :为容器制定一个名字 -i : 容器的image id -t : 交互式启动 ,好比 :docker run -it 0a8b6f21d511 -d : 后台运行容器 -p : 制定映射端口 docker run -it -p 8080:8080 tomcat (-p 指定主机端口:docker容器暴露给宿主机的端口;-P 随机分配端口) (3) docker ps : docker中运行的进程,docker ps -n 5 (4) exit: 容器中止退出 (5) docker restart \ docker stop \ docker kill \ docker rm (6)一次性删除多个容器: docker rm -f $(docker ps -qa) docker ps -aq | args docker rm (7)docker run -d 容器名 : 运行容器 (8)docker logs -f -t --tail n 容器id(-f : 跟随最新的日志;-t :加入时间戳;--tail n : 倒数几行): 查看容器日志 演示命令: docker run -d centos /bin/sh -c 'while true;do echo hello zzyy;sleep 2;done' : 每隔两秒输出内容 (9) docker top 容器ID : 查看容器内部运行的进程 (10) docker inspect 容器ID : 查看容器内部细节,如:docker inspect f791d79a4467 (11) docker attach 容器ID : 从新进入未中止的容器 (12) docker exec -t f791d79a4467 ls -l /tmp : 从新进入某个容器并执行容器中的命令,拿到结果反给宿主机 (13) docker cp 容器ID:路径文件 /宿主机路径 :copy容器内容到宿主机上
3.1 docker 命令使用举例
好比重启nginx过程:
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的全部内容,包括代码、运行时须要的库、环境变量和配置。
docker如何加载?
docker的镜像实际上由一层一层的文件系统组成,这种层级文件系统是unionFS
docker commit -m=“提交信息” -a=“做者” 容器ID 要建立的目标镜像名称:[标签名] docker commit -m=“helloword” -a=“feifei” 0a8b6f21d511 feifei/tomcat02:1.2
docker容器产生的数据,若是不经过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据天然就没有了,为了保存数据咱们使用docker的数据卷。数据卷使得数据能够持久化和共享。
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名 例如:docker run -it -v /tmp/my-volume:/tmp/my-volume centos ;宿主机目录:/tmp/my-volume和docker容器目录/tmp/my-volume这两个目录中的数据能够随时同步,容器重启后,也会同步; docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名 (带权限的命令,同步到容器内的文件read only)
这种方式不支持多台宿主机都可以创建数据卷
能够在Dockerfile中使用 VOLUME
指令来给镜像添加一个或多个数据卷
1.建立Dockerfile文件目录/Users/ShiFeifei/Software/docker-config
,在这个目录下
touch Dockerfile vim Dockerfile
添加以下内容
FROM centos RUN mkdir /myvol RUN echo "hello world" > /myvol/greeting VOLUME /myvol
2.新建一个 docker 容器
docker build -f /Users/ShiFeifei/Software/docker-config/Dockerfile -t sff/centos .
Dockerfile 是用来构建 Docker镜像的构建文件,是由一系列命令和参数构成
#
表示注释Dockerfile面向开发,Docker镜像成为软件交付标准,Docker容器则涉及部署与运维,三者缺一不可,是Docker体系的基石。
1.实现一个功能,定制一个 mycentos 支持vim、ifconfig命令,而且修改登陆后的默认路径
FROM centos ENV homePath /tmp WORKDIR $homePath #登陆时的目录是 /tmp RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD /bin/bash
2.自定义一个centos,自带 tomcat 、jdk
FROM lentos MAINTAINER shifeifei<shifeifei6@163.com> #把宿主机当前路径下的文件c.txt拷贝到容器的/usr/local/路径下 COPY c.txt /usr/local/test.txt #把Java和tomcat添加到容器中 ADD jdk-8u171-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-9.0.8.tar.gz /usr/local/ #安装vim编辑器 RUN yum -y install vim #设置工做访问时的WORKDIR路径 ENV MYPATH /usr/local WORKDIR $MYPATH #配置Java、tomcat环境变量 ENV JVAV_HOME /usr/local/jdk1.8.0_171 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8 ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin #容器运行时监听端口 EXPOSE 8080 #启动运行tomcat #CMD [“/usr/local/apache-tomcat-9.0.8/bin/startup.sh”,"run"] CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out