Docker的基本使用

# 转载请留言联系

  • Docker是什么?

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

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

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

  • Docker的优点

  • 1、简化程序:

Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。

  • 2、避免选择恐惧症:

如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

  • 3、节省开支:

一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

  • Docker组件

1)Docker 客户端和服务器

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

 

2)Docker镜像

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

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

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

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

 

3)Registry(注册中心)

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

 

4)Docker容器

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

 

DOCKER的常用操作

  • Docker的启动与停止

1)安装(基于Ubuntu16.04)

sudo apt-key add gpg
sudo dpkg -i docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb

2)Docker服务端的启动与停止

docker是一个客户端-服务端(C/S)架构程序,类似redis。

- 客户端: docker命令行工具
- 服务器: Docker守护进程(docker引擎)

只有在服务端运行时,输入docker的命令才能运行。我们平时用的终端界面就是docker的客户端。

# 启动docker
sudo service docker start

# 停止docker
sudo service docker stop

# 重启docker
sudo service docker restart

注意:安装完成Docker后,默认已经启动了docker服务
  • Docker的镜像

1)搜索可用的docker镜像

sudo docker search [镜像名字]

示例:sudo docker search ubuntu

2)下载docker镜像

sudo docker pull [镜像名字]

注意:要写完整的名字

示例:sudo docker pull ubuntu

3)加载本地镜像

如果有已经下载好的镜像,可以直接加载

sudo docker load -i [包的位置]

-i, –input string Read from tar archive file, instead of STDIN
从tar归档文件读取镜像,而不是标准输入流

示例:sudo docker load -i ./ubuntu.tar

4) 删除镜像

sudo docker image rm [镜像名字或镜像id]

示例:sudo docker image rm ubuntu

5)镜像的备份与迁移

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

sudo docker save -o 保存的文件名 镜像名

示例:

sudo docker save -o ./装载了web应用的镜像.tar ubuntu

然后可以拷贝给别人,别人拿到之后,用3)的方法就可以运行了。

6)列出镜像

sudo docker image ls

  • Docker的容器

1)列出本机正在运行的容器

sudo docker container ls

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

2)列出本机所有容器,包括已经终止运行的

sudo docker container ls --all

3)创建容器

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

常用可选参数说明:

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

示例1:  

如果是创建一个交互式的容器。

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

在容器中可以随意执行linux命令,就是一个ubuntu的环境,当执行exit命令退出时,该容器也随之停止。注意是停止,不是没了。用sudo docker container ls --all列出所有容器(包括已终止的),可以看到容器还在的。

示例2:

如果是创建一个守护式的容器。

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

sudo docker run -dit --name=damonubuntu ubuntu [命令(可选)]

(为什么不用-d而用-dit呢?原因就是:Docker容器后台运行,就必须有一个前台进程。主线程结束,容器会退出。)

4)进入已运行的容器

例如,我想进入刚刚创建的守护式容器damonubuntu。

sudo docker exec -it 容器名或容器id 进入后执行的第一个命令

示例:sudo docker exec -it damonubuntu /bin/ls

5)停止与启动容器

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

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

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

6)删除容器

sudo docker container rm 容器名或容器id

7)将容器保存为镜像

sudo docker commit 容器名 镜像名
原文地址:https://www.cnblogs.com/chichung/p/10002439.html