Docker相关概念
- Docker
Docker原本是一个开源工具项目,Docker介于容器(原生进程)和OS之间提供简单易用的容器接口,使容器访问到的都是虚拟资源,让应用程序和该程序的依赖都打包在一个文件中便于分享、复制、修改和版本管理,而运行在容器中的程序将会和运行在真正的物理机上一样,可以理解为Docker是一种更轻量的虚拟机。 - Container(容器)
容器是模拟某类程序运行需要的环境(不一定是OS),容器和虚拟机(VM)的本质区别在于虚拟机是 操作系统级 的抽象,容器是 进程级 的抽象,要轻量的多。容器相当于对应某类程序或服务的完整运行环境,只需提供用到的组件。虚拟机需提供整个OS,然后在OS部署环境再执行,这样会占用很多并不需要的系统资源。 - Image(容器镜像)
容器镜像是容器的文件载体,也可以看成容器的模版,通过image文件可以创建Docker容器的运行实例,同一个容器镜像可以在系统中创建多个同时运行的容器实例。和虚拟机类似,image文件生成的容器实例本身也是一个文件即容器文件,保存容器内运行的状态和数据。只不过虚拟机镜像运行后会直接修改其自身而一般不会保存最初的副本。
常用指令
docker version
&docker info
查看Docker的版本和相关信息,一般用于验证docker是否安装成功docker image ls
列出本机所有容器的镜像文件docker image rm <imageName>
删除名为[imageName]的镜像文件docker image pull <imagePath>
从默认镜像源拉取目录为[imagePath]的镜像文件到本地
$ docker image pull library/hello-world
library为image文件所在组,hello-world为镜像文件名
-
docker container ls [options]
&docker ps [options]
列出本机所有正在运行的容器实例-a
&--all
列出本机所有容器实例(包括已终止但没有删除的容器实例)
-
docker container run [options] <imageName> [<command>] [<arg>...]
从名为[imageName]的镜像文件生成一个容器实例并运行,如果本地没有该镜像文件则会从默认镜像源自动拉取。imageName也可以指定标签来指定提交的版本,如demo:0.0.1,如不指定则为latest版本。command arg… 指定容器启动后内部第一个执行的命令和传入的参数,一般command为 /bin/bash,保证用户可以使用Shell,如:
$ docker container run -rm -p 8000:3000 -it testImage /bin/bash-p <localPort:containerPort>
指定容器的端口containerPort映射到本机的localPort端口-it
容器的Shell输出重定向到当前的Shell窗口,本机窗口输入的命令也会传入容器。-d
以后台模式运行容器,和-i相对-rm
指定该容器实例终止后自动删除容器文件--name=<containerName>
为容器指定一个名称-v <localPath:containerPath>
将容器中containerPath的文件夹挂在到本地主机的localPath文件夹,是两个文件夹作为共享目录。如果containerPath不存在,则会在容器中新建该文件夹;如果localPath不存在或没指定为空,则在主机的Docker指定目录下创建随机文件夹,主要用于容器之间的共享。containerPath必须为绝对路径,localPath也必须为绝对路径,否则会在/var/lib/docker/volumes/文件夹下创建卷
-
docker container exec [options] <container> [<command>] [<arg>...]
如果run的时候没有指定-it参数,则相当于容器在后台运行,可以使用exec命令进入该容器并操作shell
$ docker container exec -it xxxxxid /bin/bash
docker container kill <container>
终止容器实例,container参数可以为容器id或容器name。部分容器在运行之后会自动终止(一般提供一次性的功能如hello-world);部分容器不会自动终止,因为其提供服务或平台(如Ubuntu容器),在需要终止服务时使用该命令终止容器实例。值得注意的是容器实例终止后其容器文件还在,如果需要再次使用可以用start指令继续运行;如果不需要再次使用可以使用rm指令删除docker container start <container>
重新运行容器实例docker container rm <container>
删除容器实例docker container logs <container>
当运行容器时没有使用-it参数时可以通过logs指令查看容器的输出日志docker container cp [options] <container>:srcPath destPath
docker container cp [options] destPath <container>:srcPath
容器与主机之间的数据拷贝,也可以通过vscode插件remote ssh在图形界面直接修改或操作文件-l
保持源目标中的链接
docker system df [options]
类似于Linux上的df命令,用于查看Docker的磁盘使用情况(包括docker管理的镜像、容器和卷所占用的磁盘空间),值得注意的是容器所占的磁盘空间并不包括镜像的内容,而是镜像实例化后产生的新的数据,当重启容器时docker的runtime会同时加载容器实例和其对应的镜像来复原-v
查看每个镜像、容器和卷所占磁盘空间的详情
环境变量
当在容器中配置开发环境时,常常需要设置环境变量,但是当重启容器时会清空,解决方法是将环境变量设置在/root/.bashrc
文件中。如配置go环境,可以在该文件末尾添加:
# golang
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
也可以使用Dockerfile构建镜像,并使用entrypoint进行配置