一、Docker 基础命令
1、启动 docker
systemctl start docker
2、关闭 docker
systemctl stop docker
3、重启 docker
systemctl restart docker
4、设置开机启动 docker
systemctl enable docker
5、查看 docker 运行状态
systemctl status docker
6、查看 docker 版本信息
docker version
7、查看 docker 系统、镜像、容器数等信息
docker info
8 docker 帮助命令
如果忘记了某些命令,可以输入如下命令:
docker --help
如果忘记特定命令用法,如拉取命令,则可以输入如下指令:
docker pull --help
二、Docker 镜像命令
1、查看服务器中 docker 镜像列表
docker images
或
docker image ls
2、查看镜像、容器、数据卷所占用的空间:
docker system df
3、搜索镜像
docker search [镜像名]
如可以输入这样的命令:docker search mysql
4、拉取镜像(从 Docker 镜像仓库拉取镜像)
不加 tag版本号,默认拉取 docker 仓库中该镜像的最新版本,相当于命令 docker pull [镜像名]:latest
docker pull [镜像名]
docker pull [镜像名]:tag
如 拉取最新版的 mysql:
docker pull mysql
加 tag,拉取指定版本。比如说拉取 mysql 指定版本:
docker pull mysql:5.7.30
5、运行镜像
docker run [镜像名]
docker run [镜像名]:tag
如运行Tomcat:
docker run tomcat
用 Ctrl+c 退出。
下面用实例解释:几个参数:
# -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。
# 这里打算进入 bash 执行一些命令并查看返回结果,因此需要交互式终端。
# --rm:这个参数的意思是,容器退出后随之将其删除。默认情况下,除了排障需求,退出的容器并不会立即删除,除非手动 docker rm。
# 这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
# bash:放在镜像名后的是命令,这里希望有个交互式 Shell,因此用的是 bash。
docker run -it --rm ubuntu:18.04 bash
6、删除镜像
当前镜像没有被任何容器使用才可以删除。
docker rmi -f 镜像名/镜像ID
删除多个镜像:多个镜像ID或镜像之间用空格隔开
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
删除全部镜像:-a 为显示全部,-q 为只显示ID
docker rmi -f $(docker images -aq)
删除所有仓库名为 MySQL 的镜像
docker image rm $(docker image ls -q MySQL)
用before删除所有在某版本之前的镜像,如删除6.2版本之前的MySQL镜像
docker image rm $(docker image ls -q -f before=MySQL:6.2)
强制删除镜像:
docker image rm 镜像名/镜像ID
7、保存镜像
将我们的镜像保存为 tar 压缩文件,方便镜像转移和保存,可以在任何一台安装了 docker 的服务器上加载这个镜像。
docker save 镜像名/镜像ID -o 镜像要保存的位置和名字
如:docker save tomcat -o /myTomcatimg.tar
8、加载镜像
任何装 docker 的地方加载镜像保存文件,使其恢复为一个镜像。
docker load -i 镜像保存文件位置
三、Docker 容器命令
1、查看正在运行的容器列表
docker ps
# 或
docker container ls
2、查看所有容器
所有正在运行的和停止运行的。
docker ps -a
3、运行容器
# -it:表示与容器进行交互式启动
# -d:表示可后台运行容器(守护式运行)
# --name:要给运行的容器起的名字
# /bin/bash:交互路径
docker run -it -d --name 要取的别名 镜像名:tag /bin/bash
如:要启动一个 MySQL ,把它的别名取为 Mysql001,并交互运行,命令如下(这里指定版本号为 6.4):
# 3.1、拉取 redis 镜像
docker pull mysql
# 3.2、命令启动
docker run -it -d --name mysql001 mysql:6.4 /bin/bash
# 3.3、查看已运行容器
docker ps
# 3.4、停止容器
docker stop 容器名/容器ID
如:停止前面运行的mysql 容器,命令:docker stop mysql001:
4、删除容器
可以添加 -f 参数,Docker 会发送 SIGKILL 信号给容器。
删除一个容器
docker rm -f 容器名/容器ID
删除多个容器:多个容器名/容器ID 用空格隔空
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
删除全部容器
docker rm -f $(docker ps -aq)
清除所有处于终止状态的容器
docker container prune
5、容器端口与服务器端口映射
-p 宿主机端口:容器端口
例如:使用mysql镜像,可以3306 端口映射到服务器的 3307端口,如果成功的话,那么访问服务器的 3307 端口,就会访问到 docker 中的容器 mysql。命令:
docker run -itd --name mysql001 -p 3307:3306 mysql:6.4 /bin/bash
-p 3307:3306 解析:将容器内部的 3306 端口与 docker 宿主机(docker 安装在哪台服务器,哪台服务器就是宿主机)3307 端口进行映射,那通过外部访问宿主机 3307 端口,即可访问到 docker 容器 3306 端口了。
6、进入容器
当 -i -t 参数一起使用时,可以熟悉的 Linux 命令提示符。
docker exec -it 容器名/容器ID /bin/bash
如进入前面的 mysql001 容器,就可以输入命令 docker exec -it mysql001 /bin/bash。
7、从容器退出到服务器
直接退出
exit
8、启动容器
docker start 容器名/容器ID
9、重启容器
docker restart 容器名/容器ID
10、杀死 kill 容器
docker kill 容器名/容器ID
11、容器文件拷贝
无论容器是否开启都可以进行拷贝。
docker cp 容器ID/名称:文件路径 要拷贝到外部的路径 | 要拷贝到外部的路径 容器ID/名称:文件路径
从容器内拷出
docker cp 容器ID/名称:容器内路径 容器外路径
从外部拷贝文件到容器内
docker cp 容器外路径 容器ID/名称:容器内路径
12、查看容器日志
docker logs -f --tail=要查看末尾多少行 默认all 容器ID
13、设置开机自动启动容器
启动容器时,使用 docker run 命令时,添加参数 --restart=always 便表示该容器随 docker 服务启动而自动启动。
docker run -itd --name mysql -p 3307:3306 --restart=always mysql:6.4 /bin/bash
14、挂载
数据挂载:简单来讲,就是将容器内的数据与外部宿主机文件绑定起来,类似一个双持久化,当容器删除时,宿主机文件数据目录仍在,下次启动容器只要将数据目录指向宿主机数据所在位置即可恢复。
-v 宿主机文件存储位置:容器内文件位置
-v 命令可以多次使用,即一个容器可以同时挂载多个文件。
-v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置
如:运行 docker mysql 容器 进行 端口映射 两个数据卷挂载 设置开机自启动
docker run -d -p 3307:3306 --name mysql001 --restart=always -v /var/lib/mysql/data/:/data -v /var/lib/mysql/conf/:/usr/local/etc/mysql/mysql.conf mysql:6.4 --requirepass "password"
15、更换容器名
docker rename 容器ID/容器名 新容器名
16、导出和导入
16.1导出容器,将导出容器快照到本地文件
如果要导出本地某个容器,使用 docker export 命令。
docker container ls -a
docker export ddfc038b5dc2 > ubuntu.tar
16.2导入容器快照
可以使用 docker import 从容器快照文件中再导入为镜像。
cat ubuntu.tar | docker import - test/ubuntu:v1.0
docker image ls
16.3通过指定 URL 或者某个目录来导入,例如
docker import http://example.com/exampleimage.tgz example/imagerepo
前面使用过 docker load 来导入镜像存储文件到本地镜像库,同样也可以使用 docker import 来导入一个容器快照到本地镜像库;但是两者有区别。
17、在容器和主机之间复制文件/文件夹
从容器里面拷文件到宿主机
docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
docker cp mysql:/opt/cdc.txt /home/
从宿主机拷文件到容器里面
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径;如果拷贝的内容有重复,会直接覆盖,不会询问。
docker cp /home/ccc.txt mysql:/opt/