Docker是一门很成熟的容器技术,相似虚拟机技术主要用作环境的隔离,方便环境的复制镜像,虚拟机是基于操做系统这一层的,而Docker更加的轻量级,像是“应用”层级的。好比我须要一个MySQL环境、一个Nginx环境、一个netcore运行环境等等。html
有两个很是重要的概念要搞明白nginx
镜像Images:作好的环境,存储在仓库,有点像SVN/Git,有点像你作好的一个系统盘,它存的就是环境,好比一个nginx的镜像。git
容器Containers:一个镜像在本机上的运行实例就是一个容器,能够运行多个容器。好比我从远端pull一个nginx的镜像,而后在本机运行这个nginx,这就是造成了一个容器。docker
这两个之间的关系就像类与实例化以后的对象同样。bash
如今好多软件都提供Docker形式的分发了,镜像的查找能够登陆https://hub.docker.com/查找。须要什么环境,直接pull到本机,而后run运行,很是方便,不用在本机安装环境了。能够把本身配置好的环境提交成一个镜像,而后在用的地方直接pull and run, 这样就不用担忧环境不一致的问题了,很是方便复制且环境一致。服务器
下面我以CentOS 7.2为例,运行一个nginx的容器。ssh
# 更换源为国内 cd /etc/yun.repos.d ls mv CentOS-Base.repo CentOS-Base.repo.backup wget http://mirrors.163.com/.help/CenOS7-Base-163.repo yum makecache yum -y update # 安装 (经过官方sh脚本) wget https://get.docker.com mv index.html docker.sh sh docker.sh # 当前登陆用户 sudo usermod -aG docker root # 启动中止,和普通服务同样 service docker start # 查看信息 docker info docker version # ------------- # 概念,要特别理解熟悉镜像(images)和容器(container) # images就像远程服务器SVN上的代码(实际上是程序环境,好比centOS,nginx,netcore....),能够拉下来编译运行 # container就是本机运行一个images产生的环境 # 经常使用命令,不知道的,--help查看 # 镜像操做 docker images # https://hub.docker.com docker search xxx docker pull xxx docker rmi xxx # 容器操做 docker run xxxxx docker rm xxx docker start xxx docker stop xxx docker attach xxx docker exec -t -i xxx /bin/bash docker run xxx yum install soft docker cp xxx:/container_path ospath # 进阶 > 提交
docker容器运行后,一般是后台运行的,怎么进入容器查看运行状况呢,有下面几个办法 网站
# 直接在外面查看容器运行的日志 docker logs xxx # 进到容器且显示当前运行的程序的终端 # 退出时按Ctrl+P+Q,通常有点卡,这个界面是只读的,无法交互 docker attach xxxx # 进到容器里,能够bash交互的 docker exec -t -i b2d28b4aa923 /bin/bash
使用docker exec进入容器后,就像ssh进入一个Linux环境同样,彻底能够控制系统了,好比查看文件路径,打开一个文件等等。在机器与容器之间copy文件是一个常见的场景,可是,容器里的文件结果是怎么样的,一个文件放在那个路径下怎么知道,这时用docker exe就很方便了。好比我运行一个nginx的容器,我须要把网站的文件copy进去,但我不知道应该容器里网站文件应该放在什么地方,能够这样作。进入容器后,注意看系统提示都变了,而后我就能够查找nginx网站的路径,退出时exit退到机器spa
# 把一个文件copy到容器nginx网站路径下 docker cp my.html b2d28b4aa923:/user/share/nginx/html/my.html # 也能够反过来copy docker cp xxx:/user/file /root/file # 容器里的文件路径为 容器ID或名称:容器里的路径
参考:https://yeasy.gitbooks.io/docker_practice/content/container/run.html操作系统