为什么选择 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环境

菜鸟教程 - Docker 安装 PHP

Docker秒搭建Php7开发环境

dockerBub - php:7.3.27-fpm

Git Bash

复制: Ctrl + Ins
粘贴:ins

复制并不好用 可以右键窗体框来复制:

docker 用的人越来越少_nginx

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 命令了