Docker简介

1.什么是容器
  • 一种操虚拟化的方案
  • 操作系统级别的虚拟化
  • 只能允运行相同或相似内核的操作系统——只能允许linux
  • 依赖于linux内核特性:Namespace和C groups(control group)

2. 容器的优点

内存占用
容器只需要占用应用的内存,而虚拟机需要占用几个G的系统硬件内存

硬件消耗
容器与宿主共同占用硬件消耗。而虚拟机需要单独消耗硬件资源。
这里写图片描述

3. Docker来源
  • 由Go语言开源引擎编写。
  • 作用为:将应用程序化部署到容器。
  • 2013年初dotCloud发布
  • 基于Apache 2.0 开源授权协议发行
4.Docker的目标
  • 提供简单轻量的建模方式
  • 职责的逻辑分离
  • 快速高效的开发生命周期
  • 鼓励面向服务的架构

开发思想:高内聚,低耦合,单一任务

5.docker的使用场景
  1. 使用docker容器开发、测试、部署服务
  2. 创建隔离的运行环境
  3. 搭建测试环境
  4. 构建多用户的平台即服务基础设施
  5. 提供软件即服务应用程序
  6. 高性能、超大规模的宿主部署
6.Docker的基本组成
  1. Docker的客户端、守护进程
  2. Docker image镜像——只读
    这里写图片描述

  3. Docker Container容器——写时复制
    这里写图片描述

  4. Docker Registry 仓库

    • 公有-通过账号在Docker hub下载
    • 私有

    这里写图片描述

Docker 基本使用

1. 安装Docker
sudo apt-get install docker.io

切换到root用户进行操作

# 查看版本号
$docker --version
Docker version 17.12.1-ce, build 7390fc6

显示:
一个客户端、一个服务器端

root@tssys:/home/toucan/software# docker version
Client:
 Version:   17.12.1-ce
 API version:   1.35
 Go version:    go1.10.1
 Git commit:    7390fc6
 Built: Wed Apr 18 01:23:11 2018
 OS/Arch:   linux/amd64

Server:
 Engine:
  Version:  17.12.1-ce
  API version:  1.35 (minimum version 1.12)
  Go version:   go1.10.1
  Git commit:   7390fc6
  Built:    Wed Feb 28 17:46:05 2018
  OS/Arch:  linux/amd64
  Experimental: false
2.查找名为”tutorial”的镜像
root@tssys:/home/toucan/software# docker search tutorial

# 显示
NAME                                          DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
learn/tutorial                                                                                39
georgeyord/reactjs-tutorial                   This is the backend of the React comment box…   5                                       [OK]
3.镜像从仓库下载到本地,名字为:用户名/镜像名
root@tssys:/home/toucan/software# docker pull learn/tutorial

# 下载中
Using default tag: latest
latest: Pulling from learn/tutorial
271134aeb542: Downloading [===>                                               ]  4.308MB/71.04MB

# 下载完成
Using default tag: latest
latest: Pulling from learn/tutorial
271134aeb542: Pull complete
Digest: sha256:2933b82e7c2a72ad8ea89d58af5d1472e35dacd5b7233577483f58ff8f9338bd
Status: Downloaded newer image for learn/tutorial:latest
4.运行镜像,执行显示“hello world”
docker run learn/tutorial echo 'hello world'

# 显示
hello world
5.在容器中安装,ping命令
docker run learn/tutorial apt-get install -y ping
6.列出当前系统下有哪些容器的运行记录
docker ps -a
# -a显示如有运行过的容器

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                          PORTSNAMES
8fbc64458d78        learn/tutorial      "apt-get install -y …"   49 seconds ago       Exited (0) 44 seconds agoserene_visvesvaraya
a0106fb110ff        learn/tutorial      "echo 'hello world'"     About a minute ago   Exited (0) About a minute agopriceless_wozniak

docker ps -l

# -l显示最后一次运行的容器
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
8fbc64458d78        learn/tutorial      "apt-get install -y …"   2 minutes ago       Exited (0) 2 minutes ago                       serene_visvesvaraya
# 批量退出容器
docker stop $(docker ps -a -q)

# 批量删除退出的容器
docker rm -v $(docker ps -a -q -f status=exited)
7.查看有哪些镜像
docker images

# 显示
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
learn/tutorial      latest              a7876479f1aa        5 years ago         128MB
8.根据容器ID号,提交新docker镜像
root@tssys:/home/toucan/software# docker commit 8fbc64458d78 learn/ping_toucan

