docker 命令
镜像
下载镜像:
docker pull hello-world:lastest查看镜像:
docker images删除镜像:
docker rmi hello-world容器
镜像下载后会保存在本地,创建并启动这个镜像的容器:
docker run hello-world选项
--name 指定容器名称
--rm 容器停止后自动删除容器
--network 指定容器网络
--ip 指定容器 IP
-it 交互式终端
-p 端口映射
限制物理资源
-m 内存限制
-c CPU 限制
-cpus CPU 资源数
--cpuset-cpus 指定 CPU 核心数量
--memory-swap 限制内存和 swap 交换空间的总大小
--device-write-bps 限制设备写入速度
创建并不马上运行:
docker create hello-world开启处于停止状态的容器:
docker start <容器名称/容器ID>重启容器:
docker restart <容器名称/容器ID>删除非运行状态下的容器:
docker rm <容器名称/容器ID>使用 ps 子命令来查看当前的容器列表:
docker ps选项
-a 表示显示所有的容器,包括未运行的容器
查看容器详情:
docker inspect <容器名称/容器ID>容器构建为镜像
将容器保存为新的镜像
docker commit <容器名称/ID> <镜像名称>查看镜像构建历史:
docker history <镜像名称>使用 Dockerfile 构建镜像:
FROM <基础镜像>
RUN apt update
RUN apt install -y <软件包>docker 会在构建目录中寻找 Dockerfilr 文件,只需构建一次:
docker build -t <镜像名称> <构建目录>推送到远程仓库
missing。。。
网络
Docker 安装后会创建三个网络,查看命令:
docker network ls会得到如下结果
| NETWORK ID | NAME | DRIVER | SCOPE |
|---|---|---|---|
| 29a9bf86732e | bridge | bridge | local |
| 80c234865c20 | host | host | loca |
| fce90b99194f | none | null | loca |
可以在创建容器的时候使用--network参数来指定网络。
docker run --network none hello-world默认网络
none 网络只有一个本地换回网络,无法连接到互联网。
bridge 网络是默认的网络,使用此网络的容器可以相互通信,也可以连接到互联网。在宿主主机上查看网络信息,会发现一个名为 docker0 的网络设备:
han@MyDesktop:~$ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255
ether 02:42:ff:0d:ec:29 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0docker 创建虚拟网络,就像容器单独插了一根虚拟网线,连接到宿主主机,docker0 设备实际上作为一个桥接的角色,一头是自己的虚拟子网,另一头是宿主主机的网络。
host 网络共享宿主主机的网络,网络配置也完全一样
自定义网络
Docker 默认提供三种网络驱动:bridge overlay macvlan ,在创建网络时可以使用--driver选项来指定。 创建网络:
docker network create <网络名称> --driver bridge连接网络:
docker network connect <网络名称> <容器名称/容器ID>提示
进入 docker 容器的终端中输入 Ctrl+P+Q 可以退出容器,但是容器不会停止。
返回容器终端:
docker attach <容器名称/容器ID>容器间通信
借助 Docker 提供的 DNS 服务器,在容器启动时给个名字,可以直接访问这个名称,最后会被解析成对应容器的 IP 地址,只会在用户自定义的网络下生效。
#test为自定义网络 ubuntu-net为镜像名
docker run -it --name=test01 --network=test ubuntu-net
docker run -it --name=test02 --network=test ubuntu-net两个容器同时共享一个网络,共同使用同一个 IP 地址,在创建时指定:
docker run -it --name=test01 --network=container:test01 ubuntu-net容器与外部通信
端口映射配置,规则为宿主端口:容器端口:
docker run -d -p 80:80 nginx存储
新的参数-v用于指定文件挂载:
docker run -it -v ~/test:/root/test ubuntu-vim例如:
docker run -it -v ~/test:/usr/share/nginx/html/ -p 80:80 nginx将 test 文件夹挂载到容器中 nginx 的默认代理目录
若不指定宿主主机上的目录进行挂载,docker 会自动创建目录进行挂载:
docker run -it -v /root/abc ubuntu-vim使用 cp 命令传递文件:
docker cp <容器名称/容器ID>:/root/test.txt <文件名>使用选项--columes-from指定使用此容器的目录:
docker run -it --volumes-from <容器名称/容器ID> ubuntu-vim创建数据卷:
docker volume create <数据卷名称>更多命令
查看输入的日志信息,选项-f持续打印日志信息:
docker logs -f <容器名称/容器ID>在容器中启动一个新的终端或执行命令:
docker exec -it <容器名称/容器ID> <命令>强制终止容器:
docker kill <容器名称/容器ID>暂停容器:
docker pause <容器名称/容器ID>
docker unpause <容器名称/容器ID>容器监控:
docker stats