我们可以在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. cratedb geo 查询

    cratedb支持的geo 查询还相对比较全,开发基本的功能已经够用了 安装cratedb 使用docker docker run -d -p 4200:4200 crate 创建数据库 创建表 CR ...

  2. HTML表单 在提交之前 验证表单数字合法性

    function checkform(){ if(!isNumeric($('.apply_money').val())){ alert("必须是数字"); return fals ...

  3. 蚂蚁金服 Service Mesh 实践探索

    SOFAMesh是蚂蚁金服在ServiceMesh方向上的探索,下面是它高级技术专家敖小剑在QCon上海2018上的演讲. Service Mesh 是一个 基础设施层,用于处理服务间通讯.现代云原生 ...

  4. VirtualBox的vdi映像导入遇到的uuid冲突问题 (转)

      virtualbox导入vdi文件时出现下面的问题: 打开hard disk D:\software\GT5.0.0.vdi 失败 Cannot register the hard disk 'D ...

  5. 【linux】ls常用参数

    1. 命令格式: ls [选项] [目录名] 2. 命令功能: 列出目标目录中所有的子目录和文件. 3. 常用参数: -a, –-all 列出目录下的所有文件,包括以 . 开头的隐含文件 -d, –- ...

  6. [DP题]放苹果

    放苹果(DP做法) 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法.输入第一行是测试数据的数目t(0 < ...

  7. mac上 自己安装的python 和 自带python 的可执行文件位置

  8. mysql-1安装和数据库的管理

    1.安装 直接docker安装,客户端使用Navicat Premium. docker run -d --name csjmysql -p 3306:3306 -e MYSQL_ROOT_PASSW ...

  9. 5月25日-js操作DOM遍历子节点

    一.遍历节点 遍历子节点 children();//获取节点的所有直接子类 遍历同辈节点 next(); prev(); siblings();//所有同辈元素 *find(); 从后代元素中查找匹配 ...

  10. [saiku] saiku-添加数据源以及保证数据源的一致性

    采用任何一种添加数据源的方式都不能保证数据源的一致和完整,所以需要两种结合来管理数据源 1.通过saiku的管理台添加数据源 ① 第一种方式:schema和ds都在管理台添加 1)上传schema文件 ...