1、常用命令
- 进入容器:
docker exec –it 0e2801cbb8bf /bin/bash
- 启动容器:
docker restart containerName
- 退出容器:
exit
- 启动镜像:
docker run -p port(机器端口):port(docker内部端口) imageId /bin/bash
- 删除:
- 停止所有的container,这样才能够删除其中的images:
docker stop $(docker ps -a -q)
- 删除所有container:
docker rm $(docker ps -a -q)
- 删除images:
docker rmi <image id>
- 删除untagged images,也就是那些id为<None>的image:
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
- 删除全部image:
docker rmi $(docker images -q)
- 停止所有的container,这样才能够删除其中的images:
- 获取镜像:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
- 列出镜像:
docker image ls
- 删除虚悬镜像:
docker image prune
- 登陆指定服务器:
docker login [server]
- 构建镜像:
docker build -t name:tag -f Dockerfile .
2、Dockerfile常用命令
我们把每一层修改、安装、构建、操作的命令写入一个脚本,用这个脚本来构建、定制镜像,这个脚本就是Dockerfile。
-
docker build .
执行dockerfile文件生成镜像文件 -
FROM
指定基础镜像 -
RUN
执行命令,Dockerfile中的每一个指令都会建立一层,所以执行RUN命令时最好用&&来优化 -
COPY
复制文件,指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置。 -
ADD
更高级的复制文件,所有的文件复制均使用 COPY 指令,仅在需要自动解压缩的场合使用 ADD -
CMD
容器启动命令,指令就是用于指定默认的容器主进程的启动命令的,Docker 不是虚拟机,容器中的应用都应该以前台执行,而不是像虚拟机、物理机里面那样,用 systemd 去启动后台服务,容器内没有后台服务的概念。对于容器而言,其启动程序就是容器应用进程,容器就是为了主进程而存在的,主进程退出,容器就失去了存在的意义,从而退出,其它辅助进程不是它需要关心的东西。 -
ENTRYPOINT
入口点,和 CMD 一样,都是在指定容器启动程序及参数。应用运行前的准备工作,ENTRYPOINT ["docker-entrypoint.sh"] -
VOLUME
定义匿名卷,VOLUME /data,这里的 /data 目录就会在运行时自动挂载为匿名卷,任何向 /data 中写入的信息都不会记录进容器存储层,从而保证了容器存储层的无状态化。
3、对比传统虚拟机总结

4、Docker架构
- Docker镜像
镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。 - Docker容器
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root
文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。 - Docker仓库
仓库是集中存放镜像文件的场所,类似于git,包含多个镜像;分为公开仓库和私有仓库,最大的公开仓库是Docker Hub,国内仓库有Docker Pool等。 -
Docker使用C/S架构模式
image.png
一般运行流程为:用户在Docker Client端通过命令行发送请求到Docker Daemon,Docker Daemon中的Server收到请求后,Engine会创建一个工作任务job,通过调用Driver模块的各个驱动分别执行不同的任务,比如需要镜像就调用graphdriver从镜像仓库下载镜像,创建容器时也需要调用其它两个驱动来配置网络和创建并维护容器。最后生成运行中的容器或者上传镜像到镜像仓库等。
网友评论