Docker基础之三: 安装docker+HelloWorld

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 安装Docker Docker最核心的程序是Docker Engine,根据参数,它既可以作为后台daemon运行,也可以作为命令行工具使用。 1 Linux上安装 Docker本身是基于linux内核的,因此只要内核版本足够新,一般大于3.10左右,就可以运行。各种系统的安装方式基本相同,只

安装Docker

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

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

1 Linux上安装

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

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下的物理逻辑结构 alt text

  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
目录
相关文章
|
17天前
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
156 2
Docker安装Mysql5.7,解决无法访问DockerHub问题
|
4天前
|
Prometheus 监控 Cloud Native
基于Docker安装Grafana和Prometheus
Grafana 是一款用 Go 语言开发的开源数据可视化工具,支持数据监控和统计,并具备告警功能。通过 Docker 部署 Grafana 和 Prometheus,可实现系统数据的采集、展示和告警。默认登录用户名和密码均为 admin。配置 Prometheus 数据源后,可导入主机监控模板(ID 8919)进行数据展示。
32 2
|
7天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
22 2
|
8天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
16 3
|
10天前
|
关系型数据库 MySQL Linux
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
105 2
|
18天前
|
数据可视化 数据挖掘 Docker
Docker Desktop 安装 ClickHouse 超级简单教程
Docker Desktop 安装 ClickHouse 超级简单教程
35 1
|
18天前
|
Ubuntu Linux 网络安全
Docker&Docker Compose安装(离线+在线)
Docker&Docker Compose安装(离线+在线)
132 1
|
20天前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
151 3
|
25天前
|
Linux 网络安全 Docker
安装后无法使用 Docker 命令
【10月更文挑战第3天】
101 2
|
26天前
|
存储 NoSQL MongoDB
docker安装Mongodb
这篇文章详细说明了如何使用Docker安装MongoDB,包括拉取镜像、创建并运行容器、数据持久化存储以及访问容器内的MongoDB服务的具体步骤。
53 1