Ubuntu 16 Docker 安装使用

2016年8月5日

Ubuntu Docker 安装使用

系统版本:Ubuntu 16.04.1 LTS \n \l

一 安装 Docker

更新APT镜像源
首先需要安装 apt-transport-https 包支持 https 协议的源。

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

#添加 源的 gpg 密钥。

  1. sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

#添加 源

  1. sudo echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" >>/etc/apt/sources.list.d/docker.list
################################################################################
## 12.04 (LTS) 代号为 precise,14.04 (LTS) 代号为 trusty,15.04 代号为
## vivid,15.10 代号为 wily,16.04 代号为Xenial 。这里获取到代号为 trusty。
## 接下来就可以添加 Docker 的官方 apt 软件源了。通过下面命令创建
## /etc/apt/sources.list.d/docker.list 文件,并写入源的地址内容。非
## trusty 版本的系统注意修改为自己对应的代号。
## 示例  ubuntu 14.04
## sudo echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" >> /etc/apt/sources.list.d/docker.list
################################################################################

添加成功后,更新 apt 软件包缓存。

  1. $ sudo apt-get update
  2. sudo apt-get install -y docker-engine

二 Docker 实例

镜像管理

  1. docker images:列出本地所有镜像
  2. docker search <IMAGE_ID/NAME>:查找image
  3. docker pull <IMAGE_ID>:下载image
  4. docker push <IMAGE_ID>:上传image
  5. docker rmi <IMAGE_ID>:删除image

1, 获取镜像

下载 Docker 镜像  从 Docker Hub 中拉取或者更新指定镜像。

搜索需要的镜像  docker search 系统(ubuntu centos debain ......)
示例: docker search  ubuntu

root@120413:~# docker search  ubuntu
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                            Ubuntu is a Debian-based Linux operating s...   4410      [OK]
ubuntu-upstart                    Upstart is an event-based replacement for ...   65        [OK]
rastasheep/ubuntu-sshd            Dockerized SSH service, built on top of of...   30                   [OK]
torusware/speedus-ubuntu          Always updated official Ubuntu docker imag...   26                   [OK]
ubuntu-debootstrap                debootstrap --variant=minbase --components...   25        [OK]
nickistre/ubuntu-lamp             LAMP server on Ubuntu                           8                    [OK]
nuagebec/ubuntu                   Simple always updated Ubuntu docker images...   6                    [OK]
nickistre/ubuntu-lamp-wordpress   LAMP on Ubuntu with wp-cli installed            6                    [OK]
nimmis/ubuntu                     This is a docker images different LTS vers...   5                    [OK]
maxexcloo/ubuntu                  Docker base image built on Ubuntu with Sup...   2                    [OK]
admiringworm/ubuntu               Base ubuntu images based on the official u...   1                    [OK]
darksheer/ubuntu                  Base Ubuntu Image -- Updated hourly             1                    [OK]
jordi/ubuntu                      Ubuntu Base Image                               1                    [OK]
lynxtp/ubuntu                     https://github.com/lynxtp/docker-ubuntu         0                    [OK]
teamrock/ubuntu                   TeamRock's Ubuntu image configured with AW...   0                    [OK]
datenbetrieb/ubuntu               custom flavor of the official ubuntu base ...   0                    [OK]
life360/ubuntu                    Ubuntu is a Debian-based Linux operating s...   0                    [OK]
esycat/ubuntu                     Ubuntu LTS                                      0                    [OK]
widerplan/ubuntu                  Our basic Ubuntu images.                        0                    [OK]
croscon/ubuntu                    Crosconized Ubuntu                              0                    [OK]
smartentry/ubuntu                 ubuntu with smartentry                          0                    [OK]
webhippie/ubuntu                  Docker images for ubuntu                        0                    [OK]
ustclug/ubuntu                    ubuntu image for docker with USTC mirror        0                    [OK]
konstruktoid/ubuntu               Ubuntu base image                               0                    [OK]
dorapro/ubuntu                    ubuntu image                                    0                    [OK]

