Docker常用命令总结
0x00 前言
系统性地看完了《深入浅出Docker》这本干货,通俗易懂写得挺不错的。我现在对Docker的整个工作原理都有了一定的了解,并总结出了一些常用的命令,做下笔记备用。
0x01 容器
运行容器
docker run -d --restart=always --name nextcloud -p 80:80 -v /home/docker/nextcloud/:/var/www/html/ --link mysql nextcloud:latest
参数解释:
-d 后台运行容器返回容器id
--restart=always 自动启动相关容器
--name 运行容器的名称
-p 指定端口映射,格式为:主机(宿主)端口:容器端口
-v -v 挂载目录,将容器中的目录映射到宿主机中。格式为:宿主机目录:容器中的目录
--link 添加链接到另一个容器
停止容器
docker stop <container_id or container_name>
重启容器
docker restart <container_id or container_name>
删除容器
docker rm <container_id or container_name>
查看详细信息
docker inspect <container_id or container_name>
0x02 卷
#创建卷
docker volume create myvolume
#查看所有卷
docker volume ls
#查看单个卷的详细信息
docker volume inspect myvolume
#删除卷
docker volume rm myvolume
#在启动容器时挂载卷,将myvolume卷挂载到容器中的/data目录
docker run -v myvolume:/data myimage
#转移卷,将myvolume卷中的数据从 /from 转移到 /to
docker run --rm -v myvolume:/from -v myvolume:/to busybox sh -c "cd /from ; cp -a . /to"
0x03 镜像
#拉取仓库中全部镜像
docker image pull -a nigelpoulton/tu-demo
#显示本地所有镜像
docker image ls
#查看悬虚(dangling)镜像
docker image ls --filter dangling=true
#清除悬虚(dangling)镜像
docker image prune
#筛选标签为latest镜像
docker image ls --filter reference="*:latest"
#删除镜像
docker rmi <image_name or image_id>
#查看镜像详细信息
docker inspect <image_name or image_id>
#通过Dockerfile构建镜像
docker build -t <repo>/<image>:<tag> <path/to/dockerfile/directory>
0x04 仓库
#搜索镜像仓库
docker search alpine
#搜索镜像仓库(只显示官方镜像)
docker search alpine --filter "is-official=true"
#登录docker hub
docker login
#登录阿里私有仓库
docker login registry.cn-hangzhou.aliyuncs.com
#将镜像推送到私有仓库Registry(这里的hellohttp就是仓库名)
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/myluzh/hellohttp:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/myluzh/hellohttp:[镜像版本号]
#下拉私有仓库镜像
docker pull registry.cn-hangzhou.aliyuncs.com/myluzh/hellohttp:v1
0x05 网络
#创建一个桥接网络,名为localnet
docker network create -d bridge localnet
#删除Docker主机上指定网络
docker network rm
#删除Docker主机上全部未使用的网络
docker network prune
#查看网络详细信息
docker network inspect localnet
#创建名为c2容器,并且加入localnet这个网络
docker container run -it --name c2 --network localnet alpine sh
#接入现有网络(macvlan)创建macvlan100网络以及eth0.100子接口
docker network create -d macvlan --subnet=10.0.0.0/24 --ip-range=10.0.00/25 --gateway=10.0.0.1 -o parent=eth0.100 macvlan100
#加入到macvlan100网络
docker container run -d --name mactainer1 --network macvlan100 alpine sleep 1d
0x06 覆盖网络
#swarm集群node1管理节点(172.31.1.5),创建overlay覆盖网络uber-net
docker network create -d overlay uber-net
#swarm集群node2工作节点(192.168.1.25),新建一个服务并连接到覆盖网络uber-net,docker服务会包含两个副本(容器),一个在node1节点上,一个在node2节点上。这样会将node2节点接入uber-net网络
docker service create --name test --network uber-net --replicas 2 ubuntu sleep infinity
#查看被分配给覆盖网络的subnet
docker network inspect uber-net
#获取到容器396c8b142a85的IP地址
docker container inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 396c8b142a85