1.常用命令
1.1 帮助启动类命令
状态 | 命令 |
---|---|
启动docker | systemctl start docker |
停止docker | systemctl stop docker |
重启docker | systemctl restart docker |
查看docker状态 | systemctl status docker |
开机启动 | system enable docker |
查看docker概要信息 | docker info |
查看docker总体帮助文档 | docker --help |
查看docker命令帮助文档 | docker 具体命令 --help |
1.2 镜像命令
1. docker image
列出本地所有的镜像(包含历史镜像层)
只显示镜像ID
其中
REPOSITORY:显示镜像的仓库源
TAG:镜像的标签版本号
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
2. docker search + 镜像名称
搜索摸个镜像名称
还可以通过 “–limit 个数” 命令限制搜索个数进行操作
3. docker pull 某个镜像名字
有两种写法:
1.docker pull 镜像名字 [:TAG]
2.docker pull 镜像名字
两种方法的区别就是如果写了TAG就下载对应的版本号,如果没有写TAG就下载最新的版本
4. docker system df 查看镜像/容器/数据卷所占的空间
5. docker rmi 某个镜像名字ID
删除镜像
后面可以写镜像名称(因为镜像名称并不会重复)
也可以加ImageID号
如果删除的时候遇到无法删除的情况
可以使用 -f 命令(focus)强制删除
- 删除单个镜像
docker rmi -f 镜像ID - 删除多个
docker rmi -f 镜像名1:TAG 镜像名2:TAG - 删除全部
docker rmi -f $(docker images -qa)
面试题
什么是docker的虚悬镜像?
虚悬镜像:仓库名、标签都是 < none > 的镜像,俗称虚悬镜像dangling image
1.3 容器命令
命令 | 状态 |
---|---|
docker run [OPTIONS] IMAGE [COMMAND] [ARG…] | 新建+启动容器 |
docker ps | 列出当前所有正在运行的容器 |
docker restart 容器ID或者容器名 | 启动已停止运行的容器 |
docker stop容器ID或者容器名 | 停止容器 |
docker kill容器ID或者容器名 | 强制停止容器 |
docker rm 容器ID | 删除已停止的容器 |
1.3.1 新建+启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
OPTIONS的说明
其中 --name=“容器新名字” 为容器指定一个名称;
-d: 后台运行容器并返回容器ID,也叫启动守护式容器(后台运行);
启动交互式容器:
-i: 以交互模式运行容器,通常与-t同时使用;
-t: 为容器重新分配一个为输入终端,通常与-i同时使用
-P:随机端口映射,大写P
-p:指定端口映射,小写p
综上所述:使用命令以交互模式启动一个容器,并在容器中执行/bin/bash命令,可以看到已进入Ubuntu的系统。
其中 -i 表示交互式操作,-t 表示终端,ubuntu表示Ubuntu的image镜像,/bin/bash 放在镜像名字的后面表示的是命令,因为这里我们希望有一个交互式的Shell,因此使用的是/bin/bash,要退出终端 ,直接输入exit
1.3.2 罗列出所有运行的容器实例
docker ps
容器退出后如果遇到使用docker ps命令无法查到相关容器的时候,不用担心,这里因为容器退出后处于终止(exited)状态,此时可以通过docker ps -a来查看,其中的数据也不会丢失,还可以重新启动使用,只有删除容器的时候才会删除数据。
同时可以看到由于在创建集装箱的时候并没有进行命名,所以使用docker ps命令出现的NAMES命令下的名字都是系统随机分配的,如果创建的时候命名,就会现在设定的名字,如下所示:
1.3.3 退出容器的两种方式
命令 | 效果 |
---|---|
exit | run进去容器,exit退出,容器停止 |
ctrl+p+q | run进去容器,ctrl+p+q退出,容器不停止(使用docker ps可以查看得到) |
1.3.4 启动已经停止运行的容器
1.4 启动守护式容器(后台服务器)
大部分的场景下,我们希望docker的服务是在后台运行的,我们可以通过-d指定容器的后台运行模式。
// 守护式容器启动方法
docker run -d 容器名
但是使用上述命令进行启动时,使用ps命令查不到正在运行的容器,这是因为Docker容器后台运行,就必须有一个前台进程,容器的命令如果不是那种一直挂起的命令(例如top,tail等),容器会发现无事可做,直接退出,这也是docker机制的问题。最佳的解决方法就是将需要运行的程序以前台进程的形式运行,常见的就是命令行模式
例如启动Redis就需要在后台守护式启动,前台启动就会出现不小心关闭的情况,在后台启动就会避免这种情况
1.4.1 查看容器日志
1.4.2 查看容器内运行的进程
1.4.3 查看容器内部细节
docker inspect 容器ID
1.4.4 进入正在运行的容器并以命令行交互
docker exec -it 容器ID /bin/bash
还有一种方法可以进入正在运行的容器
docker attach 容器ID
**两种进入方式的区别: **
attach直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器的停止。
exec是在容器中打开新的终端,并可以启动新的进程,用exit退出,不会导致容器的停止。
1.4.5 从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
1.4.6 导入和导出容器
导出:
docker export 容器ID > 文件名.tar
导入:
cat abd.tar | docker import - cy/ubuntu:3.7
2. commit命令
docker提交容器副本使之成为一个新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID要创建的目标镜像名:[标签名]
使用容器镜像安装的Ubuntu是只保留了最小运行环境的Linux内核,所以只能运行基础命令,有很多命令运行不了(例如下图中ls命令可以正常运行 而vim命令咋不能正常运行),此时就需要单独安装。
在下载安装vim之前需要先试用apt-get update命令进行更新
apt-get update
然后使用apt-get -y install vim下载需要的命令
apt-get -y install vim
可以观察到已经可以使用vim命令了
然后需要将修改过的容器提交,形成一个容器副本使之成为一个新的镜像
docker commit -m="vim commit add ok" -a="cy" 98f2d8dc3d6d cy/myubuntu:1.3
使用镜像分层最大的一个好处就是共享资源,为了方便复制迁移,实现复用。
比如说多个镜像都是次用相同的base奖项构建而来,那么Docker Host只需要在磁盘上保存一份base镜像;同时内存中也只需要加载一份base镜像,就可以为所有的容器服务了,而且镜像的每一层都可以被共享。
3. 将本地镜像推送到阿里云
此处的信息可以再阿里云网站中找到参考代码
4. docker私有库
4.1 下载镜像Docker Registry
docker pull registry
4.2 运行私有库Registry
相当于在本地有一个私有Docker Hub
docker run -d -p 5000:50 -v /myregistry/:/temp/registry --privileged=true registry
/*
-d 后台运行并返回容器ID,就是启动守护式容器
-p(小写) 指定端口映射
-p hostPort:containerPort
-v 部分的内容属于数据卷映射 后续章节会涉及
*/
4.3 curl验证私服库上有什么镜像
在启动私有库Registry并开启端口映射后,可以使用curl验证私服库上有什么镜像
curl -XGET http://192.168.204.130:5000/v2/_catalog
# 这里的5000之后的参数会在后续内容中讲到
4.4 将新镜像修改符合私服规范的Tag
docker tag cy/myubuntu:1.4 192.168.204.130:5000/myubuntu:1.4
4.5 修改配置文件使之支持http
使用vim命令修改
vim /etc/docker/daemon.json
docker默认不允许http方式推送镜像,通过配置选项来取消这个限制。====> 修改完后如果不生效,建议重启docker
docker run -d -p 3306:3306 --privileged=true -v /mysql/log:/var/log/mysql -v /mysql/data:/var/lib/mysql -v /mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123 --name mysql1 mysql:5.7