docker映射问题和常用命令

之前在项目部署在docker里发现不能正常的运行,网上百度了一下原因。

docker 镜像和容器

docker 就是为了方便配置环境,使得项目的开发和上线不用适配各种环境。

因为我们开发测试和项目正式上线的时候环境肯定是不同的,很多时候因为版本的差异会导致很多的问题,比如Mysql的版本,redis版本,还有liunx系统各种依赖的版本,这些差异都有可能会导致项目的运行失败,所以统一的开发测试和部署环境就显得尤为重要了。

docker run文件夹映射 docker映射出来的文件权限_docker run文件夹映射

docker镜像和容器的关系通俗的说就像 软件包和正在运行的软件,这个软件包里包含了你需要的各种环境和项目本身,当你启动镜像时,你需要的项目就可以开启,正在运行的镜像就称为容器。

docker 映射问题

因为每一个容器都算是一个独立的系统,在这个系统中,生成的文件和路径都是独有的,当你关闭这个容器的时候,项目中生成的文件也就没了。而且如果你要操作宿主机上的文件的话也是无法访问的,为了解决这个问题,docker提供了文件夹映射和数据卷的功能,可以实现容器内部和宿主机环境的交互:

1.创建数据卷映射,并将数据卷映射到到容器的指定路径,这样在该指定路径下的文件,会在宿主机的对应文件夹中显示,且不会随着容器的停止而消失。

2.直接映射,将宿主机系统的某个路径映射到容器的某个路径,等于在这两个路径中架起了一座桥梁,可以数据互通。

#通过数据卷名称映射
docker run -d -p 8080:8080 --name tomcat -v 数据卷名称:容器内部的路径 镜像id
#通过路径映射数据卷
docker run -d -p 8080:8080 --name tomcat -v 路径(/root/自己创建的文件夹):容器内部的路径 镜像id

数据卷名映射的话,在宿主机内默认目录为:

/var/lib/docker/volumes/{卷名}/_data

docker常用命令

我经常使用的一些命令:

docker ps 					#查看正在运行的所有容器
docker ps -a 				#查看所有的容器(包括已经停止但是未删除的)
docker images 				#查看所有的镜像
docker stop 容器名/容器id前缀	#停止容器运行
docker rm 容器名/容器id前缀	#删除容器(需要先停止运行容器)
docker rmi 镜像名/镜像id前缀   #删除镜像
docker build -t 镜像名 .  		#生成镜像,当前目录下需要有Dockerfile(还可以扩展很多参数,具体可以百度)
docker run -d #后台运行
		   -p 主机端口:容器内端口 #将容器中的端口映射出来
		   --name=     		   #指定容器的名字
		   -v {路径}:{路径}      #映射指定路径(可以多个)
		   镜像名				  #该容器需要哪个镜像来生成
docker logs -f #实时显示所有的docker日志
			--tail N #显示最新的N条日志
docker pull 镜像地址  #拉取镜像

小作坊经常改镜像,建议写进shell脚本一键删除部署