docker详解

dumarkee 2020-06-14

一、什么是docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

二、Docker组件

1)Docker 客户端和服务器

Docker 是一个客户端-服务器(C/S)架构程序。Docker 客户端只需要向 Docker 服务器 或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker 提供了 一个命令行工具 Docker 以及一整套 RESTful API。你可以在同一台宿主机上运行 Docker 守护 进程和客户端,也可以从本地的 Docker 客户端连接到运行在另一台宿主机上的远程 Docker 守护进程。

2)Docker镜像

镜像是构建 Docker 的基石。用户基于镜像来运行自己的容器。镜像也是 Docker 生命周 期中的“构建”部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构 建出来。例如:

添加一个文件;

执行一个命令;

打开一个窗口。

也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更 新。

3)Registry(注册中心)

Docker 用 Registry 来保存用户构建的镜像。Registry 分为公共和私有两种。Docker 公司 运营公共的 Registry 叫做 Docker Hub。用户可以在 Docker Hub 注册账号,分享并保存自己的 镜像(说明:在 Docker Hub 下载镜像巨慢,可以自己构建私有的 Registry)。

4)Docker容器

Docker 可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容 器即可。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜 像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。 容器基于 镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。

三、Docker应用场景

容器提供了隔离性,结论是,容器可以为各种测试提供很好的沙盒环境。并且,容器本

身就具有“标准性”的特征,非常适合为服务创建构建块。Docker 的一些应用场景如下:

  • 加速本地开发和构建流程,使其更加高效、更加轻量化。本地开发人员可以构建、 运行并分享 Docker 容器。容器可以在开发环境中构建,然后轻松的提交到测试环境中,并 最终进入生产环境。
  • 能够让独立的服务或应用程序在不同的环境中,得到相同的运行结果。这一点在 面向服务的架构和重度依赖微型服务的部署由其实用。
  • 用 Docker 创建隔离的环境来进行测试。例如,用 Jenkins CI 这样的持续集成工具 启动一个用于测试的容器。
  • Docker 可以让开发者先在本机上构建一个复杂的程序或架构来进行测试,而不是 一开始就在生产环境部署、测试。

四、在Ubuntu中安装Docker

更新ubuntu的apt源索引

sudo apt-get update

安装包允许apt通过HTTPS使用仓库

sudo apt-get install     apt-transport-https     ca-certificates     curl     software-properties-common

添加Docker官方GPG key

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

设置Docker稳定版仓库

sudo add-apt-repository    "deb [arch=amd64] https://download.docker.com/linux/ubuntu    $(lsb_release -cs)    stable"

添加仓库后,更新apt源索引

sudo apt-get update

安装最新版Docker CE(社区版)

sudo apt-get install docker-ce

检查Docker CE是否安装正确

sudo docker run hello-world

为了避免每次命令都输入sudo,可以设置用户权限,注意执行后须注销重新登录

sudo usermod -a -G docker $USER

五、 启动与停止

# 启动docker
sudo service docker start

# 停止docker
sudo service docker stop

# 重启docker
sudo service docker restart

六、 docker基本操作

1、Docker镜像操作

1.1 什么是镜像

Docker 镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引 导系统,即 bootfs,这很像典型的 Linux/Unix 的引导文件系统。Docker 用户几乎永远不会和 引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系 统则会被卸载,以留出更多的内存供磁盘镜像使用。Docker 容器启动是需要一些文件的, 而这些文件就可以称为 Docker 镜像。

docker详解

Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。

image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,我们应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。

为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库 Docker Hub 是最重要、最常用的 image 仓库。此外,出售自己制作的 image 文件也是可以的。

1.2 镜像操作

(1) 镜像搜索

# 语法
docker search 镜像关键字
# 例如,搜索nginx镜像
docker search nginx

docker详解

(2) 镜像拉取

# 语法
docker pull 镜像名称:tag     # tag表示标签,多为软件版本,可以不写,默认为latest

# 例如拉取镜像nginx 
docker pull nginx    # 默认为最新版本

(3)获取当前环境所有镜像列表

# 语法
docker images
docker image ls

docker详解

  • REPOSITORY:镜像所在的仓库名称
  • TAG:镜像标签
  • IMAGEID:镜像ID
  • CREATED:镜像的创建日期(不是获取该镜像的日期)
  • SIZE:镜像大小

(4)删除镜像

# 语法
docker rmi 镜像id
docker image rm 镜像名或镜像id
# 例如 删除nginx镜像 
docker rmi 8559a31e96f4 
docker image rm 8559a31e96f4

2. Docker 容器操作

2.1 创建容器

docker run [option] 镜像名 [向启动容器中传入的命令]

常用可选参数说明:

  • -i 表示以“交互模式”运行容器
  • -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即 分配一个伪终端。
  • --name 为创建的容器命名
  • -v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器中目录),可以使 用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后 共享到容器上。
  • -d 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不 会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。
  • -p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p 做多个端口映射
  • -e 为容器设置环境变量
  • --network=host 表示将主机的网络环境映射到容器中,容器的网络与主机相同

2.2 创建交互式容器

例如,创建一个交互式容器,并命名为myubuntu

docker run -it --name=myubuntu ubuntu /bin/bash

在容器中可以随意执行linux命令,就是一个ubuntu的环境,当执行exit命令退出时,该容器也随之停止。

2.3 创建守护式容器

创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。在容器内部exit退出时,容器也不会停止。

docker run -dit --name=myubuntu2 ubuntu

创建一个守护式容器: 指定目录映射,指定端口映射

# 语法
docker run -i -t -d -v pathHost:pathContain -p portHost:portContainer imageName:imageTag /bin/bash
# 例如
docker run -i -t -d -v /export/home:/opt/installpath -p 8080:8080 ubutun:latest /bin/bash

2.4 进入已运行的容器

# 语法
docker exec -it 容器名或容器id 进入后执行的第一个命令
# 例如
docker exec -it myubuntu2 /bin/bash

2.5 查看容器

# 列出本机正在运行的容器
docker container ls
docker container ps

# 列出本机所有容器,包括已经终止运行的
docker container ls --all
docker container ps -a

2.6 停止与启动容器

# 停止一个已经在运行的容器
docker container stop 容器名或容器id

# 启动一个已经停止的容器
docker container start 容器名或容器id

# kill掉一个已经在运行的容器
docker container kill 容器名或容器id

2.7 删除容器

docker container rm 容器名或容器id

2.8. 将容器保存为镜像

# 我们可以通过如下命令将容器保存为镜像
docker commit 容器名 镜像名

2.9 镜像备份与迁移

# 通过save命令将镜像打包成文件,拷贝给别人使用

docker save -o 保存的文件名 镜像名
# 例如:
docker save -o ./ubuntu.tar ubuntu

# 在拿到镜像文件后,可以通过load方法,将镜像加载到本地
docker load -i ./ubuntu.tar

 

相关推荐