为什么选择 Docker
传统虚拟机的缺点:资源占用十分多、冗余步骤多、启动很慢。
Docker 的优势:使用容器化技术,项目代码带上环境配置打包成镜像,上传到镜像仓库,别人下载镜像即可运行,不再需要复杂的环境配置。
「注意:容器化技术不是模拟一个完整的操作系统」。所以 Docker 之所以能火,是因为它比普通虚拟机轻巧!
Docker 和虚拟机技术的不同:
-
传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件;
-
Docker容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了;
-
Docker每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响。
Docker的相关术语
- 镜像 (image)
- 容器 (container)
- 仓库 (repository)
镜像可以认为是一些软件和配置环境的整体打包。
容器可以认为是一个精简的 Linux 系统,它是通过镜像运行起来的实例,镜像运行起来就是容器。 从这个角度来讲,镜像就类似于 Java 中的 Class 类型,由它可以创建多个实例。
镜像是存在硬盘上的东西,镜像运行起来,就形成一个容器,容器才是真正跑起来的程序。 只不过在 Docker 中,我们可以进入容器,做一些操作,然后再把容器中的改动提交形成一个新的镜像。
仓库类似于 Github,我们写好的代码会提交到 Github 上面进行保存和管理,方便在其他地方也能下载代码。 镜像仓库也是类似的,制作好的镜像,就把它放到镜像仓库,方便其他人直接用镜像部署。
安装使用等内容可以参看这篇文章:一篇文章搞定 Docker 入门
常用命令
一.镜像:
docker search [镜像名称] # 镜像搜索,可模糊
docker pull [镜像名称] #安装程序镜像。拉取镜像,有了镜像才可以创建出容器
docker images # 查看已安装的镜像 和命令一样:docker image ls
docker rmi [镜像ID] #删除镜像,删除前需要先暂停运行中的容器
docker rmi $(docker images -f "dangling=true" -q) #清理无用镜像
docker tag c7109f74d339 test:1.0 # 镜像重命名
docker save c7109f74d339 -o d:\docker\images\test.tar #导出镜像
docker load -i d:\docker\images\test.tar #导入镜像
二.容器
docker ps #查看正在运行的容器列表(运行中的程序)
docker ps -q #只查看容器ID
docker ps -a #查看所有运行过的容器(查看历史容器,可以去删除未使用的容器)
docker ps -a --no-trunc #查看容器完整信息
docker rm [容器id] # 删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -rf
docker rm -f [容器id] 或 $(docker ps -aq) # 删除指定的容器或全部删除(包括历史信息)
docker ps -a -q|xargs docker rm # 删除所有的容器
docker run [镜像] # 新建容器并启动,此时会新键容器
docker run --name mynginx -d nginx:latest # --name 为容器指定一个名称
# -p: 指定端口映射,格式为:主机(宿主)端口:容器端口 [local_port: container_port]
# -d:镜像:标记 [REPOSITORY:TAG]
docker run --name nginx-test -p 8080:80 -d nginx:latest
docker run -itd --name mynginx nginx /bin/bash # 后台运行容器 -d,-i: 交互式操作, -t: 终端
docker run -it -v /宿主机目录:/容器目录 镜像名 /bin/bash # -v 挂载宿主机的一个目录
docker run --link <源容器名或id>:源容器别名 接收容器 # --link 可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量。
例:
docker run -d -p 8080:80
-v ~/nginx/www:/usr/share/nginx/html
-v ~/nginx/conf/conf.d:/etc/nginx/conf.d
--link myphp-fpm:php --name nginx nginx:1.10.3
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
docker exec -it 容器id #进入容器 例如:docker exec -it 243c32535da7 /bin/bash
exit # 容器停止并退出
ctrl + P + Q # 容器不停止退出
//导出和导入容器
docker export 1e560fca3906 > d:docker\container\ubuntu.tar #导出 镜像id:1e560fca3906 快照到本地文件 ubuntu.tar。
cat docker/ubuntu.tar | docker import - test/ubuntu:v1 # 可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
docker import http://example.com/exampleimage.tgz example/imagerepo #通过指定 URL 或者某个目录来导入
docker容器内安装vim
//同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引。这样才干获取到最新的软件包
apt-get update
//安装vim
apt-get install vim
Docker 搭建PHP环境
Git Bash
复制: Ctrl + Ins
粘贴:ins
复制并不好用 可以右键窗体框来复制:
Win7 使用 cmd操作docker
首先确认cmd当前目录为:C:\Users\Administrator
依次运行以下代码:
SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=C:\Users\Administrator\.docker\machine\machines\default
SET DOCKER_MACHINE_NAME=default
SET COMPOSE_CONVERT_WINDOWS_PATHS=true
这样就可以正常使用docker 命令了