# 提交后返回了一串号码
sha256:d9d887ece8e9769a429d8b5a70d482c0809b8aa8fed84ed979bd1aca7e9a8b67
9.查看镜像

出现新提交的镜像learn/ping_toucan

root@tssys:/home/toucan/software# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
learn/ping_toucan   latest              d9d887ece8e9        2 minutes ago       140MB
learn/tutorial      latest              a7876479f1aa        5 years ago         128MB

10.运行新的docker镜像,连接网站

docker run learn/ping ping www.baidu.com
# 原理的镜像没有ping,连接不成功
root@tssys:/home/toucan/software# docker run learn/tutorial ping www.baidu.com
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"ping\":executable file not found in $PATH": unknown.
ERRO[0000] error waiting for container: context canceled

# 安装ping后的镜像,可以连接成功
root@tssys:/home/toucan/software# docker run learn/ping_toucan ping www.baidu.com
PING www.a.shifen.com (163.177.151.109) 56(84) bytes of data.
64 bytes from 163.177.151.109: icmp_req=1 ttl=127 time=7.47 ms
64 bytes from 163.177.151.109: icmp_req=2 ttl=127 time=7.92 ms
docker ps查看运行中的容器,docker inspect查看容器运行的详细信息
root@tssys:/Bio/# docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
7f6cc08689e9        learn/ping_toucan   "ping www.baidu.com"   10 seconds ago      Up 9 seconds                            inspiring_almeida


docker inspect 容器ID
root@tssys:/Bio/# docker inspect 7f6cc08689e9
11.查看当下的镜像
root@tssys:/home/toucan/software# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
learn/ping_toucan   latest              d9d887ece8e9        11 minutes ago      140MB
learn/tutorial      latest              a7876479f1aa        5 years ago         128MB
12.将新镜像保存到docker hub中
docker push learn/ping

由于还没有登录docker的账号,密码,因此无法上传

root@tssys:/home/toucan/software# docker push learn/ping_toucan
The push refers to repository [docker.io/learn/ping_toucan]
9092c0b708ff: Preparing
ee1ba0cc9b81: Preparing
denied: requested access to the resource is denied

13,docker安装准备

检查内核版本

 root@tssys:/Bio/# uname -a
Linux tssys 4.15.0-23-generic #25-Ubuntu SMP Wed May 23 18:02:16 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

检查存取驱动Device Mapper

root@tssys:/Bio/#  ls -l /sys/class/misc/device-mapper
lrwxrwxrwx 1 root root 0 614 22:14 /sys/class/misc/device-mapper -> ../../devices/virtual/misc/device-mapper
14.安装ubuntu维护的版本
sudo apt-get install docker.io
source /etc/bash_completion.d/docker.io # 无此文件,不影响正常使用
sudo docker version
15.查看守护进程的运行状态
ps -ef|grep docker
16.使用service命令管理

启动、停止、重启

sudo service docker start
sudo service docker stop
sudo service docker restart
17. 查看docker的状态
sudo status docker

docker守护进程配置文件,修改后需要服务重启

/etc/default/docker
18.使用bash的方法进入容器,不需要每次指定容器名称

互动标准输入i和分配新命令行t。i: –interactive Keep STDIN open even if not attached; t: –tty Allocate a pseudo-TTY

root@tssys:/Bio/# docker run -i -t learn/ping_toucan /bin/bash

# 已经进入系统,主机名称为数字
root@c10e44454ebd:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  selinux  srv  sys  tmp  usr  var
root@c10e44454ebd:/# pwd
/

# 退出
root@c10e44454ebd:/# exit
exit
root@tssys:/Bio/#
19.指定容器名字
root@tssys:/Bio/# docker run  --name=container01 -i -t learn/ping_toucan /bin/bash

后续,输入此名字与输入ID效果一致

docker inspect container01
20.重新启动停止的容器
# 重新启动旧容器
root@tssys:/Bio/# docker start -i container01
root@6f6902a3723d:/#

# 删除已经停止的容器,不能删除运行中的容器
root@tssys:/Bio/# docker rm a0106fb110ff
a0106fb110ff

21.守护式容器

  • 能够长期运行
  • 没有交互会话适
  • 适合运行应用程序和服务

方式一run

docker run -i -t IMAGE /bin/bash

# 使用Ctrl + P 或者Ctrl + Q 退出
# 这样的容器,在后台长期运行

# 查看正在运行的容器
root@tssys:/Bio# docker ps

# 使用acttach方法,重新返回运行中的容器,指定容器ID或者NAMES
root@tssys:/Bio# docker attach 236116a6d5c2

# 直到使用exit退出

