typora-copy-images-to: ./
1.镜像相关命令
官方文档:
https://docs.docker.dom/reference/
1.1查看镜像
docker images
1.2搜索镜像
docker search redis
1.3拉取镜像
docker pull redis:5
docker pull 镜像名称:标签 如果不加名称,则默认标签为latest
1.4删除镜像
docker rmi redis:5
2.容器相关命令
2.1查看容器
docker ps :查看运行的容器
docker ps -a :查看所有的容器,包括运行、停止状态等。
docker ps -l: 查看最后运行的容器
docker ps -f status=exited :过滤命令,查看已经停止的容器
docker ps -n 5 :最后5个运行的容器
docker ps --help:帮助命令
2.2创建与启动容器
docker run 命令用于启动容器。
在启动容器的时候,可以选择直接接入容器或者后台启动容器。
docker run [options] IMAGE [COMMAND] [arg...]
- -i :表示运行容器
- -t:表示容器启动后会进入其命令行,加入这两个参数后,容器创建就能登录进去,即分配一个伪终端。
- --name:为创建的容器命名
- -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射
- -d:在run后面加-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建容器后就会自动进入容器内部)
- -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口,可以使用多个-p做多个端口映射。
- -P:随机使用宿主机上的端口和容器内暴露的端口进行映射。
2.2.1创建并进入容器
下面这行命令的意思就是通过镜像AA创建一个容器BB,运行容器并进入容器的/bin/bash.
docker run -it --name 容器名称 镜像名称:标签 /bin/bash
例如:
docker run -it --name mynginx nginx:5 /bin/bash
下面的命令也可以:
docker run -it --name mynginx -p 80:80 nginx
docker run --name mynginx -p 80:80 nginx
注意:Docker容器运行必须有一个前台进程,如果没有前台进程的执行,容器认为是空闲状态,就会自动退出。
2.2.2守护方式创建容器
docker run -di --name mynginx -p 80:80 nginx
以守护进程创建的容器进入方式:
docker exec -it mynginx(容器名称或id) /bin/bash
docker exec -it mynginx /bin/bash
nginx配置文件:
vi /etc/nginx/conf.d/default.conf
2.3停止与启动容器
#停止容器
docker stop 容器名称或容器id
#启动容器
docker start 容器名称或容器id
2.4文件拷贝
如果我们需要将文件拷贝到容器内可以使用cp命令:
docker cp 需要拷贝的文件或目录 容器名称:容器目录
也可以将文件从容器内拷贝出来:
docker cp 容器名称:容器目录 需要拷贝的文件或目录
从宿主机拷贝到容器:
[root@centos node1 ~]# docker cp test.txt mynginx:/etc
从容器拷贝到宿主机
[root@centos node1 ~]# docker cp mynginx:/etc/abc.txt /root/
2.5目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响我们的容器,而且这个操作时双向绑定的,也就是说容器内的操作也会影响到宿主机,实现备份功能。
但是容器被删除的时候宿主机的内容并不会被删除,如果多个容器挂载同一个目录,其中一个容器被删除,其他容器的内容也不会受到影响。
容器与宿主机之间的数据卷属于引用关系,数据卷从外界挂载到容器内部中的。所以可以说脱离容器的生命周期而独立存在,正式由于数据卷的生命周期并不等同于容器的生命周期,在容器退出或者删除以后,数据卷仍然不会受到影响,数据卷的生命周期会一致持续到没有容器使用它为止。
创建容器添加-v参数,格式为宿主机目录:容器目录,例如:
docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos-01 centos
#多目录挂载
docker run -di -v /宿主机目录:/容器目录 -v /宿主机目录2::/容器目录2 镜像名称
目录挂载操作可能会出现权限不足的提示,这是因为centos7中安全模块SELinux把权限禁掉了,在docker run 是通过 给该容器加权限来解决挂载的目录没有权限的问题
2.5.1匿名挂载
匿名挂载只需要写容器目录即可,容器外对应的目录会在/var/lib/docker/volumes中生成。
#匿名挂载
docker run -di -v /usr/local/data --name centos-02 centos
#查看volume数据卷信息
docker volume ls
2.5.2具名挂载
具名挂载就是给数据卷起了一个名字,容器外对应的目录会在/var/lib/docker/volumes中生成。
#具名挂载
docker run -di -v docker_centos_data:/usr/local/data --name centos03 centos
#查看volume数据卷信息
docker volume ls
2.5.3指定目录挂载
指定目录挂载,这种方式的挂载不会在 /var/lib/docker/volumes 目录生成内容。
docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos_03 centos
#多目录挂载
docker run -di -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2
2.5.4查看目录挂载关系
通过 docker volume inspect 数据卷名称可以查看该数据卷对应宿主机的目录地址。
docker volume inspect docker_centos_data
[root@centos node1 ~]# docker volume inspect docker_nginx_data [ { "CreatedAt": "2021-01-31T11:11:55+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/docker_nginx_data/_data", "Name": "docker_nginx_data", "Options": null, "Scope": "local" } ]
通过docker inspect 容器名称或id ,在返回json节点中找到 Mounts,可以查看详细的数据挂载信息。
2.5.5只读/只写
#只读,只能通过修改宿主机内容实现对容器数据的管理
docker run -it -v /宿主机目录:/容器目录:ro 镜像名
#读写,默认。宿主机和容器可以双向操作数据
docker run -it -v /宿主机目录:/容器目录:rw 镜像名
2.5.6 volumes-from(继承)
#容器centos7-01指定目录挂载
docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7
#容器centos7-04和centos-05相当于集成centos07-01容器的挂载目录
docker run -di --volumes-from centos7-01 --name centos7-04 centos:7
docker run -di --volumes-from centos7-01 --name centos7-05 centos:7
也可以指定只读模式,默认rw模式:
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
2.6查看容器IP地址
可以通过下面的命令查看容器的元信息:
docker inspect 容器名称或容器id
也可以执行下面的命令直接输出ip地址:
docker inspect --format={{.NetworkSettings.IPAddress}} 容器名称|容器ID
2.7删除容器
docker rm 容器名称(或者容器id)
删除容器的时候容器必须是停止状态。
技术无价、互相交流、共同进步