三.docker进阶命令
三、docker进阶命令
3.1 docker run
docker run :创建一个新的容器并运行。
选项:
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p:指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
--name="nginx-lb":为容器指定一个名称;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--volume , -v: 绑定一个卷。一般格式 主机文件或文件夹:虚拟机文件或文件夹。
-v 在存储详写,--net:在网络时候详写。
使用docker镜像nginx以后台运行模式启动一个容器,并且重命名为nginx01
docker run -d --name nginx01 nginx
使用docker镜像nginx以后台运行模式启动一个容器,并且重命名为nginx01 并且进入到容器
docker run -d --name nginx01 nginx /bin/bash
使用镜像nginx以交互模式且后台启动一个容器.(常用)
docker run -dit --name nginx01 nginx
使用镜像nginx以交互模式且后台启动一个容器并映射端口.(常用)
docker run -dit --name nginx01 -p 80:80 nginx
-p选项:主机(宿主)端口:容器端口 。
docker run -dit --name nginx01 -P 80:80 nginx
-P 随机端口。
外部网络访问容器:外部网络访问容器指的是在IP可达之后,容器提供对外服务,外部通过IP网络访问该服务,如容器提供一个Nginx服务,外部通过IP访问到该服务。在对外服务中,需要将服务端口暴露隐射至主机端口,主要包含以下几个步骤:
1)容器中提供对外服务,对外暴露服务端口xxx,如8090
2)启动容器时将主机端口8091绑定到容器端口8090,docker run -p 8091:8090 [其他参数]
浅析如何为正在运行的容器添加端口映射 :https://www.cnblogs.com/goloving/p/15133961.html 最好选第三种,不会有什么错误。
3)docker-proxy进程会监听主机端口8091
4)当外部访问到主机的8091端口时,主机转发至容器8090端口
5)容器对外服务端口接收到流量后服务程序开始处理
使用镜像 nginx以交互和后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -dit --name nginx01 -p 80:80 -v /data:/data nginx
当利用docker run来创建容器时候,Docker在后台运行的标准操作包括:
(1)检查本地是否存在指定的镜像,不存在就从远程仓库下载。
(2)利用镜像创建并启动一个容器。
(3)分配一个文件系统,井在只读的镜像层外面挂载一层可读可写层
(4)从宿主机配置的网桥接口中桥接一个虚拟接口到容器中去
(5)从网桥的地址池配置一个IP地址给容器
(6)执行用户指定的应用程序
(7)执行完毕后容器被终止
常用选项说明
-d, --detach=false, 指定容器运行于前台还是后台,默认为false
-i, --interactive=false, 打开STDIN,用于控制台交互
-t, --tty=false, 分配tty设备,该可以支持终端登录,默认为false
-u, --user="", 指定容器的用户
-a, --attach=[], 登录容器(必须是以docker run -d启动的容器)
-w, --workdir="", 指定容器的工作目录
-c, --cpu-shares=0, 设置容器CPU权重,在CPU共享场景使用
-e, --env=[], 指定环境变量,容器中可以使用该环境变量
-m, --memory="", 指定容器的内存上限
-P, --publish-all=false, 指定容器暴露的端口
-p, --publish=[], 指定容器暴露的端口
-h, --hostname="", 指定容器的主机名
-v, --volume=[], 给容器挂载存储卷,挂载到容器的某个目录
--volumes-from=[], 给容器挂载其他容器上的卷,挂载到容器的某个目录
--cap-add=[], 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cap-drop=[], 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cidfile="", 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
--cpuset="", 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
--device=[], 添加主机设备给容器,相当于设备直通
--dns=[], 指定容器的dns服务器
--dns-search=[], 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
--entrypoint="", 覆盖image的入口点
--env-file=[], 指定环境变量文件,文件格式为每行一个环境变量
--expose=[], 指定容器暴露的端口,即修改镜像的暴露端口
--link=[], 指定容器间的关联,使用其他容器的IP、env等信息
--lxc-conf=[], 指定容器的配置文件,只有在指定--exec-driver=lxc时使用
--name="", 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
--net="bridge", 容器网络设置:
bridge 使用docker daemon指定的网桥
host //容器使用主机的网络
container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
none 容器使用自己的网络(类似--net=bridge),但是不进行配置
--privileged=false, 指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart="no", 指定容器停止后的重启策略:
--restart=always参数能够使我们在重启docker时,自动启动相关容器。
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启
--rm=false, 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
--sig-proxy=true, 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理
docker run -it 和docker -dit的区别:
docker run -it 会直接进如到容器里,但是退出的时候使用exit容器就会停止运行,使用ctrl+p+q不会。
使用docker run -dit 使用exec进入容器使用exit不会退出容器。
docker run 网络:
使用docker run 创建docker 容器时,可以用--net 或--network 选项指定容器的网络模式
host模式:使用--net=host 指定
none模式:使用--net=none 指定
container模式:使用--net=container:NAME__or_ID 指定
bridge模式:使用--net=bridge 指定,默认设置,可省略
3.2 docker inspect
docker inspect:获取容器/镜像的元数据。
查看centos镜像的所有元数据
docker inspect centos:7
查看运行中容器的所有元数据
docker inspect centos001/容器ID
获取正在运行的容器centos001的 IP
docker inspect -f='{{.NetworkSettings.Networks.bridge.IPAddress}}' centos001
一个容器可以连接到多个网络,而不是打印这些多个 IP 地址之一,您可以使用此命令打印所有这些 IP 地址:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos001
查看cnetos001目录挂载信息
docker inspect --format="{{json .Mounts}}" centos001
以下命令以这种格式打印绑定安装,“[source] -> [destination], 模式: [mode]”:
docker container inspect -f '{{range .Mounts}}{{printf "%s -> %s, mode: %sn" .Source .Destination .Mode}}{{end}}' centos001
3.3 docker commit
docker commit :从容器创建一个新的镜像。
选项:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停
将容器centos001保存为新的镜像,并添加提交人信息和说明信息。
docker commit -a "runoob.com" -m "my apache" centos001a404c6c174a2 centos7:v1 (保存的镜像名)
3.3 docker cp
docker cp :用于容器与主机之间的数据拷贝。
将docker.txt下的文件复制到centos001下的root下
docker cp C:\Users\72528\Desktop\文件\docker.txt centos001:/root
docker exec -it centos001 bash
PS C:\Users\72528\Desktop> docker exec -it centos001 bash
[root@b8493afa0cad /]# ls /root
anaconda-ks.cfg docker.txt
[root@b8493afa0cad /]#
将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /www/runoob 96f7f14e99ab:/www/
将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。
docker cp /www/runoob 96f7f14e99ab:/www
将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
docker cp 96f7f14e99ab:/www /tmp/
3.4 docker save | load
docker save: 将指定镜像保存成 tar 归档文件。
docker load :导入使用 docker save 命令导出的镜像。
将centos:7保存成 centos001.tar
导出镜像:
docker save -o centos7.bak.tar centos:7
导入镜像:
docker load -i my_centos.tar
3.5 docker export | import
docker export:将容器打包。
docker export的应用场景主要用来制作基础镜像,比如你从一个ubuntu镜像启动一个容器,然后安装一些软件和进行一些设置后,使用docker export保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。
docker export 容器别名/容器ID > centos.tar
docker import:将docker导出的镜像文件恢复成为一个镜像。注意:导入后是镜像。
docker import centos7.tar centos:8
镜像保存/载入:docker load/docker save;将一个镜像导出为文件,再使用docker load命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比docker export命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。
docker save和docker export的区别:
1、docker save 保存的是镜像(image),docker export 保存的是容器(container)。
2.docker load用来载入镜像包,docker import用来载入容器包,但是两者都会恢复为镜像。
3、docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
容器导入/导出:docker import/docker export;将一个容器导出为文件,再使用docker import命令将容器导入成为一个新的镜像,但是相比docker save命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。
本文作者:wtdata123
本文链接:https://www.cnblogs.com/wtdata123/p/16908651.html
版权声明:本作品采用WTdata知识共享署名-许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步