Docker基础之三: 安装docker+HelloWorld

安装Docker

(提示:对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者社群里面。)

Docker最核心的程序是Docker Engine,根据参数,它既可以作为后台daemon运行,也可以作为命令行工具使用。

1 Linux上安装

Docker本身是基于linux内核的,因此只要内核版本足够新,一般大于3.10左右,就可以运行。各种系统的安装方式基本相同,只是针对各系统的进程管理或者目录结构略有不同。下面是docker在linux系统下的物理逻辑结构: 

2 Ubuntu上安装Docker

在所有系统中,Docker对ubuntu的支持是最好的,因此如果使用docker,我推荐都适用ubuntu系统。Ubuntu系统的可视化、安装以及内核的更新,我认为都是最好的。Docker支持的Ubuntu系统:

  • Ubuntu Wily 15.10
  • Ubuntu Vivid 15.04
  • Ubuntu Trusty 14.04 (LTS)
  • Ubuntu Precise 12.04 (LTS) 环境要求:
  • 64位系统
  • 3.10以上linux内核,具体可以根据uname –r进行查看

具体安装步骤:

  1. 更新apt源
    #添加gpg key
    sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
    
    #增加/etc/apt/sources.list.d/docker.list
    
    #增加下面一行(选择你的具体版本)
    Ubuntu precise 12.04: deb https://apt.dockerproject.org/repo ubuntu-precise main
    Ubuntu trustry 14.04: deb https://apt.dockerproject.org/repo ubuntu-trusty main
    Ubuntu trustry 15.04: deb https://apt.dockerproject.org/repo ubuntu-vivid main
    Ubuntu trustry 15.10: deb https://apt.dockerproject.org/repo ubuntu-wily main
    
    #执行apt-get update,更新源
    
  2. 删除旧版本Docker
    apt-get purge lxc-docker
    
  3. 检查Docker的apt源是否正常
    apt-cache policy docker-engine
    
  4. 不同版本的处理
    #Ubuntu Wily 15.10, Ubuntu Vivid 15.04, Ubuntu Trusty 14.04 (LTS)
    $ sudo apt-get install linux-image-extra-$(uname -r)
    linux-image-extra内核包安装后,可以使用aufs
    
    #Ubuntu Precise 12.04(LTS)
    对于这个版本的ubuntu,需要3.13内核及一些相关的包,执行下面的命令进行安装:
    $ sudo apt-get install linux-image-generic-lts-trusty
    
  5. 重启系统(如果没有安装内核包,忽略本条)
    reboot -nf
    
  6. 安装docker-engine
    $ sudo apt-get update
    $ sudo apt-get install docker-engine
    $ sudo service docker start
    $ sudo docker run hello-world #验证是否安装成功
    
  7. 其他配置
    1. 创建docker用户

      docker daemon默认绑定在unix socket上,而不是tcp的端口。而unix socket默认是属于root用户,所以其他用户要访问该 socket需要通过sudo命令。如果想避免使用sudo,你需要将当前用户添加到docker 用户组。具体步骤:

      $ sudo usermod -aG docker ubuntu
      
      #退出当前用户,并登入当前用户
      $ docker run hello-world#验证是否成功
      
      #如果失败会报错:
      Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
      
    2. 调整Memory和Swap的配额

      有时候你在启动时会出现:

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

      这个提示说明,你当前的内核不支持cgroup对swap的控制。如果需要支持,会使用大约1%的系统总内存,同时会有10%左右的性能损失。具体步骤如下:

      #以root用户编辑/etc/default/grub
      
      #添加GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
      
      #保存文件,并执行sudo update-grub
      
      #sync
      
      #reboot系统
      
    3. 同UFW一起使用

      如果你使用了UFW(Uncomplicated Firewall),你需要做额外的配置,因为UFW默认会屏蔽所有的Forwarding流量,所以你需要zuo如下配置:

      $ sudo ufw status
      
      $ sudo vi /etc/default/ufw
      DEFAULT_FORWARD_POLICY="ACCEPT"
      
      $ sudo ufw reload
      $ sudo ufw allow 2375/tcp
      
    4. 配置docker的DNS

      Ubuntu系统默认使用127.0.0.1作为DNS服务器,具体配置文件为/etc/resolv.conf。同时,还使用dnsmasq作为DNS的缓存。当你启动容器的时候,可能会遇到下面的警告:

      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,因此使用外部的默认DNS(8.8.8.8,8.8.4.4)这两个地址都是google的免费DNS地址。如果想自己指定 DNS,具体步骤如下:

      $ sudo vi /etc/default/docker
      DOCKER_OPTS="--dns 8.8.8.8 192.168.1.1"
      $ sudo restart docker
      
      #或者修改dnsmasq
      sudo vi /etc/NetworkManager/NetworkManager.conf
      #注释掉这一行
      dns=dnsmasq
      
      # 重启网络
      $ sudo restart network-manager
      
      # 重启docker
      $ sudo restart docker
      
    5. 让Docker随系统启动

      首先需要了解你所使用的系统用的什么启动管理工具,在ubuntu 15.04及其以上版本使用的是systemd,在14.10及其以下使用的是upstart。在15.04及以上版本需要执行:

      $ sudo systemctl enable docker
      

      在14.10以下,安装程序会自动将docker加入到upstart中。

    6. 升级docker
      $ apt-get upgrade docker-engine
      
    7. 卸载docker
      $ sudo apt-get purge docker-engine
      $ sudo apt-get autoremove --purge docker-engine
      
      #删除 docker的镜像及工作目录
      $ rm -rf /var/lib/docker
      

