一、镜像管理

1.查找镜像

docker search mysql

2.下载镜像

docker pull name:tag docker pull mysql:mysql

3.列出本地镜像

docker images

4.删除镜像

docker rmi imager docker rmi -f imager #强制删除

5.查看镜像

docker inspect imager

6.构建镜像

docker run -i -t centos /bin/bash #进入基础镜像进行编辑 #docker run:启动容器。-i:交互方式。-t:分配一个虚拟终端。 docker commit c539f5dfe0ce demo/webserver #编辑完成,保存为新的镜像

7.标签管理

docker tag http local/httpd #修改名称。 docker tag http local/httpd:v2.1 #修改标签

二、容器管理

1.创建容器

①:使用docker create 创建容器。

还可以添加选项:

--add-host=[]:指定主机的ip地址的映射关系,格式为:host:ip --dns=[]:为容器指定域名服务器 -h:指定主机名 -i:打开容器的标准输入 --name:指定容器名称 -u,--user=[]:创建用户 docker create image docker create centos:latest #latest表示使用最新版本的镜像创建容器。 docker create -it --name javatest -v /docker/data/:/data1 centos:java

②:使用docker run 创建容器。

#使用centos镜像创建一个名为 demo_centos 的容器 docker run -i -t --name demo_centos centos /bin/bash # -t 选项:为容器分配一个虚拟终端,称为交互式容器。 # -d选项:创建的容器为后台型容器,新的容器在后台运行。

2.查看容器

docker ps #只显示正在运行的容器 docker ps -a #显示全部容器 docker ps -a -f --name=mysql #列出名称包含 myslq 的容器 docker ps -a --before=demo_centos #列出某个容器创建之前的所有容器 docker ps -a --since=demo_centos #列出某个容器创建之后创建的容器 docker stats #实时查看容器占用的内存

3.查看容器日志

--log-driver json-file #启动容器时添加此参数,指定日志驱动 docker logs (容器ID或者容器名称) #查看容器日志 docker logs -f (容器ID或者容器名称) #实时返回日志

4.启动容器

docker start demo_centos docker restart demo_centos #docker run 也可以启动容器

5.登录容器

docker exec -it (容器ID或者容器名称) /bin/bash(执行的命令)

6.停止容器

docker stop demo_centos docker stop -t 10 demo_centos #10秒钟后停止 docker kill demo_centos #强制停止

7.删除容器

docker rm demo_centos

三、数据管理

1.创建数据卷

docker volume create my-vol

2.查看所有的数据卷

docker volume ls

3.查看数据卷的详细信息

docker volume inspect my-vol

4.挂载主机目录到容器

#--mount:挂载目录 #--type:挂载类型 #--source:主机目录 #--target:容器目录 docker run -d --name nginx --mount type=bind,source=/data,target=/webapp centos:nginx #查看容器挂载信息 docker inspect nginx

5.删除、清理 数据卷

#删除一个不在使用数据卷。注意:有容易在使用的时候不能被删除 docker volume rm my-vol #清理所有没有占用的数据卷 docker volume prune

四、网络管理

1.docker网络原理

容器互联网络原理

Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。

同时,Docker 随机分配一个本地未占用的私有网段(在 RFC1918 中定义)中的一个地址给 docker0 接口。比如典型的 172.17.42.1,掩码为 255.255.0.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。

当创建一个 Docker 容器的时候,同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头(例如 vethAQI2QT)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。

docker安装完成之后,会在宿主机中创建一个虚拟网桥,通过虚拟网桥实现容器与容器之间以及容器与外界的通讯。

网桥工作在OSI七层模型中的第二层:数据链路层。

brctl show #查看虚拟网桥 docker0 的信息。

2.网络模式

docker有四种网络模式:host、container、none、bridge。

①:host(主机模式)

容器不会虚拟出虚拟网卡和IP,而是和宿主机公用

docker run -d -ti --network=host centos

②:container(容器模式)

指定新创建的容器和已有的容器共享network命名空间。

③:none(无模式)

创建的容器没有网卡、IP地址、路由等信息。需要自己添加网卡、配置IP等。

④:bridge(桥接)

可以理解为一个软件交换机,它会挂载到它的网口之间进行转发

3.端口映射

#随机映射 -P #默认映射所有地址所有端口 -p 8080:8080 #映射到本机指定地址的指定端口 -p 127.0.0.1:8080:8080 #指定本机地址后,8080只有本机才能访问 #查看容器端口对应绑定的主机端口 docker port nginx 8080

4.容器互联

#默认情况下IP地址是随机分配的,并且每次启动容器都有可能发生变化,若用户使用--ip选项为容器指定固定ip,则需要创建自定义网络。

docker exec nginx ip a show #查看容器的ip地址 docker exec nginx ping 172.17.0.2 #使用镜像ID413545ae2733的容器ping别的主机

#网桥

#创建一个自己的虚拟网桥 docker network create -d bridge my-bridge #创建两个链接到新网桥的两个容器 docker run -it --name test5 --network my-bridge centos docker run -it --name test6 --network my-bridge centos

5.容器与外部网络连接

①:容器内部访问外部网络

容器通过自己的网络接口桥接到docker0,而docker0是与主机互通的,所以默认可以连接外部网络。

docker exec 413545ae2733 ping www.baidu.com

②:外部网络访问容器内部

如果需要访问容器提供的网络服务,就要通过端口映射。也就是将主机的某个段口映射到容器的网络服务断口。

docker run -itd -p 80:80 httpd #创建一个web容器,并将主机的80端口映射到容器的80端口。

五、Docker 仓库

①公有仓库

#登录公有仓库 docker login #给你的镜像打标签 docker tag centos:nginx sunyunjie/centos:nginx #上传镜像到docker 官方镜像库 docker push sunyunjie/centos:nginx #查看上传镜像是否成功 docker search sunyunjie/centos:nginx

②私有仓库

#安装私有仓库 docker run -d -p 5000:5000 -v /data/:/var/lib/registry registry #标记镜像到私有仓库 docker tag centos:nginx sunyunjie/centos:nginx #上传镜像到私有仓库 docker push sunyunjie/centos:nginx #查看仓库中已经上传的镜像 curl 127.0.0.1:5000/v2/_catalog #从本地仓库下载镜像

docker pull sunyunjie/centos:nginx