我们可以在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资料。

  1. 注意:Ubuntu 14.1015.04存在DockerAPT库,但是并不官方支持。

要求

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

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

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

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

更新你的apt源

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

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

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

  1. $ sudo apt-get update
  2. $ sudo apt-get install apt-transport-https ca-certificates

3、添加新的GPG

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

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

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

5、更新APT包索引。

  1. $ sudo apt-get update

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

  1. $ sudo apt-get purge lxc-docker

   7、安装

  1. apt-get install lxc-docker

8、启动docker

  1. sudo service docker start

9、验证docker被正确安装

  1. $ sudo docker run hello-world

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


  1. bobo@bobo:~$ sudo docker run hello-world
  2. Unable to find image 'hello-world:latest' locally
  3. latest: Pulling from library/hello-world
  4. 03f4658f8b78: Pull complete
  5. a3ed95caeb02: Pull complete
  6. Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
  7. Status: Downloaded newer image for hello-world:latest
  8. Hello from Docker.
  9. This message shows that your installation appears to be working correctly.
  10. To generate this message, Docker took the following steps:
  11. 1. The Docker client contacted the Docker daemon.
  12. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
  13. 3. The Docker daemon created a new container from that image which runs the
  14. executable that produces the output you are currently reading.
  15. 4. The Docker daemon streamed that output to the Docker client, which sent it
  16. to your terminal.
  17. To try something more ambitious, you can run an Ubuntu container with:
  18. $ docker run -it ubuntu bash
  19. Share images, automate workflows, and more with a free Docker Hub account:
  20. https://hub.docker.com
  21. For more examples and ideas, visit:
  22. 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组拥有。

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

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

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

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

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

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

调整内存和交换分区

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

  1. WARNING: Your kernel does not support cgroup swap limit. WARNING: Your
  2. 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值。
  1. GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
  1. 保存并关闭文件
  2. 更新GRUB
  1. $ 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是否被安装和被使能。
  1. $ sudo ufw status
  1. 打开/etc/default/ufw并编辑。
  1. $ sudo nano /etc/default/ufw
  1. 设置DEFAULT_FORWARD_POLICY策略为:
  1. DEFAULT_FORWARD_POLICY="ACCEPT"
  1. 保存并关闭文件
  2. 重新加载UFW来使用新的设置。
  1. $ sudo ufw reload
  1. 在Docker端口上允许进入的连接。
  1. $ 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用户将会看到这个警告:

  1. WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers
  2. 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. 添加一个设置。
  1. DOCKER_OPTS="--dns 8.8.8.8"

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

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

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

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

配置Docker开机自启动

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

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

  1. $ sudo systemctl enable docker

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

更新Docker

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

  1. $ sudo apt-get upgrade docker-engine

卸载

卸载Docker包:

  1. $ sudo apt-get purge docker-engine

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

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

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

  1. $ 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. ASP.NET MVC基础入门.

    一:ASP.NET MVC 简介 1:asp.net mvc 是一种构建web应用程序的框架,他将一般的MVC(Model--View--Controller)模式应用于asp.net框架. 2:as ...

  2. AngularJS 最佳实践

    AngularJS 是一个 Web 应用框架,它实现了前端的 MVC 架构,能让开发人员很方便地实现业务逻辑. 举个栗子,要做到下面的效果,以前可能需要写一连串的 JavaScript 代码绑定 N ...

  3. 列表查询SQL语句改造

    一个经常遇到到的场景,就是查询列表数据,列表数据由多张表构成 最简单的查询方法是先写一个查询单条数据的方法,比如这个方法中要查询十张表: 然后一个循环调用查单条的方法,这种逻辑上理解是比较简单的(因为 ...

  4. Django Admin定制

    Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttyp ...

  5. 在laravel之外使用eloquent

    视频地址 https://laracasts.com/lessons/how-to-use-eloquent-outside-of-laravel

  6. unity动画状态机的学习

    简单贴一下步骤,备忘 添加多个动画到动画控制器 创建transition,添加转换条件 在代码里面获取animator组件,然后animator.setXXX即可

  7. vim配置之tagbar

    vimConfig/plugin/tagbar-setting.vim let g:tagbar_width=4 map <F12> :TagbarToggle<CR> map ...

  8. mysql 查询所有父级名称

    SELECT T2.id, T2.name FROM ( SELECT @r AS _id, ,,@stop) as stop, (SELECT @r := p_id FROM goods_class ...

  9. php错误:Uncaught exception com_exception with message Failed to create COM object

    本文为大家讲解的是php错误:Uncaught exception com_exception with message Failed to create COM object,感兴趣的同学参考下. ...

  10. icape3 的使用

    在FPGA中,有时需要使用用户代码重配置FPGA,配置的内容可以是flash或者是其他的来源这样FPGA的启动模式有关,在本实验中配置文件是存放在flash中.实际的操作步骤如下: 1:生成一个工程, ...