Docker基本操作命令

docker简明操介绍

协议 Apache2.0
开发语言 Go
一次build到处Run
docker依赖于Linux内核/kernel
docker client server(后台process)

组件:Image镜像 Container容器(隔离) Repository仓库(存放镜像)

Docker与openstack应用场景的对比

类 别: Docker openstack
部署难度: 非常简单 组件多,部署复杂
启动速度: 秒级 分钟级
执行性能: 和物理机几乎一致 VM会占用相对多一些资源
镜像体积: 镜像MB级别 虚拟机镜像GB级
管理效率: 管理简单 组件相互依赖,管理复杂
隔离性: 隔离高 彻底隔离
可管理性: 单进程,不建议启动SSH 完整的系统管理
网络连接: 比较弱,做集群能力比较弱 借助neutron可以灵活组件各类网络架构
面向产品, 开发, 测试, 运维 , 自动化{轻量级的扩容} 微服务 面向大规模的分布式架构{微信红包}

centos 7 配置epel yum源

1
2
3
4
5
6
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install docker-io
docker serch centos #搜索镜像
docker pull centos #获取centos镜像
docker rmi images id #删除镜像(根据image id删除)
docker rm container id #删除容器(根据container id)

详细描述镜像

1
2
3
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 3bee3060bfc8 3 weeks ago 192.5 MB

docker每次启动一个应用,可以使用脚本启动多个应用

1
2
[root@bogon ~]# docker run centos /bin/echo 'hello, world!'
hello, world!

查看容器运行状态

1
2
3
[root@bogon ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
22143f214366 centos "/bin/echo 'hello, wo" 26 seconds ago Exited (0) 25 seconds ago loving_ptolemy

启动一个名字,并且进入bash模式

1
2
[root@bogon ~]# docker run --name DenissDocker -it centos /bin/bash
[root@32bbfc535f14 /]#

####退出容器exit

1
2
3
4
[root@bogon ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
32bbfc535f14 centos "/bin/bash" 2 minutes ago Exited (0) 3 seconds ago DenissDocker
22143f214366 centos "/bin/echo 'hello, wo" 4 minutes ago Exited (0) 4 minutes ago loving_ptolemy

####启动容器后台运行参数-d(如果没有nginx镜像会从repository仓库pull一个下来)

1
[root@bogon ~]# docker run -d -h nginx --name Deniss.nginx nginx

进入容器与网络访问模式

获取容器PID,可以是名字也可以是CONTAINER ID

1
[root@bogon ~]# docker inspect --format "{{.State.Pid}}" Deniss.nginx

脚本

1
2
3
4
#!/bin/bash
CNAME=$1
CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME)
nsenter --target "$CPID" --mount --uts --ipc --net --pid

网络访问模式

随机映射
docker run -P{无需制定端口,端口随机} 优点:端口不会冲突

1
[root@bogon ~]# docker run -d -P --name mysqlnginx1 nginx

docker run -p {制定端口}
制定映射

1
[root@bogon ~]# dockersqlnginx2 nginx run -d -p  91:80 --name mynginx2 nginx

查看网络

1
2
3
4
[root@bogon ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242ba293708 no veth21d6f36
virbr0 8000.5254005d7096 yes virbr0-nic

####查看docker容器ip

1
[root@bogon ~]# ip ad li

####查看路由网关

1
[root@bogon ~]# ip ro li

数据管理
数据卷 数据卷容器
-v /data –volumes-
-v src:dst from

数据卷中的操作会立马生效,同时还可以共享重用
映射数据卷的创建方式{目录会绕过UFS /var/lib/docker/vfs/dir}

1
[root@bogon ~]# docker run -it --name volume-test1 -h nginx -v /data cetnos

查看docker数据卷存放的绝对路径

制定目录挂载至容器(不可以有特殊字符/)可以制定权限访问

1
[root@bogon ~]# docker run -it --name volume-test2 -h nginx -v /otp:/opt:ro centos

####数据卷容器
用之前启动的容器用来做数据卷存储访问,可以是停止状态,容器与新建容器之间的数据可以访问

1
[root@bogon ~]# docker run -it --name volume-test4 --volumes-from volume-test1 centos

脚本循环打印 image id 并删除

1
[root@bogon ~]# for name in `docker images |awk '{print $3}'|grep -v IMAGE`;do docker rmi $name;done