我们可以在Linux中安装Docker并运行Hello world应用程序。通过下面这些操作,我们将会学到更多有关于Docker的基础特征。我们将会学到如何:

  • 安装Docker引擎
  • 在一个容器中运行软件镜像
  • 在Docker Hub中浏览一个镜像
  • 创建你的镜像,并且在容器中运行它
  • 创建一个Docker Hub账户和一个镜像库
  • 创建你自己的镜像
  • 将你的镜像放到Docker Hub中让其他人使用

该开始教程是用于减少用户碰到问题的可能性,为了能够测试成功,一定要遵循下面说明的步骤来进行操作。该过程将会消耗大约45分钟。

确保你了解。。。

该开始教程使用命令行来进行相应的操作。你不必特别熟悉命令行,但是你应该了解如何打开shell或终端,并且在那个环境中运行基本的命令。它帮助我们了解如何去导航一个目录树,操作文件,列举运行的进程等等。

安装Docker(在Ubuntu中)


Ubuntu

Docker支持下面的这些Ubuntu操作系统:

  • Ubuntu Xenial 16.04 (LTS)
  • Ubuntu Wily 15.10
  • Ubuntu Trusty 14.04 (LTS)
  • Ubuntu Precise 12.04 (LTS)

该页指导你使用Docker管理发行包和安装机制来安装Docker。使用这些包能够确保你获得最新的Docker发行版。如果你希望使用Ubuntu管理包进行安装,可以查阅一个UBuntu资料。

注意:Ubuntu 14.10和15.04存在Docker的APT库,但是并不官方支持。

要求

不管你的Ubuntu版本是什么,Docker要求64位系统安装。除此之外,你的内核最低版本要求为3.10。最近的3.10的较小版本或最新的维护版本都是可以接受的。

版本低于3.10的内核缺少一些运行Docker容器的特征。这些较老版本的内核被了解到,存在一些bug,这些bug将会导致数据丢失;并且在特定条件下,会导致频繁的恐慌。

你可以打开一个终端,使用uname -r来检查你的当前内核版本。

bobo@bobo:~$ uname -r
3.19.0-15-generic
注意:如果你之前使用`APT`安装了Docker,一定要确定更新你的`APT`源码到最新的Docker库。

更新你的apt源

Docker的APT库包含Docker 1.7.1和更高版本。为了设置APT从最新的库中使用包:

1、使用sudoroot权限,作为一个用户登陆你的机器

2、更新包信息,确定APT以https方法工作,并且CA证书已被安装。

 $ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates

3、添加新的GPG

$ apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

4、使用你喜欢的编辑器打开/etc/apt/sources.list.d/docker.list文件。如果文件不存在,则创建他。

sh -c "echo deb https://get.docker.com/ubuntu docker main>/etc/apt/sources.list.d/docker.list"

5、更新APT包索引。

$ sudo apt-get update

6、如果旧的repo存在则清除,第一次安装可以跳过

$ sudo apt-get purge lxc-docker

   7、安装

apt-get install lxc-docker

8、启动docker

sudo service docker start

9、验证docker被正确安装

$ sudo docker run hello-world

该命令会向容器中下载一个测试镜像并且运行它。当容器运行成功,就会打印一个信息,然后退出。


bobo@bobo:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world 03f4658f8b78: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
Status: Downloaded newer image for hello-world:latest Hello from Docker.
This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal. To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker Hub account:
https://hub.docker.com For more examples and ideas, visit:
https://docs.docker.com/userguide/

可选配置

该小节包含可选的过程,用于配置你的Ubuntu更好的运行Docker。

  • 创建docker组
  • 适应内存和交换
  • 使能UFW转发
  • 配置一个DNS服务器来用
  • 配置Docker开机自启

创建一个Docker组

docker域是和Unix的一个套接字绑定的,而不是一个TCP端口。默认情况下,Unix套接字是属于用户root的,并且其他用户能够使用sudo访问他。处于这个原因,docker域会一直以root用户运行。

为了避免在使用docker命令的时候必须要使用sudo,我们需要创建一个Unix组称作docker,并且向该组中添加用户。当docker域启动的时候,Unix套接字的读写所有权由docker组拥有。

警告:`docker`组和`root`用户是平等的。

为了创建docker组和添加你的用户:

  1. 使用sudo权限登陆Ubuntu。
  2. 创建docker
$ sudo groupadd docker
  1. docker组中添加你的用户
$ sudo usermod -aG docker ubuntu
  1. 登出再登入 
    这个确保你的用户以正确的权限运行。
  2. 不使用sudo运行docker来验证您的工作。
$ docker run hello-world

如果失败信息和下面类似:

Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?

检查DOCKER_HOST环境变量是否被设置,如果为设置,则重新设置。

调整内存和交换分区

当用户运行Docker的时候,当运行一个镜像的时候,他们可能会看到下面这些信息:

WARNING: Your kernel does not support cgroup swap limit. WARNING: Your
kernel does not support swap limit capabilities. Limitation discarded.

