初识Docker与简单使用

0x00 容器与虚拟机

我们用的传统虚拟机如 VMwareVisualBox 之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。

而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。

img

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。

0x01 Docker的优势

Docker相比于传统虚拟化方式具有更多的优势:

  • docker 启动快速属于秒级别。虚拟机通常需要几分钟去启动。docker 需要的资源更少, docker 在操作系统级别进行虚拟化, docker 容器和内核交互,几乎没有性能损耗,性能优于通过 Hypervisor 层与内核层的虚拟化。

    img

  • docker 更轻量, docker 的架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境, Docker 运行的镜像数远多于虚拟机数量,对系统的利用率非常高。

  • 高可用和可恢复性: docker 对业务的高可用支持是通过快速重新部署实现的。虚拟化具备负载均衡,高可用,容错,迁移和数据保护等经过生产实践检验的成熟保障机制, VMware 可承诺虚拟机 99.999% 高可用,保证业务连续性。

  • 快速创建、删除:虚拟化创建是分钟级别的, Docker 容器创建是秒级别的, Docker 的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间。

  • 交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化。 DockerDockerfile 中记录了容器构建过程,可在集群中实现快速分发和快速部署。

0x02 Docker基础架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 包括是三个最基本的概念:Image(镜像),Container(容器),Repository(仓库)。

Docker 镜像(Images)Docker 镜像是用于创建 Docker 容器的模板。
Docker 容器(Container)容器是独立运行的一个或一组应用。
Docker 仓库(Registry)Docker 仓库用来保存镜像,可以理解为代码仓库。

img

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。镜像实际是由多层文件系统联合组成。镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等,容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。

镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其他服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。一个 Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

0x03 Docker 安装与使用

LXC (Linux Container)内核虚拟化技术,可以提供轻量级虚拟化,以便隔离进程和资源。

Ubuntu12.04 安装Docker需要升级内核(Docker 在3.8内核下运行最佳,Ubuntu1204内核版本为3.2)

# install the backported kernel
sudo apt-get update
sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring
# reboot
sudo reboot

安装Docker

# 添加Docker库的密钥
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

# 把Docker的库添加到apt的源列表中,更新并安装lxc-docker包。
sudo sh -c "echo deb http://get.docker.io/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"
sudo apt-get update
sudo apt-get install lxc-docker

按照这个步骤安装后,发现报了很多错误,调试了半天也没能解决,后来发现自己的Ubuntu12.04 是32位的,Docker需要运行在64位的机子上,所以失败了。后面查了一下说docker也可以安装在32位的系统,不过pull下来的镜像也必须是32位的,这个有点麻烦,所以放弃了。

在安装docker或者其他软件时记得要使用命令uname -auname -rlsb_release -a 查看系统相关信息,来避免一些不必要的麻烦。另外注意通过uname -a命令查看内核和版本显示系统版本为i386和i686的为 32位系统;显示为X86_64的,才是64位系统。

后面选择了我的阿里云CentOS 安装Docker,一路pass,没有遇到任何bug,大致步骤如下:

1、清理原有的docker目录和文件,确保安装环境的干净:

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

2、使用yum安装docker

安装一些必要的工具,设备映射器存储驱动程序需要设备映射器-持久数据和lvm2。

sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

设定软件源地址,国外慢的可怜,我这里使用国内源:

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新源信息

sudo yum makecache fast

下载docker,直接下载最新版:

sudo yum install docker-ce

也可以选择下载指定版本:

yum list docker-ce --showduplicates | sort -r
sudo yum install docker-ce-<VERSION STRING>

至此docker就下载安装成功了,可以直接使用命令docker -v 查看docker版本。

通过网上查资料说还有更简单的安装方法,直接使用脚本安装,只需要简单的两条命令就可以,我没有测试,应该是可以的。

curl -fsSL get.docker.com -o get-docker.sh

sudo sh get-docker.sh --mirror Aliyun

3、安装成功后可以进行一些配置和测试。可以设置系统启动时同时启动docker

sudo systemctl enable docker

启动docker并测试

sudo systemctl start docker
sudo docker run hello-world

img

0x04 Docker 常用命令

1.docker images ls                             # 列出本地docker镜像
2.docker rmi -f {image id}                     # 删除docker镜像

3.docker stop [docker_names]|[docker_id]       # 停止容器运行
4.docker rename [docker_names] [newname]       # 重命名容器
5.docker rm [docker_names]                     # 删除容器
6.docker ps -a                                 # 已创建docker image列表

以创建Nginx容器为例

# 查找 Docker Hub 上的 nginx 镜像
docker search nginx

# 拉取镜像
docker pull nginx

# 查看本地镜像
docker images nginx

# 启动一个Nginx容器实例
# --name(容器名)、-p(端口映射)、-d(后台执行)
docker run --name nginx-test -p 8080:80 -d nginx

# 查看容器是否有在运行
docker ps 

img

创建Nginx容器成功后,可以使用 ip + 端口号进行访问,Ubuntu系统可以直接使用127.0.0.1:端口号,如果是云服务器的话就是 ip+端口号,注意端口号要进行防火墙设置以保证可用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值