1.概述
docker是什么?按我的理解类似一个轻量的虚拟机,将计算机资源虚拟化,这里的计算机资源,可以暂时理解成计算能力和数据存储。虚拟化的好处在于,打破资源不可分割的障碍,可以更好地配置。我们可以在docker里面打包网站、程序甚至是它们需要的系统环境,独立打包、互不干扰、方便快捷。
docker启动流程
docker命令概览
2.启动docker
systemctl start docker # 启动Docker systemctl enable docker # 设置开机自启动 systemctl stop docker # 关闭docker systemctl restart docker #重启docker docker version # 查看当前版本号,是否启动成功 docker info
帮助命令
docker --help #帮助命令 docker pull --help #拉去images的帮助命令
3.镜像命令
3.1查看本地主机镜像
docker images # 可选参数 -a/--all 列出所有镜像 -q/--quiet 只显示镜像的id
列表参数解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
3.2搜索镜像
docker search 镜像名 #可选参数 Search the Docker Hub for images Options: -f, --filter filter Filter output based on conditions provided --format string Pretty-print search using a Go template --limit int Max number of search results (default 25) --no-trunc Don\'t truncate output
3.3拉取镜像
关于tag
默认拉取tag为latest的镜像,即最新版本,当然也可以指定版本。
这里,涉及到docker镜像“层”和存储驱动的知识 。简而言之,一个镜像由许多层组成,如果两个镜像有“层”重复,则不需要重复拉取,节约空间。但是,如果镜像被不同的tag标记,即使它们完全相同(“层”也完全相同,共用一组“层”),docker还是会显示两个images,例如:
#拉取了java的镜像,tag为latest $ docker pull java Using default tag: latest latest: Pulling from library/java 5040bd298390: Pull complete fce5728aad85: Pull complete 76610ec20bf5: Pull complete 60170fec2151: Pull complete e98f73de8f0d: Pull complete 11f7af24ed9c: Pull complete 49e2d6393f32: Pull complete bb9cdec9c7f3: Pull complete Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d Status: Downloaded newer image for java:latest $ docker pull java:8-jdk 8-jdk: Pulling from library/java Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d Status: Downloaded newer image for java:8-jdk $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE java 8-jdk d23bdf5b1b1b 20 months ago 643MB java latest d23bdf5b1b1b 20 months ago 643MB
这里java版本8-jdk就是最新的,拉取8-jdk时不需要再拉取重复“层”,但是依然显示不同的images
3.4删除镜像
docker rmi -f 镜像名/镜像ID #删除一个 docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID #删除多个 docker rmi -f $(docker images -aq) #删除全部 docker images rm 镜像名称/镜像ID #强制删除镜像
4.容器命令
4.1查看容器
docker ps #查看正在运行的容器列表 docker ps -a #查看所有容器
4.2运行&停止容器
docker run [可选参数] image docker run -itd --name redis002 -p 8888:6379 redis:5.0.5 /bin/bash #容器端口与服务器端口映射 #参数说明 --name="名字" 指定容器名字 -d 后台方式运行 -it 使用交互方式运行,进入容器查看内容 -p 指定容器的端口 ( -p ip:主机端口:容器端口 配置主机端口映射到容器端口 -p 主机端口:容器端口 -p 容器端口) -P 随机指定端口(大写的P) -v /宿主机目录:/容器目录 挂载宿主机的一个目录。 这里把容器想成一个单独的系统,或者说电脑,而你的宿主机目录是一个U盘,挂载 后,你往宿主机该目录里放文件,那么通过容器里对应目录便可以访问到此文件,不需 要重新生成容器就可以在“容器外部”添加和修改某些文件
docker stop 容器名/容器ID #停止容器
示例:
#使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。 runoob@runoob:~$ docker run -it nginx:latest /bin/bash root@b8573233d675:/#
4.3删除容器
docker rm -f 容器名/容器ID #删除一个 docker rm -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID #删除多个--- docker rmi -f $(docker ps -aq) #删除全部
docker生命流程图
5.其他命令
#获取镜像的元信息: docker inspect 镜像名 #将容器导出为tar包: docker export aa93039fd7fa > aa91.tar docker export aa9 -o thinkphp6.tar #将tar包导入为镜像: docker import tp3-where.tar tp3-where:latest #使用start.sh方法启动镜像 docker run -d -p 81:80 vul_thinphp6:latest /start.sh
6.命令的比较
docker run和docker start
docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。
而docker start的作用是,重新启动已存在的镜像。也就是说,如果使用这个命令,我们必须事先知道这个容器的ID,或者这个容器的名字,我们可以使用docker ps找到这个容器的信息。
docker run和docker exec
docker exec -it 容器名/容器ID /bin/bash #进入容器
“docker run”通常是在新创建的容器中所使用的命令。 它适用适合没有容器运行的情况,您想要创建一个容器,并且要启动它,然后在其上运行一个进程。
“docker exec”适用于在现有容器中运行命令的情况。如果您已经拥有了一个正在运行的容器,并希望更改该容器或从中获取某些内容,那么使用“docker exec”命令就非常合适了。
docker kill和docker stop
相同点:两者都是停掉容器,并把容器状态指定到stopped。
不同点:
被kill杀死容器,进入stopped状态被重新start后,会开启新的进程号;
被stop停掉的容器,再次被重新start后,进程号不变,还是原来的。
kill命令比较生猛,不管容器死活,直接给系统发送SIGKILL的系统信号强行kill掉进程,就是要用kill -9干掉容器;
stop比较温柔,先给容器发送一个TERM信号,给容器充足时间(默认10秒)保存数据,让容器自动安全停止运行,超时后再给系统发送SIGKILL的系统信号强行kill掉进程,最后转变为stop状态。
使用docker stop -t [s, default 10],可调整超时时间(docker stop -t 20 mynginx)