为了阻止这些信息,就需要使能你系统上的内存和交换分区(memory and swap accounting)。使能内存和交换分区能够引起内存开销和降解性能,即使Docker并没有在使用。内存开销大约是所有可用内存的1%。性能大约降解10%。

为了在使用GNU GRUB的系统上使能内存和交换分区,遵循下面的步骤:

  1. 作为一个用户使用sudo特权来登陆Ubuntu。
  2. 编辑/etc/default/grub文件。
  3. 像下面这样设置GRUB_CMDLINE_LINUX值。
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
  1. 保存并关闭文件
  2. 更新GRUB
$ sudo update-grub
  1. 重启系统

使能UFW转发

如果在你运行Docker,在同样的宿主机上使用UFW(Uncomplicated Firewall)的时候,你将需要做额外的配置。Docker使用一个桥来管理容器网络。默认情况下,UFW丢弃所有的转发消息。结果是,当UFW被使能了,Docker要想去运行,你必须设置UFW的转发策略。

UFW的默认设置规则是拒绝所有的进来的消息。如果你想要另一个主机到达你的容器,你需要在Docker端口上允许进入的连接。如果LTS被使能,则Docker的默认端口为2376,如果没有,则端口为2375。如果TLS没有被使能,通信是未被加密的。默认情况下,Docker是在TLS未被使能的情况下运行的。

为了配置UFW和在Docker端口上允许进入的连接:

  1. 作为用户以sudo 登陆。
  2. 验证UFW是否被安装和被使能。
$ sudo ufw status
  1. 打开/etc/default/ufw并编辑。
$ sudo nano /etc/default/ufw
  1. 设置DEFAULT_FORWARD_POLICY策略为:
DEFAULT_FORWARD_POLICY="ACCEPT"
  1. 保存并关闭文件
  2. 重新加载UFW来使用新的设置。
$ sudo ufw reload
  1. 在Docker端口上允许进入的连接。
$ sudo ufw allow 2375/tcp

配置一个DNS服务器让Docker使用

在桌面上运行Ubuntu系统或Ubuntu衍生系统,在/etc/resolv.conf文件中,典型的使用127.0.0.1作为默认的nameserver。网络管理器也会设置dnsmasq来使用真实的DNS服务器,并且在/etc/resolv.conf中设置nameserver 127.0.0.1

当使用这些配置在桌面机器上开启容器,Docker用户将会看到这个警告:

WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers
can't use it. Using default external servers : [8.8.8.8 8.8.4.4]

该警告的出现是因为Docker容器不能使用本地的DNS域名服务器。Docker默认使用一个外部的域名服务器。

为了避免这个警告,你可以指定一个DNS服务器让Docker容器来使用。或者是,你可以在网络管理器中禁用dnsmasq。不过,禁用dnsmasq可能会导致DNS在一些网络中变慢。

下面的指令描述了如何配置运行在Ubuntu14.10或较低版本的上的Docker域。Ubuntu 15.04和更高版本使用systemd作为启动和服务管理器。有关与systemd的配置可以参考这篇文章,control and configure Docker with systemd

为了指定一个DNS服务器让Docker使用:

  1. 作为一个用户身份以sudo方式登陆系统。
  2. 打开/etc/default/docker文件编辑。
  3. 添加一个设置。
DOCKER_OPTS="--dns 8.8.8.8"

使用本地DNS服务器,例如 192.168.1.1替换8.8.8.8。你也可以指定多个DNS服务器。将他们之间用空格分离。例如:

--dns 8.8.8.8 --dns 192.168.1.1
警告:如果你正在使用连接多个网络的电脑做这个事情,确定要选择一个公共DNS服务器。
  1. 保存并关闭文件
  2. 重启Docker域。
$ sudo restart docker

或者是,对之前的操作作为一个可选的选项,就是在网络管理器中禁用dnsmasq

  1. 打开/etc/NetworkManager/NetworkManager.conf文件。
  2. 注释掉dns=dnsmasq这一行。
  3. 保存并且关闭文件。
  4. 重启网络管理器和Docker.
$ sudo restart network-manager
$ sudo restart docker

配置Docker开机自启动

Ubuntu 15.04及以上系统使用systemd作为它的启动和服务管理器,Ubuntu 14.10及其低版本使用upstart

对于15.04及其以上版本来说,为了配置docker域开机自启,运行:

$ sudo systemctl enable docker

对于14.10及其较低版本,上述的安装方法自动配置upstart开使docker域开机的时候自动启动。

更新Docker

安装最新版本的Docker使用apt-get:

$ sudo apt-get upgrade docker-engine

卸载

卸载Docker包:

$ sudo apt-get purge docker-engine

卸载Docker包及其以来不再需要使用下面的命令:

$ sudo apt-get autoremove --purge docker-engine

上面的命令不会移除镜像,容器,卷或者是用户创建的配置文件。如果你想删除所有的镜像,容器和卷,运行下面的命令:

$ rm -rf /var/lib/docker

你必须手动删除用户创建的配置文件。