方式二run

docker run -d IMAGE [COMMAND][ARG...]

-d 使用循环脚本,让容器一直运行

root@tssys:/Bio# docker run --name container03 -d learn/ping_toucan /bin/sh -c "while true;do echo hello world;sleep 30;done"
266827bbdf65c1a91f6c190db6933c8d399a462c42004a3047dabe50a1f86459

# 容器在运行
root@tssys:/Bio# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
266827bbdf65        learn/ping_toucan   "/bin/sh -c 'while t…"   4 seconds ago       Up 3 seconds                            container03

查看后台容器运行的日志
- f 实时显示log输入,默认为false
- t 显示时间,默认为false
- –tail 默认为 –tail=”all“,显示所有,tail 0表示显示最新的一条。

root@tssys:/Bio# docker logs -ft container03
2018-06-15T10:39:10.448145859Z hello world
2018-06-15T10:39:40.450413197Z hello world
2018-06-15T10:40:10.452890338Z hello world
^C
root@tssys:/Bio# docker logs -ft --tail 0 container03
2018-06-15T10:40:40.455818035Z hello world

使用top命令,显示指定容器的进程

root@tssys:/Bio# docker top container03
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                14149               14130               0                   18:39               ?                   00:00:00            /bin/sh -c while true;do echo hello world;sleep 30;done
root                14316               14149               0                   18:44               ?                   00:00:00            sleep 30

对运行中的容器,启动新的进程

docker exec -d -i -t 容器名 命令

# 多增加一个bash
root@tssys:/Bio# docker exec -it  container03 /bin/bash

停止守护式容器

docker stop 容器名——发送信息,让容器停止
docker kill 容器名——直接停止容器


22.安装Docker

# 安装Docker
sudo apt-get install docker.io
# 启动Docker服务
service docker start
# 关闭Docker服务
service docker stop

# 查看是否有容器进程在运行
docker ps -a

非root用户,不需要使用sudo使用docker,需要将用户添加到docker组
1. sudo groupadd docker
2. sudo gpasswd -a 用户名 docker
3. sudo service docker restart

显示输出

$sudo groupadd docker
groupadd: group 'docker' already exists
toucan@tssys /Bio  五 615 19:10  forstart
$sudo gpasswd -a toucan docker
Adding user toucan to group docker

$docker version
Client:
 Version:   17.12.1-ce
 API version:   1.35
 Go version:    go1.10.1
 Git commit:    7390fc6
 Built: Wed Apr 18 01:23:11 2018
 OS/Arch:   linux/amd64
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.35/version: dial unix /var/run/docker.sock: connect: permission denied

需要用户重新登录才能,接收权限

23.宿主与容器文件共享

$docker run --rm -it --name=ubuntu4 -v /home/toucan/Temp:/tmp ubuntu
root@a7fb537b1ac5:

参数详解

run 运行镜像
-it 启动终端命令行模式
--nane 指定容器名称
-v 左边为宿主的绝对地址,右边为容器的绝对地址
ubuntu 为镜像名称
23.删除docker镜像

docker rmi [OPTIONS] IMAGE [IMAGE...]
-f --force=false  强制删除镜像
--no-prune=false 保留镜像中被打标签的父镜像

删除时若使用IMAGE名和TAG名的形式则每次会删除一个,如果一个镜像有多个TAG那么只有当最后一个IMAGE +TAG被删除时镜像菜会被删除

若使用IMAGEID可以删除其对应的多个IMAGE+TAG

安装qiime2

执行命令,安装最新版qiime2

docker pull qiime2/core

输出显示,其中有一个是2G,下来许久,过夜下载吧。

$docker pull qiime2/core
Using default tag: latest
latest: Pulling from qiime2/core
85b1f47fba49: Pull complete
6b3cb0c49789: Pull complete
fecb432dacf0: Downloading [=================================================> ]  132.3MB/134.3MB
f461f7e3890d: Download complete
5f703fd294da: Download complete
564fce31ff2d: Download complete
4f0aaff99b30: Download complete
aec65fe0f052: Downloading [>                                                  ]  13.37MB/2.691GB
30623f442f76: Download complete
98b7fa203a9c: Download complete
4cdf4a2e6d3d: Downloading [=================================>                 ]  380.1kB/561.6kB

注:最终还是无法安装,2.89GB的下载过夜也无法动静,也没有断线。估计要翻墙才能下载。

参考文档:
宏基组订阅号:
扩增子分析流程QIIME. 1 使用Docker配置QIIME1安装
Docker的基本使用-Ubuntu18.04

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