也可以指定 STARS
实例 指定三星以上的

root@120413:~# docker search  -s 3 ubuntu
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                            Ubuntu is a Debian-based Linux operating s...   4410      [OK]
ubuntu-upstart                    Upstart is an event-based replacement for ...   65        [OK]
rastasheep/ubuntu-sshd            Dockerized SSH service, built on top of of...   30                   [OK]
torusware/speedus-ubuntu          Always updated official Ubuntu docker imag...   26                   [OK]
ubuntu-debootstrap                debootstrap --variant=minbase --components...   25        [OK]
nickistre/ubuntu-lamp             LAMP server on Ubuntu                           8                    [OK]
nuagebec/ubuntu                   Simple always updated Ubuntu docker images...   6                    [OK]
nickistre/ubuntu-lamp-wordpress   LAMP on Ubuntu with wp-cli installed            6                    [OK]
nimmis/ubuntu                     This is a docker images different LTS vers...   5                    [OK]

下载 pull 容器

  1. docker   pull  ubuntu

查看镜像 : docker  images

root@120413:/etc/nginx/sites-enabled# docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
ubuntu/lamp                     latest              c2d6a728dcc6        18 hours ago        916.6 MB
nickistre/ubuntu-lamp           latest              b581b92b523a        12 days ago         634.3 MB
ubuntu                          16.04               42118e3df429        13 days ago         124.8 MB
ubuntu                          latest              42118e3df429        13 days ago         124.8 MB
jdeathe/centos-ssh-apache-php   latest              fd85e9e81b24        3 months ago        306.6 MB

在列出信息中,可以看到几个字段信息
来自于哪个仓库,比如 ubuntu
镜像的标记,比如 14.04
它的 ID 号(唯一)
创建时间
镜像大小
其中镜像的 ID 唯一标识了镜像,注意到 ubuntu:16.04 和 ubuntu
具有相同的镜像 ID ,说明它们实际上是同一镜像。
具有相同的镜像 ID 怎么来的 : docker tag 42118e3df429 ubuntu:16.04
TAG 信息用来标记来自同一个仓库的不同镜像。例如 ubuntu 仓库中有多个镜
像,通过 TAG 信息来区分发行版本,例如
10.04 、 12.04 、 12.10 、 13.04 、 14.04 等。例如下面的命令指定使用
镜像 ubuntu:16.04 来启动一个容器。

  1. $ sudo docker run -t -i ubuntu:16.04 /bin/bash

如果不指定具体的标记,则默认使用 latest 标记信息。
列出

镜像有了  接下来就是 使用下载的镜像启动容器

2 启动容器 创建容器 创建镜像

容器管理

docker run -i -t <IMAGE_ID> /bin/bash:-i:标准输入给容器    -t:分配一个虚拟终端    /bin/bash:执行bash脚本

-d:以守护进程方式运行(后台)

-P:默认匹配docker容器的5000端口号到宿主机的49153 to 65535端口

-p <HOT_PORT>:<CONTAINER_PORT>:指定端口号

-i 以交互模式运行容器,通常与 -t 同时使用;

-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--name="nginx-lb" 为容器指定一个名称;

--dns 8.8.8.8 指定容器使用的DNS服务器,默认和宿主一致;

--dns-search example.com 指定容器DNS搜索域名,默认和宿主一致;

-h "mars" 指定容器的hostname;

-e username="ritchie" 设置环境变量;

--env-file=[] 从指定文件读入环境变量;

--cpuset="0-2" or --cpuset="0,1,2" 绑定容器到指定CPU运行;

--rm:退出时删除容器

docker run [options "o">] <image> [ "nb">command]  "o">[arg...]

