systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker
systemctl enable docker
docker info
docker --help
docker 具体命令 --help
docker images列出本地主机上的镜像

选项:
docker search在 hup 服务器上寻找镜像,如果没有配置国内镜像默认就是在 hup.docker.com 上查找。

选项:

docker pull拉取指定镜像

如果没有指定 TAG,默认就是最新版,即 docker pull ubuntu:latest

docker system df查看镜像/容器/数据卷所占用的空间

docker rmi删除某个镜像

删除单个:docker rmi -f 镜像ID
删除多个:docker rmi -f 镜像名1:TAG 镜像名2:TAG
删除全部:docker rmi -f $(docker images -qa)

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
选项

docker ps


选项
两种退出方式
docker start 容器ID或者容器名

docker stop 容器ID或者容器名

docker kill 容器ID或者容器名
docker rm 容器ID或者容器名

没有停止的容器加上选项 -f 既可以删除。
一次性删除多个容器实列 docker rm -f $(docker ps -aq) 或者 docker ps -a -q | xargs docker rm

docker run -d 镜像名
请注意,虽然是叫做守护容器,但是如果你的容器内部没有一个前台进程,即使是使用 docker run -d 运行的容器也会马上结束。

因此,需要将我们要运行的程序以前台进程的形式进行,如下图所示:

docker logs 容器ID或者容器名

docker top 容器ID或者容器名

docker inspect 容器ID或者容器名

docker exec -it 容器ID或容器名 shell


docker attach 容器ID或容器名

attach 直接进入容器启动命令的终端,不会启动新的进程,用 exit 退出,会导致容器的停止。
exec 是在容器中打开新的终端,并且可以启动新的进程,用 exit 退出,不会导致容器的停止。
推荐用 docket exec 进入正在运行的容器。
容器->主机
docker cp 容器ID或容器名:容器内路径 目的主机路径

主机->容器
docker cp 文件名 容器名:容器内路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wObynC2F-1660483281740)(https://incipe.oss-cn-shenzhen.aliyuncs.com/image-20220813165403516.png)]
export 导出容器的内容流作为一个 tar 归档文件[对应 import 命令]
import 从 tar 包中的内容创建一个新的文件系统再导入为镜像[对应 export 命令]
docker export 容器ID或容器名 >> 文件名.tar
cat 文件名.tar | docker import -镜像用户/镜像名:镜像版本号




当在创建的容器内搭建好了一系列的环境后,怎么发布出去给别人用呢?这时就需要 docker commit 命令。
比如新创建的环境是没有 vim 编辑器的,当我们在自己的容器中装好 vim,就可以发布成新的镜像。

然后我们执行 apt-get update apt-get install vim 安装 vim。注意:刚刚运行的容器需要先运行 apt-get update
如此一来我们的容器里面就有了一个 vim 编辑器,现在把其发布成一个镜像。
docker commit -m="提交的描述信息" -a="作者" 容器名或容器ID 要创建的镜像名:[标签]


把自己制作的镜像发布到阿里云容器服务器或者Docker官网(首先要在容器服务器网站创建命名空间和仓库)。
docker login --username=XXXXXX registry.cn-shenzhen.aliyuncs.com
docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/incipe/test:[镜像版本号]
docker push registry.cn-shenzhen.aliyuncs.com/incipe/test:[镜像版本号]
数据卷是一个可供一个或者多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:
注意:数据卷的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会复制到数据卷中(仅数据卷为空时会复制)
简而言之,就是把容器内的重要数据备份长期保存到本地主机目录。
docker run -it --privileged=true -v /主机绝对路径目录:/容器内目录:[ro(read only, default is read write)] 镜像名

然后在 docker 指定的目录下生成的文件就会被实时的同步到主机相应的目录了。
执行 docker inspect 容器名或容器ID 即可查看挂载的位置。

注意:可以指定多个数据卷~
数据同步规则如下:
docker run -it --privileged=true --volumes-from 父类 --name=容器名字 镜像

只要某个容器继承了数据卷,那么就会共享数据卷,即无论哪一方修改共享目录,都会同步,即使 docker stop。
前文提到了,我们可以通过 docker commit 定制每一层所添加的配置,文件,但是每次我们添加一层时,都需要 commit 命令,会显的很麻烦,这时就需要 Dockerfile ,把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。
更多的参考 Dockerfile reference