Docker的安装,配置,更新和卸载的更多相关文章

  1. linux软件的安装,更新与卸载

    Linux常见的安装为tar,zip,gz,rpm,deb,bin等.我们可以简单的分为三类. 第一:打包或压缩文件tar,zip,gz等,一般解压后即可,或者解压后运行sh文件: 第二:对应的有管理 ...

  2. Linux实践篇--linux软件的安装,更新与卸载

    本文出处:http://www.cnblogs.com/lhj588/archive/2012/07/17/2595328.html,感谢作者分享. Linux常见的安装为tar,zip,gz,rpm ...

  3. CentOS软件的安装,更新与卸载命令

    Linux常见的安装为tar,zip,gz,rpm,deb,bin等.我们可以简单的分为三类. 第一:打包或压缩文件tar,zip,gz等,一般解压后即可,或者解压后运行sh文件: 第二:对应的有管理 ...

  4. Windows和Centos下Docker的安装配置

    Windows和Centos下Docker的安装配置 windows环境下的安装(win10) 在Windows系统上需要利用toolbox来安装Docker,现在 Docker 有专门的 Win10 ...

  5. Linux(Manjaro) - Docker - MySQL 安装配置

    Linux(Manjaro) - Docker - MySQL 安装配置 拉取mysql镜像 # 使用网易的 MySQL 镜像地址 docker pull hub.c.163.com/library/ ...

  6. 在Docker中安装配置Oracle12c并实现数据持久化

    在Docker中安装配置Oracle12c并实现数据持久化 选定镜像,并pull到系统中,一定要先配置加速,不然超级慢 eric@userver:~$ docker pull sath89/oracl ...

  7. Robot Framework的安装、更新与卸载

    Robot Framework的安装.更新与卸载 一,安装RF前的准备 一般就三种执行环境 Python, Jython (JVM) 和 IronPython (.NET): 安装python: #T ...

  8. Docker容器安装配置SQLServer服务(Linux)

    一:前言 随着不断的对Docker容器的实践和学习,越来越觉得容器的强大,把 SQL Server 数据库服务放在docker容器中,比你自己在宿主服务器上面安装配置一个SQL Server服务器是要 ...

  9. Docker: 安装配置入门[二]

    一.安装配置启动 1.环境 [root@docker1 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@d ...

  10. Anaconda:指令 安装、更新、卸载库

    学习总结自:如何使用anaconda安装或更新自己想要的库_xiexu911的博客-CSDN博客_anaconda 安装库 打开Anaconda Prompt后,输入指令及响应 conda list: ...

随机推荐

  1. 使用VS2008进行WEB负载测试

    软件测试中使用VS2008进行WEB负载测试 最近接触关于多线程的软件测试,所以对vs2005里的测试开始感兴趣,今天学习试用了一下,记下所获得的. vs 测试分“WEB测试”,“单元测试”,“负载测 ...

  2. Javascript 中 switch case 等于 (== )还是 恒等于(===)?

    Javascript 中 switch case 等于 (== )还是 恒等于(===)? 可以测试一下以下代码,这个 case 中是 等于(==)还是恒等于(===) <script> ...

  3. 深入理解Java虚拟机,intern

    1,在java1.7下面,intern不再复制实例,只存第一个引用,也就是new出来的有可能和intern相同(第一次情况 2,平时的new已经暗含了一个常量池,所有不适合上面情况, 参考:https ...

  4. kettle modified javascript 步骤的一个例子

    例子里用到的 org.htmlparser.Parser 是一个html 的解析器,可以在 sourceforge 上下载. 这个例子使用 org.htmlparser.Parser 包来解析一个 h ...

  5. 【python】使用Python中的urlparse、urllib抓取和解析网页

    一.解析URL 函数urlparse(urlstring [, default_scheme [, allow_fragments]])的作用是将URL分解成不同的组成部分,它从urlstring中取 ...

  6. SIM800/SIM900/SIM7000/SIM7600底层操作接口_句柄方式完全分离通信底层

    使用SIMCOM公司通信模块将底层的通信与应用完全进行了分离,便于移植. SIMCOM.h //定义了相关的结构体与类型. SIMCOM_AT.c//定义了底层的AT接口 SIMCOM_GSM.c// ...

  7. Android Studio failed to create error code -6解决方法

    起因是AndroidStudio编译太慢,在stackoverflow上找解决方法,创建了个vm选项文件,导致内存不够用 很多中文博客上都千篇一律地说是内存不够,打开安装路径下bin目录下的studi ...

  8. phpcms模块开发中的小问题及解决方法

    1.模块菜单中文名出错 在编写安装模块时候可能需要更改extention.inc.php中定义中文名称,由于反复安装或者通过phpcms的扩展->菜单管理 修改菜单名会导致中文名失败.解决办法很 ...

  9. 利用MessageFormat实现短信模板的匹配

    其实没什么技术含量,因为老是想不起来,所以在此文做下记录. 通常我们的应用系统中都会有很多短信的发送,或者是信息邮件等的推送,而这些信息却有着相同的共性,比如只是用户名换了下. 像下面这条,除了红色字 ...

  10. phpstudy操作sql server相关经验

    1.去官网http://www.phpstudy.net/下载并安装phpstudy 2.修改php.ini配置文件如下: mssql.secure_connection = onextension= ...