示例 :

  1. docker   run  -d  -i  -t -p 23.88.229.213:8081:80  --name ubuntu-docker-LAMP  ubuntu/lamp
  1. docker stop <CONTAINER_ID>:停止container
  2. docker start <CONTAINER_ID>:重新启动container
  3. docker ps - Lists containers.
    1. -l:显示最后启动的容器
    2. -a:同时显示停止的容器,默认只显示启动状态
  4. docker attach <CONTAINER_ID> 连接到启动的容器
  5. docker logs <CONTAINER_ID>  : 输出容器日志

-f:实时输出

  1. docker cp <CONTAINER_ID>:path hostpath:复制容器内的文件到宿主机目录上
  2. docker rm <CONTAINER_ID>:删除container
  3. docker rm `docker ps -a -q`:删除所有容器
  4. docker kill `docker ps -q`
  5. docker rmi `docker images -q -a`
  6. docker wait <CONTAINER_ID>:阻塞对容器的其他调用方法,直到容器停止后退出
  7. docker top <CONTAINER_ID>:查看容器中运行的进程
  8. docker diff <CONTAINER_ID>:查看容器中的变化
  9. docker inspect <CONTAINER_ID>:查看容器详细信息(输出为Json)

-f:查找特定信息,如docker inspect -f '{{ .NetworkSettings.IPAddress }}'

docker commit -m "comment" -a "author" <CONTAINER_ID>  ouruser/imagename:tag

  1. docker extc -it <CONTAINER> <COMMAND> :在容器里执行命令,并输出结果

网络管理

  1. docker run -P:随机分配端口号
  2. docker run -p 5000:5000:绑定特定端口号(主机的所有网络接口的5000端口均绑定容器的5000端口)
  3. docker run -p 127.0.0.1:5000:5000:绑定主机的特定接口的端口号
  4. docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py:绑定udp端口号
  5. docker port <CONTAINER_ID> 5000:查看容器的5000端口对应本地机器的IP和端口号

使用Docker Linking连接容器:

Docker为源容器和接收容器创建一个安全的通道,容器之间不需要暴露端口,接收的容器可以访问源容器的数据

  1. docker run -d -P --name <CONTAINER_NAME> --link <CONTAINER_NAME_TO_LINK>:<ALIAS>

数据管理

Data Volumes:volume是在一个或多个容器里指定的特殊目录

数据卷可以在容器间共享和重复使用
可以直接修改容器卷的数据
容器卷里的数据不会被包含到镜像中
容器卷保持到没有容器再使用它

可以在容器启动的时候添加-v参数指定容器卷,也可以在Dockerfile里用VOLUMN命令添加

  1. docker run -d -P --name web -v /webapp training/webapp python app.py

也可以将容器卷挂载到宿主机目录或宿主机的文件上,<容器目录或文件>的内容会被替换为<宿主机目录或文件>的内容,默认容器对这个目录有可读写权限

  1. docker run -d -P --name web -v <宿主机目录>:<容器目录> training/webapp python app.py

可以通过指定ro,将权限改为只读

  1. docker run -d -P --name web -v <宿主机目录>:<容器目录>:ro training/webapp python app.py

在一个容器创建容器卷后,其他容器便可以通过--volumes-from共享这个容器卷数据,如下:

  1. docker run -d -v /dbdata --name db1 training/postgres echo Data-only container for postgres

首先启动了一个容器,并为这个容器增加一个数据卷/dbdata,然后启动另一个容器,共享这个数据卷

  1. docker run -d --volumes-from db1 --name db2 training/postgres

此时db2使用了db1的容器卷,当容器db1被删除时,容器卷也不会被删除,只有所有容器不再使用此容器卷时,才会被删除

docker rm -v:删除容器卷

除了共享数据外,容器卷另一个作用是用来备份、恢复和迁移数据

  1. docker run --volumes-from db1 -v /home/backup:/backup ubuntu tar cvf /backup/backup.tar /dbdata

启动一个容器数据卷使用db1容器的数据卷,同时新建立一个数据卷指向宿主机目录/home/backup,将/dbdata目录的数据压缩为/backup/backup.tar

  1. docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
  2. docker run --volumes-from dbdata2 -v /home/backup:/backup busybox tar xvf /backup/backup.tar