3 CentOS上安装 docker

3.1 环境要求

  • CentOS 7.X及其以后版本
  • 3.10以后版本

3.2 通过脚本安装

更新yum源:

$ sudo yum update

下载脚本并安装:

$ curl -sSL https://get.docker.com/ | sh

启动服务:

$ sudo service docker start

验证docker:

$ sudo docker run hello-world

3.3 通过yum安装

更新源:

$ sudo yum update

添加源及gpg key:

$ sudo tee /etc/yum.repos.d/docker.repo
<<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

安装docker-engine:

$ sudo yum install docker-engine

启动docker daemon:

$ sudo service docker start

验证docker:

$ sudo docker run hello-world

3.4 添加docker用户组(同ubuntu)

$ sudo usermod -aG docker your_username

3.5 随系统启动

$ sudo chkconfig docker on`

3.6 卸载

#检查是否安装
$ yum list installed | grep docker
yum list installed | grep docker
docker-engine.x86_64   1.7.1-1.el7 @/docker-engine-1.7.1-1.el7.x86_64.rpm

#删除包
$ sudo yum -y remove docker-engine.x86_64

#删除docker镜像及中间文件
$ rm -rf /var/lib/docker

4 Mac上安装

  1. 背景

    Mac OSX下Docker通过Docker Toolbox来进行安装,Docker Toolbox是Docker公司的一个工具包,里面包括:

    • Docker Machine: 运行docker-machine程序
    • Docker Engine: Docker可执行程序
    • Docker Compose: docker-compose程序
    • Kitematic: Docker GUI
    • 包含预定义的shell脚本,用于命令行运行环境
    • Oracle VM VirtualBox

    由于Docker Daemon 使用了linux kernel的众多特性,我们不能在OS X本地运行Docker,所以我们必须使用docker-machine来创建并关联到一个虚拟机。这个虚拟机就是Docker的实际运行环境。下面是docker在mac或windows下的物理逻辑结构 

  2. 环境要求: OS X 10.8及其以上版本
  3. 安装Toolbox

    地址是https://www.docker.com/toolbox, 下载完成后根据提示进行安装。默认情况,Docker Toolbox安装在/usr/local/bin,每个用户都可以使用这些可执行程序,同时会安装带有Docker运行环境的Virtual Box。

  4. 启动Docker Machine 通过Launchpad启动程序: 
    执行程序后,会自动执行一段shell脚本启动虚拟机并进入一个shell终端。

  5. Hello World, Docker

    我们先来执行一个最简单的docker容器:

    docker run hello-world
    

    这个命令包含三部分:

    • docker - 所有docker命令的可执行程序,默认在/usr/local/bin/docker
    • run - docker 的子命令,该命令首先查看本地是否有相应的镜像,如果没有将默认从Docker Hub进行拉取,之后再运行该镜像
    • hello-world - 镜像名称,这个镜像就是echo一句hello world
      容器本身是一个简化的经过裁减的linux系统,容器可以运行一个简单命令,就像上例一样;也可以运行比较复杂的应用程序,比如:数据库,web后台等。那hello-world镜像是由谁生成的呢?是Docker官方生成的,通过docker容器,你可以在任何系统容器中运行镜像。
  6. 查找Image

    你可以在docker hub主页,或者本机通过命令行进行搜索,一般我喜欢通过命令行进行搜索。例如,搜索ubuntu:

     root@gctest:~# docker search ubuntu
     NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
     ubuntu                           Ubuntu is a Debian-based Linux operating s...   2761      [OK]
     ubuntu-upstart                   Upstart is an event-based replacement for ...   48        [OK]
     dorowu/ubuntu-desktop-lxde-vnc   Ubuntu with openssh-server and NoVNC on po...   28                   [OK]
     torusware/speedus-ubuntu         Always updated official Ubuntu docker imag...   25                   [OK]
     sequenceiq/hadoop-ubuntu         An easy way to try Hadoop on Ubuntu             24                   [OK]
     ubuntu-debootstrap               debootstrap --variant=minbase --components...   20        [OK]
     tleyden5iwx/ubuntu-cuda          Ubuntu 14.04 with CUDA drivers pre-installed    18                   [OK]
     neurodebian                      NeuroDebian provides neuroscience research...   15        [OK]
     rastasheep/ubuntu-sshd           Dockerized SSH service, built on top of of...   15                   [OK]
     consol/ubuntu-xfce-vnc           Ubuntu container with "headless" VNC sessi...   7                    [OK]
     n3ziniuka5/ubuntu-oracle-jdk     Ubuntu with Oracle JDK. Check tags for ver...   5                    [OK]
     nuagebec/ubuntu                  Simple always updated Ubuntu docker images...   4                    [OK]
     ioft/armhf-ubuntu                [ABR] Ubuntu Docker images for the ARMv7(a...   4                    [OK]
     nimmis/ubuntu                    This is a docker images different LTS vers...   3                    [OK]
     maxexcloo/ubuntu                 Docker base image built on Ubuntu with Sup...   2                    [OK]
     sylvainlasnier/ubuntu            Ubuntu 15.04 root docker images with commo...   1                    [OK]
     densuke/ubuntu-jp-remix          Ubuntu Linuxの日本語remix風味です                       1                    [OK]
     seetheprogress/ubuntu            Ubuntu image provided by seetheprogress us...   1                    [OK]
     rallias/ubuntu                   Ubuntu with the needful                         0                    [OK]
     tvaughan/ubuntu                  https://github.com/tvaughan/docker-ubuntu       0                    [OK]
     zoni/ubuntu                                                                      0                    [OK]
     partlab/ubuntu                   Simple Ubuntu docker images.                    0                    [OK]
     teamrock/ubuntu                  TeamRock's Ubuntu image configured with AW...   0                    [OK]
     konstruktoid/ubuntu              Ubuntu base image                               0                    [OK]
     esycat/ubuntu                    Ubuntu LTS                                      0                    [OK]
    

    在搜索结果中,你可以看到有的是通过"/"划分的,有的没有。凡是没有"/"分级的就是Docker Hub自带的镜像;否则该镜像就出自于某个Docker Hub用户,从这里你也可以看到,Docker Hub是一个Public仓库,你的任何镜像,别人都可以搜索到。因此,一定要注意安全,不要把敏感信息放上去了。

  7. 拉取镜像

    我们尝试拉取一个centos镜像:

     root@gctest:~# docker pull centos
    
    Using default tag: latest
    Pulling repository docker.io/library/centos
    ce20c473cd8a: Pulling dependent layers
    47d44cb6f252: Pulling metadata
    ce20c473cd8a: Download complete
    168a69b62202: Download complete
    812e9d9d677f: Download complete
    4234bfdd88f8: Pulling fs layer
    4234bfdd88f8: Download complete
    Status: Downloaded newer image for centos:latest
    root@gctest:~# docker images
    REPOSITORY                 TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    ghostcloud.cn:5000/gcali   1.5                 6ff13e5ab907        29 hours ago        213.9 MB
    centos                     latest              ce20c473cd8a        7 weeks ago         172.3 MB
    
  8. 编译Image 除了拉取官方的Image,也可以自己编译Image,编译的方法和Makefile类似。
    1. 创建Dockerfile
      root@gctest:~# mkdir myimage
      root@gctest:~# cd myimage/
      root@gctest:~/myimage# vi Dockerfile
      root@gctest:~/myimage# cat Dockerfile
      FROM centos:latest
      CMD echo "Hello myimage"
      
    2. 编译Image
      root@gctest:~/myimage# docker build -t myimage .
      
      Sending build context to Docker daemon 2.048 kB
      Step 1 : FROM centos:latest
      ---> ce20c473cd8a
      Step 2 : CMD echo "Hello myimage"
      ---> Running in 1421c66fa1a6
      ---> 2408b71c40c0
      Removing intermediate container 1421c66fa1a6
      Successfully built 2408b71c40c0
      
      root@gctest:~/myimage# docker images
      
      REPOSITORY                 TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
      myimage                    latest              2408b71c40c0        6 seconds ago       172.3 MB
      ghostcloud.cn:5000/gcali   1.5                 6ff13e5ab907        30 hours ago        213.9 MB
      centos                     latest              ce20c473cd8a        7 weeks ago         172.3 MB
      
    3. 运行自己的Image
      root@gctest:~/myimage# docker run myimage
      Hello myimage
时间: 2024-10-02 22:09:59

Docker基础之三: 安装docker+HelloWorld的相关文章

《第一本Docker书(修订版)》——第2章 安装Docker 2.1安装Docker的先决条件

第2章 安装Docker Docker的安装既快又简单.目前,Docker已经支持非常多的Linux平台,包括Ubuntu和RHEL(Red Hat Enterprise Linux,Red Hat企业版Linux).除此之外,Docker还支持Debian.CentOS.Fedora.Oracle Linux等衍生系统和相关的发行版.如果使用虚拟环境,甚至也可以在OS X和Microsoft Windows中运行Docker. 目前来讲,Docker团队推荐在Ubuntu.Debian或者RH

Docker Machine快速安装Docker环境(二)

什么是Docker Machine? Machine是一个简化安装Docker环境的工具.怎么简化法,例如,在ubuntu安装一个docker环境要按照U这个系统配置教程来装,哪天又换了CentOS系统,又要按照这个系统配置教程装.市场上主流Linux系统版本很多,每次安装岂不有些麻烦.使用Machine工具就简单很多,一两条命令即可在主流Linux系统上安装Docker环境,用户不用考虑什么操作系统. 另一方面,Machine还具备Docker工具管理什么虚拟化技术,Generic驱动默认管理

Docker基础之五: 使用Docker容器

使用Docker容器 (对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面.) 这一节我们将从运行一个简单的Hello world入手,来讲解如何使用容器. 1 运行Hello World root@shev:~# docker run ubuntu:14.04 echo hello-world hello-world root@shev:~# docker ps -a CONTAINER ID IMAGE COMMAND C

Ubuntu下安装Docker教程_docker

首先来看下来自<Docker从入门到实战>这边书的笔记: 为什么要使用DockerDocker容器启动可以实现秒级.对系统利用率高,一台主机可以运行数千个容器.更快速的交付和部署更高效虚拟化更轻松迁移和扩展:docker几乎可以在任何平台运行更简单的管理 Docker和传统虚拟机比较: 对比图片Docker三个基本概念 镜像(images):一个只读模版,镜像可以构建docker容器,用户可以创建和更新镜像等等.注意,镜像是只读的 容器(container):dockor利用容器来运行运用,容

在Windows系统下安装docker窗口的配置过程_docker

前言 目前对docker支持最好的是Ubuntu系统,docker不支持在windows上运行,必须借助docker-machine.docker提供了toolbox用于在windows和mac平台安装docker. 工具箱包括:       docker machine       Docker Engine       Kitematic       docker命令行运行环境       Oracle VM VirtualBox 安装之前需要检查BIOS中虚拟化的设置是否已打开,参考此页面

详解ubuntu 16.04安装docker教程_docker

本文介绍了ubuntu 16.04安装docker教程,具体如下: 环境 操作系统:ubuntu 16.04 64位,默认安装 准备 1. 添加GPG key: $ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D 2. 添加源 新建文件:/etc/apt/sources.list.d/docker.list,

在windows下的安装Docker的教程_docker

非官方备注:你的CPU一定要支持VT才可以,笔者的笔记本T6400不支持VT是装不上的,所以一定要支持VT,好在笔者的MAC很OK,公司电脑也给力,如果在win7系统安装需要是64的系统. 上一节我们介绍了在ubuntu和centos下的安装,当然都是基于64位系统的,在学习过程中,你可能没有这些东西,当然你可以用virtualbox或者Vmware虚拟化出来,今天我们介绍的是官网给我们提供的using vagrant! 介绍 Docker可以用虚拟主机技术运行在Windows上像virtual

安装 Docker Machine - 每天5分钟玩转 Docker 容器技术(45)

前面我们的实验环境中只有一个 docker host,所有的容器都是运行在这一个 host 上的.但在真正的环境中会有多个 host,容器在这些 host 中启动.运行.停止和销毁,相关容器会通过网络相互通信,无论它们是否位于相同的 host. 对于这样一个 multi-host 环境,我们将如何高效地进行管理呢?我们面临的第一个问题是:为所有的 host 安装和配置 docker. 在前面我们手工安装了第一个 docker host,步骤包括: 安装 https CA 证书 添加 GPG ke

在Windows系统上安装Docker的教程

  大家好,今天我们来了解一下 Windows 操作系统中的 Docker 以及在其中安装 Docker Windows 客户端的知识.Docker 引擎使用 Linux 特有的内核特性,因此不能通过 Windows 内核运行,所以,(在 Windows 上)Docker 引擎创建了一个小的虚拟系统运行 Linux 并利用它的资源和内核.这样,Windows Docker 客户端就可以用这个虚拟的 Docker 引擎来构建.运行以及管理 Docker 容器.有个叫 Boot2Docker 的团队