一、docker镜像操作
docker run hello-world
run :
pull dockerhub 仓库中项目/库/镜像
start hello-world-image
注释: 1、dockerclient客户端连接到了服务端(服务端是以一个守护进程的形式跑在操作系统里的)restful api典型的C/S架构 2、由docker服务端的守护进程从docker hub上下载了镜像 3、服务端创建了一个新的容器,然后从拉去的这个镜像启动了一个容器,容器执行了脚本/可执行程序让我们可以查看/使用 4、docker 服务端把这些信息流(传递)返回到客户端并展示出来, (展示在终端上) docker client 可以是多种形式,比如"docker"命令:工具所在的终端
二、docker命令—镜像
查看docker版本
docker -v
docker version
decker info 可以查看所有运行容器的镜像数量,运行容器的版本,可以分配的CPU,总的内存等信息.docker的工作目录 /var/lib/decker
搜索镜像
docker search nginx
——》自己制作镜像,然后上传到docker hub 上
优化:有效减少镜像大小,dockerfile 优化方向
下载镜像(默认是从docker hub)
docker pull 镜像名称
例如:docker pull nginx
查看镜像列表
docker images 看当前docker下的下载镜像信息
获取镜像信息,封装镜像的详细信息
docker inspect 镜像ID
添加镜像标签
docker tag hello-world:latest hello-world:lamp
删除镜像
docker rmi 镜像名称
docker rmi 镜像标签
docker rmi `docker images -q` -q 列出镜像ID
镜像导出
docker save -o 文件名镜像名
示例:
docker save -o centos_7 centos:7
docker save -o nginx_docker nginx:lastest
镜像导入
docker load < nginx
使用场景:有的生产环境,企业不直接使用docker私有仓库,而是存放在一个ftp服务器中,按需上传下载。
docker ps -aq 只过滤出容器ID
docker rm `docker ps -aq` 批量删除=
CONTAINER ID:容器ID
IMAGE:镜像版本
CRATED:创建的时间
STATUS:运行的时间
PORTS:暴露的端口
NAMES:名称(可定义)
三、docker命令—容器操作
查询容器
docker ps -a
创建容器
docker create -it nginx:latest /bin/bash
-i 让容器的标准输入保持打开
-t 分配一个伪终端
-d 后台守护进程的方式运行
启动容器
docker start 容器id
启动容器(一次性执行)
docker run centos:7 /usr/bin/bash -c ls /
停止容器
docker stop 容器ID
状态码0:正常退出,非0值表示非正常退出,137表示主动停止退出
容器持续后台运行
docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
watch -n 2 docker ps -a
docker rm `docker ps -aq`
进入容器
使用run
docker run -it nginx:latest /bin/bash
exec(容器必须为开启状态)
docker exec -it 容器ID /bin/bash
PS:
docker run -it 会创建前台进程,但是会在输入exit后终止进程。
docker attach 会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止进程.
docker exec -it 会连接到容器,可以像SSH一样进入容器内部,进行操作,可以通过exit退出容器,不影响容器运行。
容器导出
docker export 容器ID > 文件名
示例:
docker export 容器ID > nginx_a
容器导入 生成镜像
docker import 导出的文件名(容器) 指定镜像名称
示例:
docker import nginx_a nginx:latest
cat 文件名(容器)| docker import - nginx : latest
删除容器
docker rm 容器ID
强制删除容器
docker rm -f 容器ID
批量删除容器
docker ps -a | awk '{print "docker rm "$1}' | bash
批量删除"exit"状态的容器
for i in 'docker ps -a | grep -i exit | awk '{print $1}'`; do docker rm -f $i; done
四、docker网络模式
容器网络 docker0网络 docker容器的虚拟网关 loopback :回环网卡、TCP/IP网卡是否生效 virtual bridge: linux 白身继承了一个虚拟化功能(kvm架构),是原生架构的一一个虚拟化平台,安装了一个虚拟化平台之后就会系统就会自动安 装虚拟网卡 (示例:安装workstation ( 虚拟化平台)之后,会在网络适配器中会多H出VMnet1 VMnet8 VMnet0) docker 0 :容器的网关,绑定物理网卡,负责做NAT地址转换、端口映射 docker 0本身也是一种容器
Docker四种模式: 1、Host模式 host容器将不会虚拟出自己的刚卡,配置自己的IP等等,而是使用宿主机的IP和端口 如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡, 配置自己的IP等等,而是会使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进 程列表等还是和宿主机隔离的。 使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可 以使用宿主机的端口,不需要进行NAT, host 最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的 隔离性不好。
2、container模式 container创建的容器不会创建自己的网卡、设置IP等,而是和一个指定地容器共享IP、 端口范围 这个模式指定新创建的容器和已经存在的一个容器共享一个network namespace,而不是和 宿主机共享,新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定地容器共 享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表还是隔离 的。(两个容器的进程可以通过loo网卡设备通信)
3、None模式:该模式关闭了容器的网络功能 这种网络模式下容器只有lo回环网口,并没有其他的网卡。none模式可以在容器创建时通过 -network=none参数指定 这种类型的网络无法联网,但是封闭的网络能很好的保证容器的安全性。
4、Bridge模式: 此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker虚拟网桥,通过docker 0 网桥及iptables的nat,表配置与宿主机通信 当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就可以通过交换机连在了一个二层网络中。 从docker0子网中分配一个IP给容器使用,并设置docker0 的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair 设备,Docker 将 veth pair 设备的一端放在新创建的容器中,并命名etho(容器的网卡),另一端放在主机中,以vethxxx,这样类似的名字命名,并将这个网络设备加入到docker0 网桥中。可以通过brctl show命令查看。 bridge模式是docker 的默认网络模式,不写-net参数,就是 bridge模式。使用docker run -p时, docker实际是在iptables,做了DNAT规则,实现端口转发功能。可以使用jptables. -t nat -vnL查看。
|