启动一个容器,同时把backup.tar的内容解压到容器的backup

仓库管理

docker login:登录

实例 :
上述docker images 输出可以看到有好几个 镜像. lamp 的镜像可以下载 不过我没有使用而是自己构建一个 LAMP的镜像
指定 ubuntu 镜像 启动一个容器

  1. docker run -t -i ubuntu /bin/bash

root@7aced629fce4:# cat /etc/issue
Ubuntu 16.04.1 LTS \n \l

就像新系统一样配置一个 LAMP 的环境

  1. apt-get update
  2. apt-get install vim curl net-tools

LAMP 环境

修改 apache的默认页便于查看

  1. cd /var/www/html/
  2. mv /var/www/html/index.html /var/www/html/index.html.bak
  3. echo "Hello welcome to Docker . This is Apache2 Default Page ." > /var/www/html/index.html
curl 127.0.0.1
Hello welcome to Docker . This is Apache2 Default Page .

退出容器 (不能关闭容器,如果容器关闭所做的操作将没有了哦)

ctrl + p + q

保存容器里的操作 为一个新的镜像

docker commit 7aced629fce4 ubuntu/lampdocker images
root@120413:# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu/lamp latest c2d6a728dcc6 24 hours ago 916.6 MB
ubuntu latest 42118e3df429 13 days ago 124.8 MB

启动 基于lamp镜像的容器

  1. docker run -d -i -t -p 23.88.229.213:8081:80 --name ubuntu-docker-LAMP ubuntu/lamp
  2. docker ps -a

root@120413:# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
76405d443d72 ubuntu/lamp "/bin/bash" 23 hours ago Up 7 hours 22/tcp, 23.88.229.213:8081->80/tcp ubuntu-docker-LAMP
3a27f797bf36 ubuntu "/bin/bash" 26 hours ago Exited (0) 26 hours ago pensive_blackwell

进入 容器

docker attach 76405d443d72
启动 apache
service apache2 start

退出容器

ctrl + p + q

查看效果

curl 23.88.229.213:8081
Hello welcome to Docker . This is Apache2 Default Page .

挂载本地磁盘

此方式为读写即本地和docker 中都可以改
docker run -d -i -t -p 23.88.229.213:8081:80 -v /home/docker/test/:/home/wwwroot/88885345.com --name ubuntu-docker-LAMP-v ubuntu/lamp可以通过指定ro,将权限改为只读 即 只有宿主机可以更改
docker run -d -i -t -p 23.88.229.213:8081:80 -v /home/docker/test/:/home/wwwroot/88885345.com:ro --name ubuntu-docker-LAMP-v ubuntu/lamp

Docker 容器或镜像的导入导出命令介绍

涉及的命令有export、import、save、load

save

  1. 命令
  2. docker save [options] images [images...]
  3. 示例
  4. docker save -o nginx.tar nginx:latest
  5. docker save > nginx.tar nginx:latest
  6. 其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)

load

  1. 命令
  2. docker load [options]
  3. 示例
  4. docker load -i nginx.tar
  5. docker load < nginx.tar
  6. 其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息

export

  1. 命令
  2. docker export [options] container
  3. 示例
  4. docker export -o nginx-test.tar nginx-test
  5. 其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name)

import

  1. 命令
  2. docker import [options] file|URL|- [REPOSITORY[:TAG]]
  3. 示例
  4. docker import nginx-test.tar nginx:imp
  5. cat nginx-test.tar | docker import - nginx:imp

区别

  1. export命令导出的tar文件略小于save命令导出的
  2. export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出
  3. 基于第二点,export导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。如下图所示,nginx:latest是save导出load导入的,nginx:imp是export导出import导入的。

建议 可以依据具体使用场景来选择命令

  1. 若是只想备份images,使用save、load即可
  2. 若是在启动容器后,容器内容有变化,需要备份,则使用export、import

没有评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注