容器是Docker的三大核心概念之一。简单地说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机能够理解为模拟运行的一整套操做系统(提供了运行态环境和其余系统环境)和跑在上面的应用。经过这篇文章,咱们来说讲Docker容器的一些经常使用命令,如建立,中止,重启,暂停等等。java
本文发布于掘金号【Happyjava】。Happy的掘金地址:juejin.im/user/5cc289…,Happy的我的博客:blog.happyjava.cn。欢迎转载,但须保留此段声明。nginx
命令以下:git
docker create <image>
复制代码
使用create 命令建立的容器,默认处于中止状态,须要咱们手动去启动容器。docker
命令以下:shell
docker run <image>
复制代码
经过run命令建立的容器,默认是会运行的。ubuntu
经常使用参数以下:bash
-i 让容器的标准输入保持打开服务器
-t 分配一个伪终端app
-d 容器处于守护进程运行ssh
--name 设置容器的名字
-p 能够映射宿主机端口至容器端口,如 -p 8080:8081 ,左边为宿主机端口,右边为容器端口
-v 能够挂在宿主机目录至容器目录,如-v /data:/tmp/data,左边为宿主机目录,右边为容器目录。
如,一条实际运行容器的命令:
docker run -it -d --name my_ubuntu -p 8088:22 -v /root/ubuntu_data:/data ubuntu:latest /bin/bash
复制代码
命令以下:
docker ps
复制代码
docker ps 是查看正在运行的容器,能够添加-a 参数,查看全部容器的信息。
中止容器的命令:
docker stop <container_name/id>
复制代码
docker start <container_name/id>
复制代码
docker restart <container_name/id>
复制代码
命令以下:
docker rm <container_id/name>
复制代码
若是是正在运行的容器,会提示删除失败,能够经过 -f 参数强制删除。例如,删除正在运行的 my_ubuntu 容器:
docker rm -f my_ubuntu
复制代码
能够经过以下命令查看容器的日志:
docker logs <id/name>
复制代码
docker pause <id/name>
复制代码
经过docker ps 命令能够查看到容器的状态
docker unpause <id/name>
复制代码
若是咱们建立容器时,使用了 -d 参数,那么容器就会在后台运行。那么,咱们能够经过 docker attach 命令和 docker exec 命令链接到容器。
docker attach 命令使用以下:
docker attach <container_name/id>
复制代码
如,我这里链接建立的名为 my_ubuntu 的容器。
docker attach my_ubuntu
复制代码
进入容器后,其实就跟ssh登陆服务器效果彷佛同样的:
docker attach链接容器,有一个致命的缺点,那就是当多个窗口同时attach到同一个容器时,全部窗口都会同步显示,当某个窗口阻塞了,那么全部的窗口都会被阻塞掉。例如,我经过两个终端attach到这个my_ubuntu容器,全部的操做都会被同步:
我在一个窗口输入东西,另一个窗口也会同步。
也是由于这样,因此attach命令是比较少用的。
docker exec 本质上不是链接容器,而是在容器中执行命令,其用法以下:
docker exec -it <container_name/id> <exec>
复制代码
其中<exec>是须要执行的命令,如在my_ubuntu容器下执行 /bin/bash 命令:
docker exec -it my_ubuntu /bin/bash
复制代码
执行结果:
/bin/bash 这个命令,其实就是运行一个bash终端,因此咱们就能够经过在容器中执行 /bin/bash命令来链接容器。
容器也是支持查看变动的内容的,命令以下:
docker diff <name/id>
复制代码
如,查看my_ubuntu的变动:
有三个符号,它们分别是:
Docker也能够像git同样,能够把变更提交为新的镜像。命令以下:
docker commit <container_id/name> repo/name:tag
复制代码
如,我把本地的my_ubuntu提交:
docker commit my_ubuntu test/ubuntu:personal
复制代码
而后查看镜像:
提交后的镜像,能够推送到仓库上,方便测试部署等。
容器做为Docker的三大核心概念之一,其有不少操做,本文也难以一一列举,只是列举出了本人认为比较经常使用的一些命令。
搜索公众号【Happyjava】,回复【电子书】和【视频】,便可获取大量优质电子书和大数据、kafka、nginx、MySQL等视频资料