一,如何启动和停止引擎服务
1.启动docker
systemctl start docker
2.重启docker
systemctl restart docker
3.停止docker
systemctl stop docker
4.查看docker状态
systemctl status docker
二,docker服务安装查看
5.查看docker版本号
docker -v
6.查看docker详细信息
docker version
三,docker命令
7.查看镜像
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 eef0fab001e8 3 weeks ago 495MB
hello-world latest feb5d9fea6a5 14 months ago 13.3kB
centos 7 eeb6ee3f44bd 14 months ago 204MB
REPOSITORY :镜像在仓库中的名称,本文中以后都简称镜像名称
TAG :镜像标签
IMAGE ID :镜像
ID CREATED :镜像的创建日期(不是获取该镜像的日期)
SIZE :镜像大小
注:这些镜像都是存储在 Docker 宿主机的 /var/lib/docker 目录下
8.搜索镜像
docker search [镜像名称]
NAME :镜像名称
DESCRIPTION :镜像描述
STARS :用户评价,反应一个镜像的受欢迎程度
OFFICIAL :是否为官方构建
AUTOMATED :自动构建,表示该镜像由
Docker Hub 自动构建流程创建的。
9.拉取镜像
docker pull [镜像名称]
拉取镜像就是从中央仓库下载镜像到本地。
通过查看 tag 信息,如果我们要下载 centos8的镜像。
[root@localhost ~]# docker pull centos:8
10.删除镜像
删除单个镜像
docker rmi 镜像id
删除多个镜像
docker rmi 镜像id1 镜像id2 镜像id3
docker images -q 可以查询到所有镜像的 ID,通过组合命令可以实现删除所有镜像的操作。
docker rmi `docker images -q`
四,容器相关命令
1.查看容器
docker ps --- 查看运行的容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
CONTAINER ID :容器 ID
IMAGE :所属镜像
COMMAND :
CREATED :创建时间
STATUS :容器状态
PORTS :端口
NAMES :容器名称
2.查看停止的容器
docker ps -f status=exited
3.查看所有容器
docker ps -a
4.查看容器id
docker ps -q
5.查看最后一次运行的容器
docker ps -l
五,创建并启动容器
格式: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
选项:
-i :表示运行容器;
-t :表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪 终端;
--name :为创建的容器命名;
-v :表示目录映射关系(前者是宿主机目录,后者是映射到容器上的目录),可以使用多个 -v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上;
-d :在 run 后面加上 -d 参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登 录容器,如果只加 -i -t 两个参数,创建容器后就会自动进容器里);
-p :表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个 -p 做多个端口 映射。
-P :随机使用宿主机的可用端口与容器内暴露的端口映射。
1.创建并进入容器
格式:docker run -it --name BB AA:镜像版本号 /bin/bash -- 通过镜像AA创建容器BB,运行容器并进入容器的/bin/bash
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 eef0fab001e8 3 weeks ago 495MB
centos 7 eeb6ee3f44bd 14 months ago 204MB
centos 8 5d0da3dc9764 14 months ago 231MB
[root@localhost ~]# docker run -it --name centos7 centos:7 /bin/bash
2.守护式的方式创建容器
格式:docker run -id --name BB AA:镜像版本号
[root@localhost ~]# docker run -id --name centos7-3 eeb6ee3f44bd /bin/bash
f2e90a5827ee64ad150ab95d3fe74a91dc3d355424243ae4e33a72f898353c69
3.登录守护式容器方式
格式:docker exec -it 容器名称|容器ID /bin/bash
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2e90a5827ee eeb6ee3f44bd "/bin/bash" About a minute ago Up About a minute centos7-3
[root@localhost ~]# docker exec -it centos7-3 /bin/bash
[root@f2e90a5827ee /]#
六,停止和启动容器
1.启动容器
docker start 容器名称|容器id
2.停止容器
docker stop 容器名称|容器id
3.重启容器
docker restart 容器名称|容器id
4.停止容器
docker kill 容器名称|容器id
七,删除容器
1.删除指定容器
docker rm 容器名称|容器id
2.删除多个容器
docker rm 容器名称|容器id 容器名称|容器id
八,拷贝文件
格式:docker cp 需要拷贝的文件或者目录 容器名称:容器目录
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2e90a5827ee eeb6ee3f44bd "/bin/bash" 5 minutes ago Up 5 minutes centos7-3
[root@localhost ~]# docker cp /root/1.sql centos7-3:/root
[root@localhost ~]# docker exec -it centos7-3 /bin/bash
[root@f2e90a5827ee /]# ls /root/
1.sql anaconda-ks.cfg
将文件从容器中拷贝出来
格式:docker cp 容器名称:容器目录 需要拷贝的文件
[root@f2e90a5827ee /]# touch /root/test.txt
[root@f2e90a5827ee /]# exit
exit
[root@localhost ~]# docker cp centos7-3:/root/test.txt /tmp/
[root@localhost ~]# ls /tmp/
test.txt
九,目录挂载
格式:docker run -it -v 宿主机目录:容器目录 --name 容器名称 镜像名称
[root@localhost ~]# docker run -it -v /root/:/root/ --name centos7-4 centos:7
#多目录挂载
格式:docker run -di -v /宿主机目录:/容器目录 -v 宿主机目录2:/容器目录2 镜像名称
1.匿名挂载
匿名挂载只需要写容器目录即可,容器外对应的目录会在 /var/lib/docker/volumes 中生成。
#匿名挂载
[root@localhost ~]# docker run -di -v /root/ --name centos7-5 centos:7
98b42386e4181ba46a85173740e97c47111e755c19f6716dcd72561e5d24cd3d
#查看volume 数据卷信息
[root@localhost ~]# docker volume ls
2.具名挂载
具名挂载就是给数据卷起了个名字,容器外对应的目录会在 /var/lib/docker/volume 中生成。
# 具名挂载
[root@localhost ~]# docker run -di -v centos7-6-root:/root/ --name centos-6 centos:7
47411c26febf3237a56312e68046fb66e411d17bd9a42d8b90c85fe18b3577c2
#查看volume 数据卷信息
[root@localhost ~]# docker volume ls
3.指定目录挂载
格式:docker run -di -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名
4.查看目录挂载关系
通过 docker volume inspect 数据卷名称 可以查看该数据卷对应宿主机的目录地址
[root@localhost ~]# docker volume inspect centos7-6-root
[
{
"CreatedAt": "2022-11-30T06:55:40Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/centos7-6-root/_data",
"Name": "centos7-6-root",
"Options": null,
"Scope": "local"
}
]
通过 docker inspect 容器ID或名称 ,在返回的 JSON 节点中找到 Mounts ,可以查看详细的数据 挂载信息。
5.只读/读写挂载
# 只读。只能通过修改宿主机内容实现对容器的数据管理。
格式:docker run -it -v /宿主机目录:/容器目录:ro 镜像名
[root@localhost ~]# docker run -it -v /root/:/root:ro centos:7
# 读写,默认。宿主机和容器可以双向操作数据。
格式:docker run -it -v /宿主机目录:/容器目录:rw 镜像名
6.volumes-from(继承)
# 容器 centos7-01 指定目录挂载
docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7
# 容器 centos7-04 和 centos7-05 相当于继承 centos7-01 容器的挂载目录
docker run -di --volumes-from centos7-01:ro --name centos7-04 centos:7
docker run -di --volumes-from centos7-01:rw --name centos7-05 centos:7
十,查看容器的Ip地址
格式:docker inspect 容器名称|容器id
十一,举例
到镜像地址里面拉取镜像nginx1.19,docker images 查看到拉取的镜像后,运行容器 docker run -d -p 8080:80 nginx:1.19 在后台运行,不占用控制台 nginx的默认端口是80,前者是宿主机的端口,后者是容器映射镜像端口,镜像名称:版本号. 然后查看所有的容器 docker ps 然后输入ifconfig 查看本地ip地址,就能使用浏览器访问Nginx
docker存储卷管理
目的:因为容器里面的镜像删除或者重启后,就不复存在了,为了保证删除重启运行后里面的内容不变,所以出现了存储卷。存储卷分两种volume | hostPath
volume
1.查看容器中所有的卷
docker volume ls
2.创建一个html的卷
docker volume create html
3.查看创建出来的卷的详细信息
docker volume inspect html
4.运行一个名为myweb1的容器
docker run --name myweb1 -d -v html:/usr/share/nginx/html -p 8080:80 nginx:1.19
5.查看网络链接
curl localhost:8080 查看html卷里面的东西,确保是否成功启动
6.
运行docker volume inspect html后有个参数Mountpoint 是物理路径,进入到物理路径下以后,cd进去,下边有个index.html文件
7.更改Index.html文件里面的内容
echo "hello world!" > index.html
8. 运行命令
curl localhost:8080 -- hello world!
9.运行停止和删除容器的命令
docker stop myweb1 && docker rm myweb1
10.然后再次运行容器
docker run --name myweb1 -d -v html:/usr/share/nginx/html -p 8080:80 nginx:1.19
11.执行查询链接
curl localhost:8080 -- hello world!
注:后几步的意思是把内容放到卷里面,即时删除重启容器,只要再次创建运行同一个容器,里面的内容还会存在。
hostpath
和volume 差不多,先运行容器
docker run --name myweb2 -d -v /host/html:/usr/share/nginx/html -p 8081:80 nginx:1.19
需要先在/host/html下边创建一个Index.html文件
echo "Hello World !" -> index.html
然后进行连接curl localhost:8081 -- Hello World !
然后执行删除和停止容器,再次创建后,也不影响文件内容。
volume 只需要记住名字即可,具体存储到哪个地方是docker容器进行管理的,在初始化容器的时候,volume下边没有数据,可以把容器中的数据映射到卷里面。hostpath完全以主机为主,主机里面为空,则hostpath里面也是空的。