底层原理Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问.(如同我们访问mysql是一样,mysql需要一个服务端一直启动折,然后再有一个客户端去访问)
DockerServer接收到Docker-Client的指令,就会执行这个命令。
[attach]147183[/attach] Docker为什么比虚拟机快?
1、Docker有着比虚拟机更少的抽象层;
2、Docker利用的是宿主机的内核,虚拟机需要Guest OS;
所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统,避免引导。虚拟机是加载GuestOS,分钟级别的 非常慢;
而Docker是利用咱们的宿主机的操作系统,省略了这个复杂的过程,启动秒级。
通常容器都是使用后台方式运行的,需要进入容器,修改一些配置。
命令1:
- <font face="微软雅黑" size="3">docker exec -it 容器id bashshell #docker exec -it 代表以交互模式运行</font>
复制代码 镜像命令:docker images 查看所有本地的主机上的镜像
docker search 搜索镜像
- <font face="微软雅黑" size="3">docker search mysql</font>
复制代码- <font face="微软雅黑" size="3"># 启动docker</font>
复制代码 容器命令说明:有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习。
docker pullcentos
新建容器并启动- <font face="微软雅黑" size="3">docker run [可选参数] image
- # 参数说明
- --name-"Name" #容器名称,如tomcat01,tomcat02
- -d #后台方式运行
- -it #使用交互方式运行,进入容器查看内容
- -P #指定容器的端口 -p 8080:8080
- #这里端口的使用大有门道
- # -P ip:主机端口:容器端口
- # -P 主机端口:容器端口(常用)
- # -P 容器端口
- # 容器端口
- -p
- #测试启动并进入容器
- [root@second ~]# docker run -it centos /bin/bash
- [root@ac4241126f49 /]# ls
- bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var #这里列出的就是centos容器内部的文件,与外部的centos任何关系
- [root@ac4241126f49 /]#
- [root@ac4241126f49 /]# exit #退出容器,注意此处退出容器后,容器就停止运行了,可查看下面的docker ps无容器在运行
- exit
- [root@second ~]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- [root@second ~]#
- </font>
复制代码 [attach]147184[/attach]
退出容器上面的案例中退出容器后(exit),容器就停止运行了,能不能退出的时候不停止容器呢?
可通过快捷键:ctrl+p+q
- <font face="微软雅黑" size="3">[root@second ~]# docker run -it centos /bin/bash
- [root@1cf95596f5c5 /]# docker ps #此处通过 ctrl+p+q 退出容器但不停止容器运行
- bash: docker: command not found
- [root@1cf95596f5c5 /]# [root@second ~]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 1cf95596f5c5 centos "/bin/bash" 41 seconds ago Up 38 seconds strange_solomon
- </font>
复制代码
列出所有运行的容器- <font face="微软雅黑" size="3">#docker ps 命令
- #没有参数,表明列出当前正在运行的容器
- -a #列出当前正在运行的+历史运行过的容器
- -n=? #显示最近创建的容器
- -q #只显示容器的编号
- [root@second ~]# docker ps -aq
- ac4241126f49
- 87bff02ef488
- 570a1d6addc6
- df95abfd587e
- 0ab3ceb861c1
- 2e2be3e98edb
- </font>
复制代码 删除容器
- <font face="微软雅黑" size="3">docker rm 容器id #删除指定容器,不能删除正在运行的容器,如果要强制删除 rm -f
- docker rm -f $(docker ps -aq) #删除所有容器
- docker ps -a -q|xargs docker rm #删除所有容器
- docker rm -f $(docker ps -q) #删除正在运行的容器
- 83
- </font>
复制代码 启动和停止容器的操作
- <font face="微软雅黑" size="3">docker start 容器id
- docker restart 容器id #重启容器
- docker stop 容器id #停止容器
- docker kill 容器id #暴力杀掉容器
- </font>
复制代码 常用其它命令后台启动容器
- <font face="微软雅黑" size="3">#命令 docker run -d 镜像名
- [root@second ~]# docker run -d centos
- 7155edf4cb993690087d27f31cf5edd9a33de2a5761217366cdf2c630c6fee3a
- [root@second ~]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- #通过上面-d的方式启动后发现,容器启动后就立马停止了,docker ps查看不到正在运行的容器
- #这里有一个坑,当docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
- </font>
复制代码 查看日志
- <font face="微软雅黑" size="3">docker logs -f -t --tail
- #编写一段shell脚本
- </font>
复制代码
[attach]147185[/attach]