文章目录
1. Docker 和虚拟机技术的不同:
- 传统虚拟机:虚拟出一条硬件,运行一个完成的操作系统,然后在这个系统上安装和运行软件.
- 容器内的应用直接应用在宿主机的内容,容器是没有自己的内核的,也没有虚拟机的硬件,容器间是相互隔离的,每个容器内都有一个属于自己的文件系统.
- 容器打包镜像,发布测试,一件运行,更便捷的升级和扩缩容.
2. Docker 的基本组成
- 镜像(image): docker镜像就好比一个模版,可以通过这个模版来创建容器服务(最终服务运行或者项目运行就是在容器中的)
- 容器(container): docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的.
- 仓库(repository): 存放镜像的地方
3. 基本命令
docker version # 显示docker版本信息
docker info # 显示docker系统信息
docker 命令 --help
3.1 镜像基本命令
docker images # 镜像的仓库源 | 镜像标签| 镜像ID| 镜像创建时间| 镜像大小
docker images -aq # 显示所有的镜像id
docker search mysql # 从dockerhub中搜索相应的镜像
docker pull mysql # 下载镜像
docker rmi -f imageID #删除某一个容器
docker rmi -f $(docker images -aq) # 删除全部的容器
3.2 容器命令
说明: 我们有了镜像才可以创建容器,例如:
新建容器并启动
# 下载centos镜像
docker pull centos
docker run [可选参数] image
参数说明
--name =" Name"
容器名字,用于区分容器
-d
后台方式运行
-it
使用交互方式运行,进入容器查看内容
-P
指定容器端口-p 8080:8080
-p
随机指定端口
docker run -it centos /bin/bash # 启动并进入容器
exit # 容器停止并退回主机
ctrl+P+Q # 容器不停止退回
启动和停止容器操作:
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前运行的容器
删除容器
docker rm 容器id # 删除指定容器
docker rm -f -$(docker ps -aq) # 删除所有的容器
docker ps -a -q|xargs docker rm # 管道式,删除所有的容器
查看正在运行的容器
docker ps # 查看所有正在运行的容器
docker ps -a # 列出当前正在运行的容器+历史运行过的容器
3.3 常用的其他命令
查看日志
docker logs -tf --tail 10 容器id
查看容器中的进程信息
docker top 容器id
查看镜像的元数据
docker inspect 容器id
进入当前正在运行的容器
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
docker exec -it 容器id /bin/bash # 进行容器后开启一个新的终端(常用)
docker attach 容器id # 进入正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器id: 容器内路径 主机路径
3.4 命令小结
命令 | 功能 | 中文解释 |
---|---|---|
attach | attach to a running container | 当前shell下attach连接指定运行的镜像 |
build | build an image from a Dockerfile | 通过Dockerfile定制镜像 |
commit | create a new image from a container changes | 提交当前容器为新的镜像 |
cp | copy files/folders from the containers filesysytem to the host path | 从容器中拷贝指定文件或目录到宿主机中 |
create | create a new container | 创建一个新的容器,同run,但不启动容器 |
diff | inspect changes on a container’s filesystem | 查看docker容器变化 |
events | get real time events from the server | 从docker服务获取容器实时事件 |
exec | run a command in an existing container | 在已存在的容器上运行命令 |
export | stream the contents of a container as a tar archive | 导出容器的内容流作为一个tar归档文件[对应import] |
history | show the history of an image | 展示一个镜像形成的历史 |
images | list images | 列出系用当前镜像 |
import | create a new filesystem image from the contents of a tarball | 从tar包中的内容创建一个新的文件系统映像[对应export] |
info | display system-wide information | 显示系统相关信息 |
inspect | return low-level information on a container | 显示容器详细信息 |
kill | kill a running container | kill指定的docker容器 |
load | load an image from a tar archive | 从一个tar包中加载一个镜像[对应save] |
login | register or login to the docker registry server | 注册或者登录一个docker源服务器 |
logout | log out from a docker registry server | 从当前docker registry退出 |
logs | fetch the logs of a container | 输出当前容器日志信息 |
port | lookup the public-facing port which is NAT-ed to PRIVATE_POTRT | 查看映射端口对应的容器内部源端口 |
pause | pause all processes within a container | 暂停容器 |
ps | list container | 列出容器列表 |
pull | pull an image or a repositry from the docker registry server | 从docker镜像源服务器拉取指定镜像或者库镜像 |
push | push an image or a repository to the docker registry server | 推送指定镜像或者库镜像至docker源服务器 |
restart | restart a running container | 重启运行的容器 |
rm | remove one or more containers | 移除一个或者多个镜像 |
rmi | remove one or more images | 移除一个或多个镜像[无容器使用才可以删除,否则需要删除相关的容器才可或者 -f 强制删除] |
run | run a command in a new container. | 创建一个新的容器并运行一个命令 |
save | save an iamge to a tar archive | 创建一个镜像为一个tar包 |
search | search for an image on the docker hub | 在docker hub中搜索镜像 |
start | start a stopped containers | 启动容器 |
stop | stop a running containers | 停止容器 |
tag | tag an image into a repositry | 给源中国镜像打标签 |
top | lookup the running processes of a container | 查看容器中运行的进程信息 |
unpause | unpause a paussed container | 取消暂停容器 |
version | show the docker version information | 查看docker 版本号 |
wait | block until a container stops,then print its exit code | 截取容器停止时的退出状态值 |
4. Commit 镜像
docker commit 提交容器成为一个新的副本
# 命令和git原理类似
docker commit -m ="提交描述信息" -a ='作者' 容器id 目标镜像名
实例:
- 启动一个默认的tomcat
- 发现这个默认的tomat是没有webapps应用
- 自己拷贝了基本的文件
- 将我们操作过的容器通过commit提交一个镜像,以后就可以使用我们修改过的镜像即可,这就是我们自己的一个修改的镜像.
5. 容器数据卷
如果数据都在容器中,那么我们删除容器,数据就会丢失.数据需要持久化,并且容器之间可以共享数据.数据卷可以满足:容器的持久化和同步操作,容器间也是可以数据共享的.
使用数据卷(volume)
docker run -it -v 主机目录 容器目录 centor /bin/bash
好处: 我们以后修改只需要在本地修改即可,容器内会自动同步!
5.1 Dockerfile
Dockerfile 就是用来构建docker镜像的构建文件 ===> 命令脚本(通过这个脚本可以生成镜像)
构建步骤:
- 编写一个dockerfile 文件
- docker build 构建成为一个镜像
- docker run 运行镜像
- docker push 发布镜像 (DockerHub、阿里云镜像仓库)
DockerFile的指令
FROM #基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的.姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 例如tomcat镜像,这个tomcat压缩包就是需要添加的内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPORT #指定这个容器启动的时候需要运行的命令
ONBUILD。 # 当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令,触发指令.
COPY # 将我们的文件拷贝到镜像中
ENV # 构建的时候设置环境变量
创建一个自己的centos镜像
- 构建Dockerfile文件
# 创建一个dockerfile文件,名字可以随机,建议dockerfile
FROM centos
MAINTAINER zhuht<2259455033@qq.com>
ENV MYPATH /user/local # 定义环境变量
WORKDIR $MYPATH # 进来是的工作目录
RUN yum -y install vim # 安装vim工程
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "------end-------"
CMD /bin/bash
- 构建镜像
docker build -f dockerfile -t mycentos:0.1 .
创建Tomcat镜像
- 准备镜像文件tomcat压缩包,jdk的压缩包
- 编写Dockerfile文件
FROM centor
MAINTAINER zhuht<2259455033@qq.com>
COPY readme.txt /user/local/readme.txt
ADD jdk.tar /user/local/ # jdk的压缩包
ADD tomcat.tar /user/local/
RUN yum -y install vim # 安装vim工程
RUN yum -y install net-tools
ENV MYPATH /user/local # 定义环境变量
WORKDIR $MYPATH # 进来是的工作目录
ENV JAVA_HOME /user/local/jdk.1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
EXPOSE 80
CMD echo $MYPATH
CMD echo "------end-------"
CMD /bin/bash
5.2 数据卷容器
docker run -it --name docker02 --volumes-from docker01 lainxi/censtor:1.0