1.Docker 概述
Docker 是一个开源的容器引擎,它运行在物理主机或者通过 Vmware 、KVM 等虚拟化技术创建的虚拟机中。
一个容器可以简单的理解为一组文件及容器启动时将会运行的服务进程。
一个容器中的文件以及运行的程序,一旦提交为镜像就固定了,不论在任何主机上运行该容器都是一致的。
开发者可以将应用打包到一个或多个容器中,从而能够轻松在其他运行了docker 的主机运行该应用,这使得应用部署非常简单,并且避免了因环境问题而导致的各种异常。
容器可以理解为是应用层的虚拟机, 但容器不等于虚拟机,
不知道虚拟机的同学看这里 虚拟机
2.Docker 的特点及用途
Docker 特点:
- 轻量
单机可以轻松支持上百个容器, 相比笨重的虚拟机好太多。 - 快速启动
启动一个容器只需要几秒钟。 - 可移植性
这几乎是Docker 最重要的特点,让运维部署变的简单,不用再考虑各种系统环境服务缺失导致的应用问题。 - 隔离性
单机上容器间的资源是隔离的互不影响,对容器中文件的随意删改也不会影响宿主机,使得容器有很好的隔离性。
Docker 用途:
- 快速部署
- 持续集成(devops)
- 提升开发效率
不同的开发环境中,我们都想把两件事做好。一是我们想让开发环境尽量贴近生产环境,二是我们想快速搭建开发环境。
理想状态中,要达到第一个目标,我们需要将每一个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。然而,我们却不想每次都需要网络连接,每次重新编译的时候远程连接上去特别麻烦。这就是Docker做的特别好的地方,开发环境的机器通常内存比较小,之前使用虚拟的时候,我们经常需要为开发环境的机器加内存,而现在Docker可以轻易的让几十个服务在Docker中跑起来。 - 单机应用隔离
由于单机上容器之间有很好的隔离性, - 大规模应用集群
- 多租户环境
3.Docker 知识要点
容器
在Docker的使用过程中,创建一个容器就是创建一个实例
镜像
镜像的创建方式有两种,一种是通过 docker commit
命令提交容器,一种是 Dockerfile 来创建, 没有特殊情况下都应该用 Dockerfile 来创建镜像
容器与镜像的关系
一个镜像就相当于面向对象中的类,容器就是一个实例化类后得到的一个对象,再通俗一点,容器和镜像的关系可以想象成,月饼和月饼模子的关系,通过月饼模子可以制作无数个一样的月饼。
容器与主机文件共享
docker run
的命令中 提供了 -v
的参数来使得容器可以跟宿主机共享文件或目录
容器与主机端口映射
docker run
的命令中 提供了 -p
的参数来使得宿主机的某个端口可以映射到容器的端口上
4.上手演练
测试环境搭建
上手演练前,我们需要准备一个测试环境,先在本机的 VirtualBox 上创建了一个安装了 Ubuntu 14.04 操作系统的虚拟机,命名为“test-server”
下面来安装Docker
登录虚机后按以下步骤操作:
- 切换到 root 权限
sudo su -
- 安装并校验源
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | apt-key add -
apt-key fingerprint 0EBFCD88
#将源信息直接写入/etc/apt/sources.list
add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
#更新源
apt-get update
#安装制定版本的docker
apt-get install docker-ce=17.06.2~ce-0~ubuntu
#查看docker 版本
docker version
- 设置docker 加速镜像
由于在国内,我们使用拉取官方的镜像源较慢,这里设置一个功能的加速镜像源
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://8a2e319e.m.daocloud.io
第一个 Docker 容器
- 下载一个 Ubuntu 系统的镜像
docker search ubuntu
docker pull ubuntu
- 在容器中执行命令并返回结果(容器执行命令返回结果后自动删除自身)
$ docker run --rm ubuntu echo "Hello World"
$ docker run --rm ununtu ps
- 进入到容器中与容器进行交互操作
$ docker run --rm -ti ubuntu /bin/bash
# uname -a
# dpkg -l
- 常用命令
docker search # 从 Docker 官方镜像 hub.docker.com 仓库搜索镜像
docker pull 拉取一个镜像
docker images 查看本地镜像
docker run 从镜像实例化一个容器
docker ps 查看所有在运行的容器
docker build 从 Dockerfile 构建镜像 -
docker start/stop/kill
启动/关闭/强制关闭容器
- docker rm
删除容器 - docker rmi
删除镜像
创建一个自己的镜像
- 在容器中安装 nginx
docker run -ti ubuntu bash
apt-get update
apt-get install -y nginx
exit
docker ps -l
docker commit nginx1.0
容器中执行
exit
则退出容器
docker ps -l
查看最近创建的容器
- 查看刚刚我们创建的镜像 nginx 1.0
$ docker images
这时你可以将镜像提交到本地仓库,或者官方的 docker hub 仓库
用docker 快速安装nginx
在主机 root 用户目录创建 html
目录, 并创建index.html
文件,内容为 Hello,world
mkdir /root/html
echo "Hello, world" > /root/html/index.html
安装启动nginx 容器:
docker run --name some-nginx -p 8080:80 -v /root/
html:/usr/share/nginx/html:ro -d nginx
对参数做下解释:
--name
用来制定容器的名称-p
用来做端口映射,前面的 “8080” 是宿主机的端口号,“80” 是容器的端口号-v
用来做目录映射,将主机上的 “/root/html” 目录映射到了容器中的 “/usr/share/nginx/html” ,这样我们就不必进入到容器中来修改页面了-d
这个参数表示,容器在后台运行
这时候如果你的虚机ip是 192.168.4.242
, 通过浏览器访问 http://192.168.1.105:8080/index.html
就可以访问到我们刚刚创建的页面了
5.docker 网络
docker 的网络大致分为五种类型, 在安装docker 后宿主机上会创建三种网络, 分别是 bridge
, host
, none
网络, 可以通过 docker network ls
查看:
none 网络
容器没有网卡,所以容器也就无法联网, 创建这类容器可以通过 --network=none
来指定
docker run -it --network=none busybox
可以看到容器只有一个回环网络,没有其他网卡了
host 网络
host 模式相当于容器直接使用宿主机的网络
docker run -it --network=host busybox
进入容器后执行ifconfig
, 在对比在宿主机上执行 ifconfig
, 发现执行完全一样。
这种方式的好处是,网络性能好,但是隔离性差,如果宿主机运行了多个容器,端口可能会冲突
bridge 网络
容器启动时默认的网络模式,docker 安装的时候会创建一个名为 “docker0”的网桥,启动的容器在不指定“–network”容器时,都会默认挂到 “docker0”下
container 模式
创建容器时使用–network=这个模式在创建新的容器的时候指定容器的网络和一个已经存在的容器共享一个Network Namespace,但是并不为docker容器进行任何网络配置,这个docker容器没有网卡、IP、路由等信息,需要手动的去为docker容器添加网卡、配置IP等。
转载请注明:大后端 » Docker 快速入门(精编版)